用pySerial控制发酵罐

时间:2015-07-21 20:24:54

标签: python python-2.7 pyserial

我有一台发酵罐(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 个答案:

答案 0 :(得分:1)

启动故障排除,检查是否有任何实际通信。在Windows中,能够实现此功能的实用程序包括PortMon from the Sysinternals suiteSerialMon