1

我正在寻找有关使用 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 电缆连接到它。我还在电缆的串行端(在腔体上)放置了一个零调制解调器适配器,正如腔体手册中所指出的那样。我假设我的第一行代码是初始化控制室的代码。但是,我的错误消息表明并非如此。

在这里寻找一些帮助或指导。谢谢你。

4

2 回答 2

0

Minimalmodbus 在 RS-232 上运行良好。Watlow F4 和 F4T 仅使用 TX、RX 和 GND 与 RS-232 进行通信。TestEquity 腔室对两个控制器都使用 RS-232 引脚(都可以支持 232 或 485)。

F4 仅使用 16 位整数。map 1 模式中的 F4T 使用浮点、32 位和 16 位整数以及“字符串”类型。所以你需要不同的函数来读取这些值。Map 2 或 3 模式是通用 F4 寄存器的 F4 向后兼容。

通过以下链接联系 TestEquity,他们将为您提供 Python 示例。 www.testequity.com/chambers-technical-support

在 F4T 上,请参阅菜单 -> 设置 -> 网络 -> Modbus 中的 modbus-rtu 设置

假设 9600,无,数据图 1

instrument = open_port('/dev/ttyUSB1', 1) # comport, modbus 地址

仪器.序列号.波特率 = 9600

仪器.serial.timeout = 0.1

value = instrument.read_register(14092,0) # map 1 模式下的 modbus-rtu 字序

打印值

值应等于 1330(高低)或 1331(低高)

于 2021-10-01T00:22:05.063 回答
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 连接。

于 2021-06-18T17:13:32.533 回答