我目前正在开发一个带有嵌入式Linux和and服务器的网关。该网关的目标是通过RS485/Modbus线路从电气设备中检索数据,并在服务器上显示这些数据。
我使用的是Nginx和Django,web前端是由“静态”文件提供的。Javascript脚本文件反复进行AJAX调用,将CGI请求发送到Nginx。多亏了Django,这些CGI请求得到了JSON响应的响应。响应主要是在适当的Modbus设备上读取的数据。
确切的路径如下:随机定时CGI调用-> urls.py -> ModbusCGI.py (导入其他脚本ModbusComm.py)-> ModbusComm.py创建一个Modbus客户端,并立即尝试使用它进行读取。
接下来,我想实现一个Datalogger,定期在数据库中存储数据。我编写了一个脚本,也导入了ModbusComm.py脚本,但它不起作用:有时会同时发送多个Modbus帧(数据记录器和cgi脚本同时调用ModbusComm.py“文件”中的同一函数),这会导致错误。
我敢肯定,如果服务器上有很多用户(同时发送CGI请求),也会出现这个问题。还是不想?(已经为CGI请求管理队列系统了吗?我有点迷路了)
因此,我的目标是创建一个队列系统,它可以处理来自多个python脚本的调用,让它们在轮不到=>时等待,在轮到他们时使用正确的参数调用函数(实际上是使用modbus行),并将响应发送回python脚本,这样它就可以生成JSON响应。
我真的不知道如何做到这一点,我相信有更好的方法来做到这一点。
如果我说得不够清楚,请不要犹豫,让我知道:)
发布于 2018-05-01 01:46:09
当我不得不允许多个进程通过串行端口读取一些Modbus (而不仅仅是Modbus)数据时,我也遇到了同样的问题。我最终得到了一个独立的进程(“串口服务器”),它专门使用一个串口。所有其他进程通过一些感兴趣的进程通信机制(我们使用Unix套接字)通过该独立进程使用该端口。
这样,当应用程序想要读取Modbus寄存器时,它连接到“串行端口服务器”,发送其请求并接收响应。所有实际的串口通信都是由“串口服务器”以顺序的方式完成的,以确保一致性。
https://stackoverflow.com/questions/50010615
复制相似问题