Modbus协议

Modbus协议主要建立在物理串口、以太网TCP/IP层之上,目前已经成为工业领域通信协议的业界标准。

Modbus Poll和Modbus Slave是两款非常流行的Modbus设备仿真软件,支持Modbus RTU/ASCII和Modbus TCP/IP协议 ,经常用于测试和调试Modbus设备,观察Modbus通信过程中的各种报文。

当用于支持Modbus RTU/ASCII协议时,ModbusPoll作为一个主站设备, ModbusSlave作为一个从站设备,从站设备接收主站设备的命令并返回数据。

而当用于支持Modbus TCP/IP时,ModbusSlave作为一个服务器, ModbusPoll作为一个客户端,服务器接收客户端的命令并返回数据。客户端需要填写指定连接的远程服务器IP地址和端口号。

Modbus的通讯端口号是固定的:502 

 

Python中提供了支持Modbus协议的第三方库——modbus_tk

当实现客户端功能时,需要配置如下参数:

slave:Modbus从站ID地址 。

function_code:寄存器的功能码

starting_address:寄存器起始地址,从0开始。

quantity_of_x:寄存器连续个数。

output_value:写命令时的数值。

Scan Rate:读取数据的周期,程序中体现为执行 execute()方法的周期。

 1 import  modbus_tk.modbus_tcp as mt
 2 import  modbus_tk.defines as md
 3 #创建TCPMASTER对象
 4 master = mt.TcpMaster('127.0.0.1',502)
 5 #设置超时时间
 6 master.set_timeout(5.5)
 7 
 8 #写入保持寄存地址1-10,值对应时
 9 values = (100,200,300,400,500,600,700,800,900,1000,1100)
10 master.execute(slave=1,function_code=md.WRITE_MULTIPLE_REGISTERS,starting_address=0,quantity_of_x=20,output_value=value)
11 
12 #写入单个寄存器
13 master.execute(slave=1,function_code=md.WRITE_SINGLE_REGISTER,starting_address=0,output_value=888)
14 # 读取线圈
15 data = master.execute(slave=1,function_code=md.READ_COILS,starting_address=0,quantity_of_x=20)
16 
17 #写入一个线圈
18 master.execute(slave=1,function_code=md.WRITE_SINGLE_COIL,starting_address=0,output_value= True)
19 #写入多个线圈
20 values = (True,False,True,False,True,False,True,False,True,False)
21 master.execute(slave=1,function_code=md.WRITE_MULTIPLE_COILS,starting_address=0,output_value= values)

#supported modbus 功能代码
READ_COILS = 1 读线圈
READ_DISCRETE_INPUTS = 2 读离散输入
READ_HOLDING_REGISTERS = 3  【读乘法寄存器】
READ_INPUT_REGISTERS = 4  读输入寄存器
WRITE_SINGLE_COIL = 5  写单一线圈
WRITE_SINGLE_REGISTER = 6  写单一寄存器
WRITE_MULTIPLE_COILS = 15 写多个线圈 【强制多点线圈】
WRITE_MULTIPLE_REGISTERS = 16  写多寄存器 【写乘法寄存器】

#supported block types 支持的块类型
COILS = 1   线圈
DISCRETE_INPUTS = 2  离散输入(数字量输入)
HOLDING_REGISTERS = 3  乘法寄存器
ANALOG_INPUTS = 4 模拟量输入

#modbus 异常代码
ILLEGAL_FUNCTION = 1  功能代码不合法
ILLEGAL_DATA_ADDRESS = 2  数据地址不合法
ILLEGAL_DATA_VALUE = 3  数据值不合法
SLAVE_DEVICE_FAILURE = 4 slave设备失败
COMMAND_ACKNOWLEDGE = 5  命令已收到
SLAVE_DEVICE_BUSY = 6    slave设备忙
MEMORY_PARITY_ERROR = 8 内存奇偶误差

 

 

 

 

无需时刻保持敏感,迟钝有时即为美德。尤其与人交往时,即便看透了对方的某种行为或者想法的动机,也需装出一副迟钝的样子。

posted @ 2022-08-02 14:22  心如__止水  阅读(773)  评论(0编辑  收藏  举报