我用minimamodbus与微运动流量计通信,它使用rs485协议,我使用usb-rs485转换器。这里给出了micro motion modbus文档。在
当我用这个代码从2个寄存器读取浮点数时
import minimalmodbus
minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL=True
import serial
instrument = minimalmodbus.Instrument('/dev/ttyUSB0', 1)
instrument.serial.baudrate = 9600
instrument.serial.timeout = 1
instrument.serial.baudrate = 9600
instrument.serial.bytesize = 8
instrument.serial.parity = serial.PARITY_NONE
instrument.serial.stopbits = 1
instrument.serial.timeout = 0.05
instrument.mode = minimalmodbus.MODE_RTU
instrument.debug = True
try:
values = instrument.read_float(250, 3, 2)
print (values)
except IOError:
print("Failed")
我的回答是:
^{pr2}$应该是29.879或29.78687之类的。这是由于bytestring的顺序造成的。这里给出了一个解决方法。 https://minimalmodbus.readthedocs.io/en/master/advancedusage.html#workaround-for-floats-with-wrong-byte-order
就像上面写的那样
values = read_registers(3924, numberOfRegisters=2)
registerstring = chr(values[2]) + chr(values[3]) + chr(values[0]) + chr(values[1])
floatvalue = minimalmodbus._bytestringToFloat(registerstring)
或者类似的东西,我们可以把字节顺序调整到正常输出。但是我被困在这里
values = read_registers(3924, numberOfRegisters=2)
返回singed int,如果读取2个寄存器,它将在列表中给出2个值。在
[61552, 16865]
我该如何让bytestring正确设置顺序。现在我的问题是如何从slave保存有效载荷。我想将这个字节串保存到变量中的'\x01\x03\x04\x9f3A–x941',这样我就可以更改字节顺序了。把它传给 _bytestringToFloat() 所以我可以得到一个实际值。我是新手,请帮忙。在
使用
struct.pack
和struct.unpack
将整数转换为bytestring到float。在相关问题 更多 >
编程相关推荐