使用 pySerial 控制发酵罐

Posted

技术标签:

【中文标题】使用 pySerial 控制发酵罐【英文标题】:control a fermentor using pySerial 【发布时间】:2015-07-21 20:24:54 【问题描述】:

我有一个发酵罐 (NBS BioFlo 3000) 通过 RS232 电缆连接到 PC (Windows XP)。我下载了一个免费软件 (http://www.foxylogic.com) 来监控发酵罐。

它有效,所以我知道硬件、电缆等都很好。

免费软件不是开源的,而且很老了。我想使用 pySerial 来监控发酵罐。我知道端口是COM1,8位数据,偶校验,波特率=9600。我看到的一篇论文(http://dx.doi.org/10.1371/journal.pone.0092108,补充 S1,第 2 页)说我应该使用“AFS 通信协议”并且请求信息的字符串如下所示: (MD#)RA(CR) 其中 (MD#) 是反应器的编号(在我的情况下为 0),而 (CR) 是回车。 因此,基于此,我在 iPython 终端中做到了:

import serial
ser = serial.Serial(0)
ser.parity = serial.PARITY_EVEN
ser.timeout = 1
print ser

我得到:Serial<id=0x1976cb0, open=True>(port='COM1', baudrate=9600, bytesize=8, parity='E', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)

ser.write('0RA\r')
print ser.read(9999)

...,我什么也没得到——只是一个空字符串。我尝试更改超时时间(最多 15 秒,我知道它不会花费更长的时间),我也尝试了 readline() 和 read(1),但我没有更改任何其他参数。我还尝试更改字符串:

b'0RA\r'
'0RA\r'.encode()
'00RA\r'
'0RA\r\n'
'0RA\n'
'MD0RA\r'
'(0)RA\r'
'0ra\r'

还有很多其他的,我都不记得了。没有任何效果,我总是得到一个空字符串。没有错误。串行设备完全静音。

我唯一得到的不是空字符串是,当我 ser.read(1) 在一个循环中,没有写,我物理上关闭或打开发酵罐。我得到一个空间。

我对此进行了广泛的搜索,但似乎我正在处理一个非常独特的问题,所以我不希望在这里找到一个简单的答案。我无法测试字符串和所有设置的所有组合,所以我的问题是:

我从哪里开始排除故障?

(我的python是2.7)

谢谢!

【问题讨论】:

【参考方案1】:

开始故障排除,方法是检查是否有任何实际通信。在 Windows 中,具有此功能的实用程序包括 PortMon from the Sysinternals suite 和 SerialMon。

【讨论】:

以上是关于使用 pySerial 控制发酵罐的主要内容,如果未能解决你的问题,请参考以下文章

通过 pySerial 通过 Python 控制 Arduino

为啥pyserial填充USB数据包?

使用 PySerial 和 Arduino Uno 的时序问题

使用 Arduino 和 PySerial 回显一系列字节

使用pyserial测试usb到串口到usb没有输出

如何让 PySerial 接受 921600 波特率