我正在尝试使用 Python (PyCharm) 读取 modbus 设备上的寄存器。我已确认 COM 端口、波特率和其他通信设置,我可以使用设备应用程序读取值(它是水位记录器)。我没有得到仪器的响应。
使用 mbpoll 可以读取寄存器 -
mbpoll -B -m RTU -t 4:float -a 1 -b 19200 -r 46 -c 2 /dev/ttyUSB0
我的代码如下 -
import minimalmodbus
import serial
instrument = minimalmodbus.Instrument('COM5', 1) # port name, slave address (in decimal)
instrument.serial.port = 'COM5' # this is the serial port name
instrument.serial.baudrate = 19200 # Baud
instrument.serial.bytesize = 8
instrument.serial.parity = serial.PARITY_EVEN
instrument.serial.stopbits = 1
instrument.serial.timeout = 3 # seconds
instrument.address = 1 # this is the slave address number
instrument.mode = minimalmodbus.MODE_RTU # rtu or ascii mode
instrument.clear_buffers_before_each_transaction = True
temperature = instrument.read_float(registeraddress=40046, functioncode=3, number_of_registers=2, byteorder=0) # Registernumber, number of decimals
print(temperature)
import minimalmodbus
import serial
instrument = minimalmodbus.Instrument('COM5', 1) # port name, slave address (in decimal)
instrument.serial.port = 'COM5' # this is the serial port name
instrument.serial.baudrate = 19200 # Baud
instrument.serial.bytesize = 8
instrument.serial.parity = serial.PARITY_EVEN
instrument.serial.stopbits = 1
instrument.serial.timeout = 0.1 # seconds
instrument.address = 1 # this is the slave address number
instrument.mode = minimalmodbus.MODE_RTU # rtu or ascii mode
#nstrument.clear_buffers_before_each_transaction = True
temperature = instrument.read_float(registeraddress=45, functioncode=4, number_of_registers=2, byteorder=0) # Registernumber, number of decimals
try:
print(temperature)
except:
print(temperature)
编辑以包括尝试 - 除了
任何帮助表示赞赏!
编辑:链接到设备手册 - https: //in-situ.com/en/pub/media/support/documents/Modbus_Manual.pdf 设备是通过制造商电缆连接到 PC 的 Level Troll 400
编辑 2:我试图合并最小的 modbus 结构,但无济于事。
编辑 3:我可以使用 Modbus Poll 读取寄存器。寄存器是 40046,所以我理解这是保持寄存器中的寄存器 45?我如何将它翻译成最小的modbus?
编辑 4:我没有嫁给最小的 modbus - 我很高兴使用任何工具来完成这项工作
编辑 5:我也尝试depth = instrument.read_long(x, x)
过不同的值