gpt4 book ai didi

python - Modbus-tk RTU Slave 保持寄存器读取有符号整数

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:31 31 4
gpt4 key购买 nike

我使用 modbus-tk 创建了一个 modbus slave,如下所示。我使用 Simply modbus 主站软件(http://www.simplymodbus.ca/RTUmaster.htm)作为主站。如何设置 slave 来表示一个有符号整数而不是一个无符号整数。例如,当我发送一个 16 位数据时,(FC19) HEX 应该表示 -999 decimal ,但现在我得到 64537。

尝试使用此处的示例 https://github.com/ljean/modbus-tk/blob/master/examples/tcpmaster_example.py .好像只对Master有效。

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 只能在执行主查询时使用。所以你应该删除它并添加一个新的 block ,如下所示

slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 100)

关于python - Modbus-tk RTU Slave 保持寄存器读取有符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48708648/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com