我正在处理一个工业环境,我必须在现场记录来自串行设备的读数。我当前的设置涉及连接到 Moxa 5150A 或 5130 串行设备服务器的设备,该服务器通过有线或无线方式连接到我的网络,具体取决于各个设备的位置。目前,我依赖硬件供应商提供的软件来管理数据收集。当前的软件是基于windows X86的,并且由于以前的硬件故障而在我们购买的新硬件上造成了无穷无尽的麻烦。我专门选择 Moxa 串行服务器是因为它们的 linux 驱动程序和兼容性。该设备通过 RS-422(4 线半双工)7 位 1-stop 奇校验和 NO 流控制进行通信,除非请求,否则不会发送任何信息。
我正在开发自己的解决方案,将信息存储在数据库(可能是 MySQL)中。就终端通信而言,这是两部分。我必须发送请求并接收响应。
迄今为止,我已将串行服务器的 Moxa 驱动程序安装到我的 linux 服务器上。我编写了一个从 /dev/ttyrXX 设备读取的 bash 脚本,解释输入并将信息加载到 mysql 数据库中。
while read line
do
something something....
done < /dev/ttyrXX
我仍在解决一些小的脚本错误,例如在设备脱机时正确重启,然后又重新联机以及其他此类问题,但我的脚本正在读取和记录我的数据,这完全符合我的需要。
该解决方案依赖于两个因素。
1) Moxa 设备支持 FIFO 并允许同时进行多个连接
2) 供应商提供的在单独的 Windows 机器上运行的软件当前正在提交信息请求。
我需要一起删除基于 Windows 的软件。我已经编写并测试了一个脚本,该脚本打印到 /dev/ttyrXX 发出我想要的请求并收到适当的响应,并按照我的第一个脚本的需要记录它们。
some list of things
for x in list
do
printf "request" > /dev/ttyrXX
done
我在使用供应商提供的软件时遇到的主要问题之一是它对接收对每个请求的及时响应的硬编码依赖性。这会产生许多问题,包括完全冻结窗口和设备在不合时宜的时间停止服务时崩溃。
我的两个脚本协同工作以明显更好的间隔收集数据,并且人工干预更少。
这是我的问题。我可以在 Python 中使用什么方法来获得与我的 Bash 脚本相当的结果?
我一直无法找到不需要我打开/关闭文件的与 printf 或 cat 等效的 Python。此外,我查看过的每个终端界面都有内置的或必需的等待响应或在放弃之前阅读这么长时间。我确定那里存在某些东西,我几乎没有运气找到它。我承认我是 Python 的新手,并且只写了几行代码来探索它的能力。
让我说得很清楚。我想写信给我的终端,而不用担心我在写的时候(使用我不在乎的线程或单独的脚本)。我想从我的终端上阅读,而不用担心我的下一段文字何时到来。(我并不是在暗示一个永无止境的循环,但我确实需要它来简单地等待输入)。我希望/需要我的写入和读取完全独立于彼此,而不关心对方昨天、现在或下周在做什么。
先感谢您。
如果有必要,我将能够提供更详细的代码,但是我觉得我在搜索中更需要指导而不是修复错误。虽然我仍然完全愿意接受建议和“永远不要这样做......因为这个......”类型输入