modbus 基础
1.什么是modbus?
顾名思义,它是一个Bus,即总线协议。比如串口协议、IIC协议、SPI都是通信协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。
Modbus通讯物理接口可以选用串口(包括RS232、RS485和RS422),也可以选择以太网口。其通信遵循以下的过程:
- 主设备向从设备发送请求
- 从设备分析并处理主设备的请求,然后向主设备发送结果
- 如果出现任何差错,从设备将返回一个异常功能码
归纳:就是免费+简单+方便修改!Modbus就是一种用在工业上的简单协议!
2.modbus 包括些什么?
大致细分为以下三种情况:
- Modbus-RTU
- Modbus-ASCII
- Modbus-TCP
一个设备只会有一个协议,只需要看对应的部分即可。
2.1.modbus 的通讯方式
- 以太网:对应的通信模式是Modbus TCP/IP
- 异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等):对应的通信模式是Modbus RTU或Modbus ASCII
- 高速令牌传递网络:对应的通信模式是Modbus PLUS
Modbus RTU和Modbus ASCII协议应用于串口链接(RS232、RS485、RS422),Modbus tcp/ip协议应用于以太网链接。
3.通讯过程
Modbus是主从方式通信,也就是说,不能同步进行通信,总线上每次只有一个数据进行传输,即每次通讯都是主站先发送指令,可以是广播,或是向特定从站的单播;从站响应指令,并按要求应答,或者报告异常。当主站不发送请求时,从站不会自己发出数据,从站和从站之间不能直接通讯。
Modbus协议是应用层(协议层)报文传输协议,它定义了一个与物理层无关的协议数据单元(PDU),即PDU=功能码+数据域,功能码1byte,数据域不确定。
Modbus协议能够应用在不同类型的总线或网络。对应不同的总线或网络,Modbus协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU,例如modbus tcp/ip------ ADU=MBAP+ADU。
4.modbus-RTU 协议
设备必须要有RTU协议!这是Modbus协议上规定的,且默认模式必须是RTU,ASCII作为选项。(也就是说,一般的设备只有RTU这个协议,ASCII一般很少)所以说,一般学习Modbus协议,只需要了解RTU的协议,ASCII作为学习的了解就足够了。
4.1.帧结构
帧结构 = 地址 + 功能码+ 数据 + 校验
- 地址: 占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复)。
- 功能码:占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改数据,所以不同功能码对应不同功能。
- 数据:根据功能码不同,有不同结构,在下面的实例中有说明。
- 校验:为了保证数据不错误,增加这个,然后再把前面的数据进行计算看数据是否一致,如果一致,就说明这帧数据是正确的,我再回复;如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了。
Modbus-RTU协议只需要看懂功能码0x03、0x06、0x10这三个基本的就已经足够了,分别回想下其数据域部分:
0x03—主机需要发送起始地址+寄存器数量,从机回复总字节数+数据;
0x06—主机发送起始地址+数据内容(因为你只需要修改一个,所以起始地址就是所要修改的地址),从机返回起始地址+数据内容(发现居然一样!)
0x10—主机发送起始地址+寄存器个数+总字节数+数据,从机返回起始地址+寄存器数量
5.Modbus-ACSII协议
做个基础了解
5.1.帧结构
6.以太网(modbus tcp/ip)
对于Modbus TCP而言,主站通常称为Client,从站称为Server;而对于Modbus RTU和Modbus ASCII来说,主站是Master,从站是Slave。
ModbusTCP的数据帧可分为两部分:ADU=MBAP+PDU = MBAP + 功能码 + 数据域,MBAP 7byte,功能码1byte,数据域不确定,由具体功能决定。
3.1.modbus tcp/ip 协议
Modbus设备可分为主站(poll)和从站(slave)。主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。
- 主站请求:功能码+数据
- 从站正常响应:请求功能码+响应数据
- 从站异常响应:异常功能码+异常码,其中异常功能码即将请求功能码的最高有效位置1,异常码指示差错类型
- 注意:需要超时管理机制,避免无期限的等待可能不出现的应答
3.2.通信过程
IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予TCP端口号为502,这是目前在仪表与自动化行业中唯一分配到的端口号。
A、connect 建立TCP连接
B、准备Modbus报文
C、使用send命令发送报文
D、在同一连接下等待应答
E、使用recv命令读取报文,完成一次数据交换
F、通信任务结束时,关闭TCP连接
使用
查看:https://github.com/MangoAutomation/modbus4j
参考文档:
https://blog.csdn.net/tiandiren111/article/details/118347661
https://www.cnblogs.com/The-explosion/p/11512677.html