Python 套接字传感器 gui 系统
Python for sockets sensors gui system
我是套接字编程和 SW 架构的新手。
我的系统必须是:使用 python 的笔记本电脑中的 GUI。有许多具有相同传感器(GPS、温度、压力……)的嵌入式系统。每次你 select 一个嵌入式系统,我的程序需要与它建立连接,我需要在 GUI 中显示它的 GPS 位置和它的传感器的实时馈送(目前 GUI 不是问题,我可以用 Kivy 或 Tkinter 来做)。
这就是它必须运行的方式:
- 在 GUI 中,有一个输入嵌入式系统 ID 的字段和一个尝试连接它的按钮。
- 点击按钮后,程序会建立连接并持续实时显示 GPS、温度和压力,直到连接断开。
我正在考虑用这个架构来做:
- 处理 GUI 的线程
- 每次单击按钮并找到嵌入式系统时,都会实例化我创建的 class 对象。
- class 具有以下属性:
- 列出 GPS(以存储 GPS 源)
- 列出温度(用于存储温度源)
- 列表压力
- a thread_socket(套接字是在线程中创建的,作为嵌入式系统的客户端。因此每次实例化 class 的对象时,都会创建一个单独的套接字)
- class 有如下方法:
- Get_Gps() :每次调用此方法时都会更新 GPS 列表属性
- Get_Temperature() / 压力()
- Stop() : 当调用此方法时,嵌入式系统需要关闭。
在套接字线程中,我有 send_message() 和 receive_message() 等方法通过 TCP/IP 发送获取 GPS 和传感器数据或停止系统的请求.
在每个嵌入式系统上,我都会使用 python 放置一个服务器,每次系统启动时都会设置该服务器。
这样系统的ID就是服务器的ip,而我的笔记本电脑就是客户端,当我select一个系统时搜索ip地址。
我的问题是:
- 你觉得这个架构好吗?
- 在列表中接收实时提要是否正确?例如 gps。
- 每次我找到一个系统时,我都会实例化一个对象来保持干净,这是一个好方法吗?
- 您看到任何问题或改进了吗?
提前谢谢你,
总的来说,我觉得你的方法没问题。
但是,您应该记住以下几点:
在设计软件时,您应该首先确定所涉及的不同任务,并为每个任务定义单独的功能单元。这就是separation of concerns.
的概念
我还建议阅读 Model-View-Controller (MVC) pattern: In your case, the model would be your class containing the data structure for the measurements and the business logic (e.g. polling data from a source for example every second until the connection is stopped). The view and the controller might both be located in the GUI (which is absolutely fine).
GUI 不一定是显式线程,但许多框架更倾向于使用基于事件的概念,让您可以为给定的用户交互定义应用程序的行为。
为什么您实际上需要测量列表?是否需要在特定时间段内保留测量历史记录?这是一个会不断增长的列表还是一个滚动列表(例如,用于在 GUI 中显示最后 n seconds/minutes 个测量值)?为每个新连接启动一个新的 class 实例似乎有点矛盾,因为当您停止连接并终止实例时,您显然会丢失内容。
希望这能给您一些关于如何从那里开始的想法。
我是套接字编程和 SW 架构的新手。
我的系统必须是:使用 python 的笔记本电脑中的 GUI。有许多具有相同传感器(GPS、温度、压力……)的嵌入式系统。每次你 select 一个嵌入式系统,我的程序需要与它建立连接,我需要在 GUI 中显示它的 GPS 位置和它的传感器的实时馈送(目前 GUI 不是问题,我可以用 Kivy 或 Tkinter 来做)。
这就是它必须运行的方式:
- 在 GUI 中,有一个输入嵌入式系统 ID 的字段和一个尝试连接它的按钮。
- 点击按钮后,程序会建立连接并持续实时显示 GPS、温度和压力,直到连接断开。
我正在考虑用这个架构来做:
- 处理 GUI 的线程
- 每次单击按钮并找到嵌入式系统时,都会实例化我创建的 class 对象。
- class 具有以下属性:
- 列出 GPS(以存储 GPS 源)
- 列出温度(用于存储温度源)
- 列表压力
- a thread_socket(套接字是在线程中创建的,作为嵌入式系统的客户端。因此每次实例化 class 的对象时,都会创建一个单独的套接字)
- class 有如下方法:
- Get_Gps() :每次调用此方法时都会更新 GPS 列表属性
- Get_Temperature() / 压力()
- Stop() : 当调用此方法时,嵌入式系统需要关闭。
在套接字线程中,我有 send_message() 和 receive_message() 等方法通过 TCP/IP 发送获取 GPS 和传感器数据或停止系统的请求.
在每个嵌入式系统上,我都会使用 python 放置一个服务器,每次系统启动时都会设置该服务器。 这样系统的ID就是服务器的ip,而我的笔记本电脑就是客户端,当我select一个系统时搜索ip地址。
我的问题是:
- 你觉得这个架构好吗?
- 在列表中接收实时提要是否正确?例如 gps。
- 每次我找到一个系统时,我都会实例化一个对象来保持干净,这是一个好方法吗?
- 您看到任何问题或改进了吗?
提前谢谢你,
总的来说,我觉得你的方法没问题。
但是,您应该记住以下几点:
在设计软件时,您应该首先确定所涉及的不同任务,并为每个任务定义单独的功能单元。这就是separation of concerns.
的概念我还建议阅读 Model-View-Controller (MVC) pattern: In your case, the model would be your class containing the data structure for the measurements and the business logic (e.g. polling data from a source for example every second until the connection is stopped). The view and the controller might both be located in the GUI (which is absolutely fine).
GUI 不一定是显式线程,但许多框架更倾向于使用基于事件的概念,让您可以为给定的用户交互定义应用程序的行为。
为什么您实际上需要测量列表?是否需要在特定时间段内保留测量历史记录?这是一个会不断增长的列表还是一个滚动列表(例如,用于在 GUI 中显示最后 n seconds/minutes 个测量值)?为每个新连接启动一个新的 class 实例似乎有点矛盾,因为当您停止连接并终止实例时,您显然会丢失内容。
希望这能给您一些关于如何从那里开始的想法。