使用minimalmodbus在rs-232上初始化设备

时间:2017-07-19 20:18:02

标签: python python-2.7 hardware hardware-programming minimalmodbus

我正在寻找使用python(2.7)库" minimalmodbus"的一些建议。 (版本0.7)与Test Equity Modela 115a-F4T热室通信。

我是使用python编程硬件的新手,所以我不太确定我的方法是否缺少一些基本的初始化命令。 这是我的代码:

instrument = minimalmodbus.Instrument('/dev/ttyUSB1',1)
print instrument 
print minimalmodbus.BAUDRATE
minimalmodbus.BAUDRATE = 9600
print minimalmodbus.BAUDRATE
print minimalmodbus.__version__
instrument.read_register(0,1)

这是我的输出:

minimalmodbus.Instrument<id=0x7fb5fd2136c8, address=1, mode=rtu, 
close_port_after_each_call=False, precalculate_read_size=True, 
debug=False, serial=Serial<id=0x7fb5fc71a890, open=True>
(port='/dev/ttyUSB1', baudrate=19200, bytesize=8, parity='N', 
stopbits=1, timeout=0.05, xonxoff=False, rtscts=False, dsrdtr=False)>
19200
9600
0.7

Traceback (most recent call last):
File "/usr/local/google/home/mimartin/Documents/test-equity/model-
115a.py", line 13, in <module>
instrument.read_register(0,1)
File "/usr/local/lib/python2.7/dist-packages/minimalmodbus.py", line 
258, in read_register
return self._genericCommand(functioncode, registeraddress, 
numberOfDecimals=numberOfDecimals, signed=signed)
File "/usr/local/lib/python2.7/dist-packages/minimalmodbus.py", line 
697, in _genericCommand
payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
File "/usr/local/lib/python2.7/dist-packages/minimalmodbus.py", line 
795, in _performCommand
response = self._communicate(request, number_of_bytes_to_read)
File "/usr/local/lib/python2.7/dist-packages/minimalmodbus.py", line 
930, in _communicate
raise IOError('No communication with the instrument (no answer)')
IOError: No communication with the instrument (no answer)*

热室已通电。我通过串口转USB线连接到它。我还在电缆的串行端(在腔室上)放置了一个零调制解调器适配器,如“腔室手册”中所示。我假设我的第一行代码是初始化控制室。但是,我的错误消息表明不是。

在这里寻求帮助或指导。谢谢。

1 个答案:

答案 0 :(得分:0)

我正在解决一个非常相似的问题,在我看来,minimalmodbus 是为 RS-485 创建的,它不使用 DTR 和 DSR 状态引脚(来自您的调试行 dsrdtr=False)。我的硬件连接使用免费实用程序“Simplymodbus”进行工作,因此我知道它已正确连接。我正在使用的 minimummodbus python 代码与您的非常相似,当在示波器上查看时,它看起来与从设备的接收引脚上的 simplemodbus 请求相同。然而,DTR 和 DSR 引脚的行为有所不同,simplemodbus 收到响应,而 python minimummodbus 代码没有。

我还没有找到任何方法可以在 minimummodbus 代码中启用 dsrdtr 或使用 RS-232 到 USB 转换器的实用程序,但是 pyserial 的库中似乎有选项。我将探索的一种选择是切换到不使用这些状态引脚的 RS-485 连接。