通信协议又称通信规程,是指通信双方对数据传送控制的一种约定,约定中对数据格式,同步方式,传送速度,传送步骤,检纠错误方式及控制定义等问题做出统一规定,通信双方必须共同遵守,它也叫做链路控制规程。
通信协议还包括电气接口标准,但它是另外制定的,不在有关数据传送的通信协议内。
二、Modbus通信协议简介
Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准,1996年施耐德公司推出基于以太网TCP/IP的Modbus协议,Modbus协议是一项应用层报文协议,包括ASCII、RTU、TCP三种报文类型。
标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。
Modbus通信协议是一种主从式串行异步半双工通信协议,采用主从式通信结构,可使一个主站对多个从站进行双向通信,主站可单独和从站通信,也可以广播方式和所有从站通信。Modbus协议的某些特性是固定的,如信息帧结构,帧顺序,通讯错误和异常情况的处理,以及所执行的功能码等,都不能随便改动,其他特性是属于用户可选的如传输介质,波特率,字符奇偶校验,停止位个数,参数字址定义等等。
Modbus协议通信格式中数据长度是固定的,校验位、停止位、波特率是可选的。
由于Modbus协议是完全公开透明的,所需的软硬件又非常简单,这就使它已经成为一个通用的工业标准,几乎所有的控制设备和智能化仪表都支持Modbus通信协议。通过Modbus协议,不同厂商所生产的控制设备和智能仪表就可以连成一个工业网络,进行集中监控。
Modbus协议常用功能码:
功能码 | 名称 | 功能 |
H01 | 读线圈状态 | 取输出开关量状态 |
H02 | 读输入状态 | 取输入开关量状态 |
H03 | 读保持存储器 | 读一个或多个输出存储器值 |
H04 | 读取存储器 | 读一个或多个输入存储器值 |
H05 | 强置单线圈 | 强置一个输出开关量状态 |
H06 | 写保持存储器 | 把字写入一个输出存储器 |
H08 | 回送诊断校验 | 把诊断报告送从站 |
H0F | 强置多线圈 | 强置一组连续输出开关量状态 |
H10 | 预置多存储器 | 写入一组连续输出存储器值 |
三、ASCII通信方式
1、ASCII模式通信格式约定
起始位:1位
数据长度:7位,低位先送
校验位:1位(有校验),0位(无校验)
停止位:1位(有校验),2位(无校验)
波特率:可选
2、ASCII模式数据格式约定
起始码 | 地址码 | 功能码 | 数据区 | 校验码 | 停止码 | |
: | 01-1F | 功能码 | n个字符 | LRC | CR | LF |
3、ASCII模式校验码的约定
ASCII模式数据格式的校验码采用LRC算法所形成的校验码。
LRC算法详解
参与校验数据:从地址码到数据区的所有数据。
算法:相邻2个16进制符相加求和。
校验码:取其和的低8位的补码为校验码。
4、ASCII模式数据传送约定
ASCII模式数据传送约定在数据格式中每个16进制字符(0-9)、(A-F)都转换成ASCII码发送,这种方式的主要优点是字符发送的时间间隔可达1秒,而不产生错误。
四、RTU通信方式
1、RTU模式通信格式约定
起始位:1位
数据长度:8位,低位先送
校验位:1位(有校验),0位(无校验)
停止位:1位(有校验),2位(无校验)
波特率:可选
3、RTU模式数据格式约定
起始码 | 地址码 | 功能码 | 数据区 | 校验码 | 停止码 |
3.5字符停止时间 | 01-1F | 功能码 | n个字符 | CRC | 3.5字符停止时间 |
3、RTU模式校验码约定
RTU模式数据格式的校验码采用CRC算法所形成的校验码。
4、RTU模式数据传送约定
RTU模式数据传送约定按数据格式中16进制字符进行连续发送,如果在发送帧信息期间,出现大于1.5个字符的静止时间时,则信息会出现错误。该模式的主要优点是在相同波特率下其传输效率高于ASCII模式。
四、ASCII和RTU两种模式的应答和错误检测
当主站向从站发送信息时,全部通信由两部分组成:一是主站向从站的发送,我们叫查询,又叫请求;二是从站对主站的应答,也叫回传、响应。应答的目的是告诉主站是否有错误和回答主站的相关通信请求。通信协议对查询和应答的时间,数据格式,验错方法都会给出相应的规定。
1、正确应答说明
①、常用功能码H03:读出一个或连续多个存储器值
查询:
起始码 | 地址码 | 功能码 | 存储器首址 | 数据个数 | 校验码 | 停止码 |
正确应答:
起始码 | 地址码 | 功能码 | 读取字节数 | 数据1 | 数据2 | 数据n | 校验码 | 停止码 |
②、常用功能码06:写入一个值到存储器中
查询:
起始码 | 地址码 | 功能码 | 存储器地址 | 写入数据 | 校验码 | 停止码 |
正确应答:
起始码 | 地址码 | 功能码 | 存储器地址 | 写入数据 | 校验码 | 停止码 |
③、常用功能码H10:写入多个值到连续存储器中
查询:
起始码 | 地址码 | 功能码 | 存储器首址 | 写入数据个数 | 写入数据字节数 | 写入数据1 | 写入数据2 | 写入数据n | 校验码 | 停止码 |
正确应答:
起始码 | 地址码 | 功能码 | 存储器首址 | 写入数据个数 | 校验码 | 停止码 |
2、错误检测
Modbus规定,当主站查询后,从站回应时,使用功能码的变化来指示是否有错误发生,无错误正常应答,从站仅回应相同的功能码,对有错误或异常的应答,从站应答时,将其功能码最高位b7置1,同时从站还应将错误代码放入数据区告诉主站发生了什么错误。
3、错误应答说明:
查询:
起始码 | 地址码 | 功能码 | 数据区 | 校验码 | 停止码 |
3.5字符 | 01 | 03 | 21 02 00 02 | CRC | 3.5字符 |
错误应答:
起始码 | 地址码 | 功能码 | 数据区 | 校验码 | 停止码 |
3.5字符 | 01 | 83 | 错误代码 | CRC | 3.5字符 |
五、Modbus TCP通信方式
1、Modbus TCP概述
Modbus/TCP是简单的、公开的用于管理和控制自动化设备的Modbus系列通讯协议的派生产品。
Modbus/TCP 使Modbus RTU协议运行于以太网,Modbus TCP使用TCP/IP和以太网在站点间传送Modbus报文,Modbus TCP结合了以太网物理网络和网络标准TCP/IP以及以Modbus作为应用协议标准的数据表示方法。与Modbus另外两种模式不同,Modbus TCP插入一个标准的Modbus报文到TCP报文中,不再带有数据校验和地址。
2、通讯所使用的以太网参考模型
Modbus TCP传输过程中使用了TCP/IP以太网参考模型的5层:
第一层:物理层,提供设备物理接口,与市售介质/网络适配器相兼容。
第二层:数据链路层,帧编码和误差纠正,保证数据传输的正确性。
第三层:网络层,生成带有32位IP地址的IP报文包。
第四层:传输层,实现可靠性连接、传输、查错、重发、端口服务、传输调度。
第五层:应用层,Modbus协议报文。
3、Modbus TCP数据帧
Modbus数据在TCP/IP以太网上传输,支持Ethernet II和802.3两种帧格式,Modbus TCP数据帧包含报文头、功能代码和数据3部分。MBAP报文头(MBAP、Modbus Application Protocol、Modbus应用协议)分4个域,共7个字节。
由于使用以太网TCP/IP数据链路层的校验机制而保证了数据的完整性,Modbus TCP 报文中不再带有CRC校验,原有报文中的“地址码”也被“单元标识符”替代而加在Modbus应用协议报文头中,即Modbus TCP的数据帧是Modbus RTU的数据帧去掉CRC校验和功能码,并在前面加上MBAP报文头而成。
Modbus TCP数据帧
MBAP报文头(7字节) | 功能码(1字节) | 数据(不固定) |
MBAP报文头(MBAP:Modbus Application Protocol、Modbus应用协议)
域 | 长度(B) | 客户端 | 服务器端 |
事物处理标识 | 2 | 由客户端生成 | 应答时复制该值 |
协议标识符 | 2 | 由客户端生成 | 应答时复制该值 |
长度 | 2 | 由客户端生成 | 应答时由服务器端重新生成 |
单元标识符 | 1 | 由客户端生成 | 应答时复制该值 |
①、事物处理标识/传输标志(2个字节)
用于事物处理配对,在响应中,Modbus服务器复制请求的事物处理标识符。在以太网传输中存在一个问题,就是先发后至,我们可以利用这个事物处理标识符做一个TCP序列号,来防止这种情况所造成的数据收发错乱,可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。
②协议标识符
00 00表示Modbus TCP协议。
③长度
表示接下来的数据长度,包括单元标识符和数据域,单位为字节。
④单元标识符
设备编号也可以理解为设备地址(可以使用PLC的IP地址标识),Modbus从站设备地址为1-247(10进制),地址0作为广播地址。对TCP/IP来说,利用IP地址寻址Modbus服务器,此时Modbus单元标识符是无用的,必须使用无效的从站地址(建议采用“HFF”)。
4、Modbus TCP使用的通讯资源端口号
在Modbus服务器中按缺省协议使用Port 502 通信端口,在Modbus客户端程序中设置任意通信端口,为避免与其他通讯协议的冲突一般建议从2000开始。
5、使用Modbus TCP原因
TCP/IP已成为信息行业的事实标准,世界上93%的网络都使用TCP/IP,只要在应用层使用Modbus TCP,就可以实现工业以太网数据交换;易于与各种系统互连,可用于管理网、实时监控网及现场设备通信;网络实施价格低廉,可全部使用通用网络部件。
上一篇:通信基础