使用Python实现modbus RTU以及TCP

1,首先安装pymodbus
2,如果是Ubuntu环境的话,可以使用python脚本来实现虚拟串口
-  https://www.jianshu.com/p/7c1ba1a3a833
3.RTU代码.
import serial
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu,modbus_tcp
import time

# 设定串口为从站
server = modbus_rtu.RtuServer(
serial.Serial(port="/dev/pts/27", baudrate=9600, bytesize=8, parity='N', stopbits=1))  #这里的port是用python虚拟出来的
server.start()
SLAVE1 = server.add_slave(1)
SLAVE1.add_block('B', cst.READ_COILS, 0, 1)  # 地址0,长度4
for i in range(300):
    SLAVE1.set_values('B', 0, 65536)  # 改变在地址0处的寄存器的值
    time.sleep(1)
    SLAVE1.set_values('B', 0, 0)
    time.sleep(1)

# 数据接收端
# 设定串口为从站
master = modbus_rtu.RtuMaster(serial.Serial(port="/dev/pts/28",baudrate=9600, bytesize=8, parity='N', stopbits=1))
master.set_timeout(1.0)
# 读保持寄存器
read = master.execute(1, cst.READ_COILS, 0, 1)  # 这里可以修改需要读取的功能码
print(read[0])
# 如何写寄存器
master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 5, 0, [10])
TCP
SERVER = modbus_tcp.TcpServer(address="0.0.0.0", port=502) # 这里address如果填写127.0.0.1,就只能通过本地127.0.0.1连接,而不能通过局域网IP地址链接,可以用这个命令查看是否侦听端口:netstat -napt

# 服务启动
SERVER.start()
# 建立第一个从机
SLAVE1 = SERVER.add_slave(1)
SLAVE1.add_block('A', cst.READ_COILS, 0, 4)

for i in range(300):
    SLAVE1.set_values('A', 0, 65536)  # 改变在地址0处的寄存器的值
    time.sleep(1)
    SLAVE1.set_values('A', 0, 0)
    time.sleep(1)

master = modbus_tcp.TcpMaster(host="192.168.10.194",port=502)  #这里的ip地址填写服务端的地址
master.set_timeout(5.0)
Hold_value = master.execute(slave=1, function_code=cst.READ_COILS, starting_address=0, quantity_of_x=1)
print(Hold_value)
开机自启方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容