Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python用于sockets传感器gui系统_Python_Sockets_Architecture_Gps_Sensors - Fatal编程技术网

Python用于sockets传感器gui系统

Python用于sockets传感器gui系统,python,sockets,architecture,gps,sensors,Python,Sockets,Architecture,Gps,Sensors,我对socket编程和软件架构不熟悉 我的系统必须是:在我的笔记本电脑中使用python的GUI。有许多嵌入式系统具有相同的传感器(GPS、温度、压力…)。每次选择嵌入式系统时,我的程序都需要与之建立连接,我需要在GUI中显示其GPS位置和传感器的实时反馈(现在GUI不是问题,我可以使用Kivy或Tkinter) 这就是它的工作原理: 在GUI中,有一个字段用于输入嵌入式系统的ID,还有一个按钮用于尝试与之连接 单击按钮时,程序将建立连接,并连续实时显示GPS、温度和压力,直到连接断开 我正

我对socket编程和软件架构不熟悉

我的系统必须是:在我的笔记本电脑中使用python的GUI。有许多嵌入式系统具有相同的传感器(GPS、温度、压力…)。每次选择嵌入式系统时,我的程序都需要与之建立连接,我需要在GUI中显示其GPS位置和传感器的实时反馈(现在GUI不是问题,我可以使用Kivy或Tkinter)

这就是它的工作原理:

  • 在GUI中,有一个字段用于输入嵌入式系统的ID,还有一个按钮用于尝试与之连接
  • 单击按钮时,程序将建立连接,并连续实时显示GPS、温度和压力,直到连接断开
我正在考虑使用这种架构:

  • 处理GUI的线程
  • 每次单击按钮并找到嵌入式系统时,我创建的类的一个对象都会被实例化
  • 该类具有以下属性:
    • 列出GPS(用于存储GPS源)
    • 列表温度(用于存储温度进给)
    • 列表压力
    • thread_套接字(在线程中创建套接字作为嵌入式系统的客户端。因此,每次实例化类的对象时,都会创建一个单独的套接字)
  • 该类具有以下方法:
    • Get_Gps():每次调用此方法时,Gps列表属性都会更新
    • 获取温度()/压力()
    • Stop():调用此方法时,嵌入式系统需要关闭
在socket线程中,我使用诸如send_message()和receive_message()等方法通过TCP/IP发送获取GPS和传感器数据或停止系统的请求

在每个嵌入式系统上,我将放置一个使用python的服务器,每次系统启动时都会设置该服务器。 这样,系统的ID就是服务器的ip,我的笔记本电脑就是一个客户端,在我选择一个系统时搜索ip地址

我的问题是:

  • 您觉得这种架构合适吗
  • 在列表中接收实时提要是否正确?例如gps
  • 每次我找到一个系统,我都实例化一个对象来保持干净,这是一个好方法吗
  • 您是否看到任何问题或改进

提前谢谢你,

我认为你的方法大体上是好的

但是,您应该记住以下几点:

在设计软件时,应首先确定所涉及的不同任务,并为每个任务定义单独的功能单元。这就是我们的概念

我还建议阅读一些关于模式的内容:在您的情况下,模型将是您的类,包含度量和业务逻辑的数据结构(例如,在连接停止之前,每秒轮询一次源数据)。视图和控制器可能都位于GUI()中

GUI不一定是一个显式线程,但许多框架使用基于事件的概念,允许您为给定的用户交互定义应用程序的行为

为什么您实际上需要测量列表?是否有要求在一定时间内保存测量的历史记录?这是一个不断增长的列表,还是一个滚动列表(例如,在GUI中显示最后n秒/分钟的测量)?使用每个新连接启动一个新的类实例似乎有点矛盾,因为当您停止连接并终止实例时,显然会丢失内容

希望这能给你一些关于如何从那里开始的想法