gpt4 book ai didi

python - 我可以用Python读取从机接收到的Modbus RS485数据吗?

转载 作者:行者123 更新时间:2023-12-01 02:21:20 33 4
gpt4 key购买 nike

我正在一台从机上工作,希望将主机通过 Modbus RS485 传输的数据保存到文本文件中。主机不断向我正在工作的从机发送读写请求,下图是串口监视器捕获的图片。

enter image description here

我刚刚发现用minimalmodbus你可以读取寄存器。但它似乎只有当你是主设备时才有效。我可以在从属计算机上执行类似的操作吗? http://minimalmodbus.readthedocs.io/en/master/usage.html

#!/usr/bin/env python
import minimalmodbus

instrument = minimalmodbus.Instrument('/dev/ttyUSB1', 1) # port name, slave
#address (in decimal)

## Read temperature (PV = ProcessValue) ##
temperature = instrument.read_register(289, 1) # Registernumber, number of
#decimals
print temperature

## Change temperature setpoint (SP) ##
NEW_TEMPERATURE = 95
instrument.write_register(24, NEW_TEMPERATURE, 1) # Registernumber, value,
#number of decimals for storage

最佳答案

modbus-tk使编写您自己的 modbus 从站成为可能。

这是一个运行 RTU 服务器的示例,该服务器具有从地址 0 开始的 100 个保持寄存器:

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)
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()

希望对你有帮助

关于python - 我可以用Python读取从机接收到的Modbus RS485数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47926257/

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