一. 概述
Modbus是MODICON公司与1979年开发的一种通讯协议,是一种工业现场总线协议标准。1996年施耐德公司推出了基于以太网TCP/IP的Modbus协议------ModbusTCP。
Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型,协议本身并没有定义物理层,只是定义了控制器能够认识和使用的消息结构,而不管他们是经过何种网络进行通信的。
标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网口。采用Master/Slave(主/从)方式通信。
Modbus在2004年成为我国国家标准。
二. 协议规范
(1) Modbus应用协议
Modbus是一种简单客户机/服务器应用协议
客户机能够向服务器发送请求;
服务器分析请求,处理请求,向客户机发送应答。
(2)通用Modbus帧结构–协议数据单元(PDU)
Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU),特定总线或网络上的Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域。
(3)Modbus事务处理(无差错和异常响应)
当服务器对客户机响应时,它使用功能码来指示正常(无差错)响应或者出现某种差错(称为异常响应)。
对于一个正常响应来说,服务器仅复制原始功能码。
对于异常响应,服务器将原始功能码的最高有效位置1后返回,异常码指示差错类型。
(4)串行链路上的Modbus地址规则
Modbus寻址空间有256个不同地址
地址0为广播地址
Modbus主节点没有地址,子节点必须有唯一的地址
0 | 1-247 | 248-255 |
---|---|---|
广播地址 | 子节点单独地址 | 保留 |
(5)串行链路上的Modbus帧结构
Modbus串行链路协议是一个主/从协议;
网络上的每个从站必须有唯一的地址;
从站地址用于寻址从站设备,由主站发起;
地址0用于广播模式,从站不需要响应;
RS485和RS232定义了标准的物理端口。
(6)两种Modbus串行传输模式
三. ModbusTCP简介
ModbusTCP是运行在TCP/IP上的Modbus报文传输协议。通过此协议,控制器相互间通过网络(例如以太网)和其它设备之间通信。
ModbusTCP是开放的协议,IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予TCP编口号为502,这是目前在仪表与自动化行业中唯一分配到的端口号
(1)ModbusTCP数据帧
(2)MBAP报文头
(3)通信应用层
-
Modbus客户机:允许用户应用控制与远程设备的信息交换。Modbus客户机根据用户应用向Modbus客户机接口的发送要求中所包含的参数来建立一个Modbus请求。
-
Modbus客户机接口:Modbus客户机接口提供一个接口,使得应用能够生成各类Modbus服务的请求,该服务包括对Modbus应用对象的访问。
-
Modbus服务器:在收到一个Modbus请求后,模块激活一个本地操作进行读、写或完成其他操作。
(4)客户机通信过程如下
-
用Connect命令建立与目标设备的连接;
-
准备Modbus报文包括7个字节的MBAP在内的请求;
-
使用Send命令发送报文;
-
在同一连接下等待应答;
-
用Recv命令读取报文,完成一次数据交换过程。当通信任务结束时,关闭TCP连接,使ModbusTCP服务器可为其它客户机服务。