1,首先安装pymodbus
2,如果是Ubuntu环境的话,可以使用python脚本来实现虚拟串口
- //www.greatytc.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)
开机自启方法