之前利用Python进行Modbus_TCP进行数据接收,本次需要利用串口进行数据传输,学习Modbus_RTU的简单实现
首先要在创建两个虚拟串口,利用VSPD工具即可。在一台电脑上实现数据的发送和接收
进入Python IDE进行slave端的编写
import serial
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
import time
def ModbusRTU_Slave():
try:
# 设定串口为从站
# 外置参数包括端口 port = "COM3" 波特率:9600
server= modbus_rtu.RtuServer(serial.Serial(port="com3",baudrate=9600, bytesize=8, parity='N', stopbits=1))
server.start()
print("runing...")
SLAVE1 = server.add_slave(1)
SLAVE1.add_block('A', cst.HOLDING_REGISTERS, 0, 4) # 地址0,长度4
increase_num = 17000
for i in range(300):
SLAVE1.set_values('A', 0, [17000, i + 1, i + 2]) # 改变在地址0处的寄存器的值
time.sleep(0.1)
for i in range(1500):
increase_num = increase_num - 1
SLAVE1.set_values('A', 0, [increase_num, i + 1, i + 2]) # 改变在地址0处的寄存器的值
time.sleep(0.1)
for i in range(800):
SLAVE1.set_values('A', 0, [10000, i + 1, i + 2]) # 改变在地址0处的寄存器的值
time.sleep(0.1)
for i in range(800):
SLAVE1.set_values('A', 0, [17000, i + 1, i + 2]) # 改变在地址0处的寄存器的值
time.sleep(0.1)
except Exception as exc:
print(str(exc))
再进行master端的编写
# 数据接收端
def ModbusRTU_Master():
try:
# 设定串口为从站
# 外置参数包括端口 port = "COM3" 波特率:9600
master = modbus_rtu.RtuMaster(serial.Serial(port="com4",baudrate=9600, bytesize=8, parity='N', stopbits=1))
mas