我使用modbus-tk创建了一个modbus从站,如下所示。我使用Simply modbus主站软件(http://www.simplymodbus.ca/RTUmaster.htm)作为主站。如何设置从站代表有符号整数而不是无符号整数。例如,当我发送16位数据时,(FC19)十六进制应表示-999十进制,但现在我得到64537。
在此处https://github.com/ljean/modbus-tk/blob/master/examples/tcpmaster_example.py尝试使用示例。它似乎只适用于师父。
import sys
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
import serial
PORT = 0
#PORT = '/dev/ptyp5'
def main():
"""main"""
logger = modbus_tk.utils.create_logger(name="console", record_format="%
(message)s")
#Create the server
server = modbus_rtu.RtuServer(serial.Serial(PORT))
try:
logger.info("running...")
logger.info("enter 'quit' for closing the server")
server.start()
slave_1 = server.add_slave(1)
slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 100,data_format=">b")
while True:
cmd = sys.stdin.readline()
args = cmd.split(' ')
if cmd.find('quit') == 0:
sys.stdout.write('bye-bye\r\n')
break
finally:
server.stop()
if __name__ == "__main__":
main()
我得到:
Traceback (most recent call last):
File "C:/Users/Yang/Documents/RBES
work/Projects&study/Sensors/serial_code/modbus-tk-test.py", line 50, in main
slave_1.add_block('block1', cst.HOLDING_REGISTERS, 100,
127,data_format='>b')
TypeError: add_block() got an unexpected keyword argument 'data_format'
最佳答案
将新的从服务器添加到服务器时,可以配置从服务器返回带符号的,而不是无符号的
slave_1 = server.add_slave(1, unsigned=False)
add_block
不允许使用data_format
参数。 data_format
仅在执行主查询时才能使用。所以您应该删除它并添加一个新的块,如下所示slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 100)
关于python - Modbus-tk RTU从站保持寄存器读取带符号整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48708648/