我试图建立一个温度控制模块,可以通过网络控制或手动控制。我的程序的各个部分都可以工作,但是我很难弄清楚如何让它们一起工作。另外,我的温度控制模块是python,客户机是C#
至于物理元件去我有一个键盘,设置一个温度,打开和关闭加热器和一个液晶显示屏,显示温度数据,当然还有一个温度传感器
对于我的网络内容,我需要: 不断向客户发送温度数据。 向客户端发送日志文件列表。 等待客户端的提示以设置所需的温度或向客户端发送日志文件
到目前为止,所有的硬件工作正常,网络功能的每个单独部分都可以工作,但不能一起工作。我没有尝试同时使用物理和网络组件
我一直试图使用线程,但不知道我是否应该使用其他东西
编辑: 以下是我想做的事情背后的基本逻辑:
硬件:
键盘接受一个数字输入,直到“*”它然后设置一个临时变量
将温度变量与传感器数据进行比较,并相应地打开或关闭加热器
'#'转动加热器并将温度变量设置为0
温度变量不为0时,传感器数据写入日志文件
网络:
在客户端连接时,会向客户端发送日志文件列表
温度传感器数据连续发送到客户端
提示处理程序侦听提示
如果客户机请求日志文件,则温度数据将停止,并发送文件,然后恢复温度数据
客户端可以向提示处理程序发送一个命令,以设置触发加热器的temp变量
客户端可以向提示处理程序发送一个命令来停止加热器并将temp变量设置为0
来自键盘或客户端的命令应始终有效
当您想利用多个处理核心的计算能力时,多处理通常是适用的。多处理限制了如何处理程序组件之间共享状态的选项,因为内存在创建进程时最初是复制的,而不是自动共享或更新的。线程从相同的内存区域执行,并且没有这个限制,但是不能利用多个核来提高计算性能。您的应用程序听起来并不需要大量的计算,而只是从并发中获益,以便能够同时处理用户输入、联网和少量处理。我想说你需要的是线程而不是进程。我对asyncio没有足够的经验,无法将其与线程进行很好的比较
编辑:这看起来像是一个相当复杂的项目,所以不要指望它会在你第一次点击“运行”时就完美地进行,但肯定是非常可行和有趣的
下面是我将如何组织这个项目
我在这里看到了四个独立的线程(可能是用于愚蠢的小任务的小辅助dameon线程)
我会有一个线程作为您的温度控制器(PID控制/任何)有加热器输出的唯一控制(其他线程请求更改设定点/控制模式(占空比/PID))
我将有一个主线程(带有几个dameon线程)来处理数据记录:main thead侦听记录命令(pause、resume、get等)dameon线程来轮询温度计、旋转日志文件等
我不太熟悉网络,这将是特定于您的客户机应用程序的,但我可能会从
http.server
开始只是为了原型,或者像websockets
和一点asyncio
之类的东西。主要的是它将与数据记录器和温度控制器线程通过getter和setter进行交互,而不是直接修改值最后,对于键盘输入,我可能只需要编写一个快速的
tkinter
应用程序来抓取按键,因为这就是我所知道的。同样,使用tkinter应用程序生成请求,但不要直接修改值;在线程之间“交谈”时使用getter和setter。它只是让事情更有条理和条块分割相关问题 更多 >
编程相关推荐