DLE:标志字节(0x01)
STX:起始符(0x02)
ETX:结束符(0x03)
地址、命令、DATA:如果等于DLE,那么再补上一个DLE
校验和:地址,命令,DATA的字节和取补
这个课题需要用到的自由格式的参数功能码如下:
表2-2自由协议参数功能码
自由协议里面的数据的读写都是低位在前,高位在后,而Modbus RTU和TCP协议的数据读写是高位在前低位在后。
2。1。2 Modbus RTU功能码设置
这项课题用到了Modbus协议的3个功能码,如表2-3所示。
表2-3功能码
接下来对上述前两个功能码消息帧进行详细介绍:
功能码03(读数据):
例如,上位机读下位机设备号为04的,0007为起始地址的2个下位机寄存器信息
主机发送报文格式如表2-4所示。
表2-4发送报文内容
对应的自由协议报文格式如下:
表2-5自由协议报文内容
功能码06(写单个寄存器):
上位机需要将数据CCDD保存到下位机设备号是05,并且起始地址是0005的下位机寄存器里面
主机发送报文格式如表2-6所示。
表2-6发送报文内容
对应的自由协议报文内容如下:
表2-7发送报文内容
2。2 Modbus TCP协议简介
在1996年,施耐德公司率先推行了以TCP/IP为基础的Modbus协议,由于其投入较少,在目前所有的应用都能够实施,已经成为目前自动化设备中最普遍使用的协议。在2002年5月,该公司发表了Modbus TCP协议规范,并且把此规范提交至国际因特网工程特别工作组(也称规范互联网工程项目组 , IETF),这样做是为了让这个规范能成为工业以太网协议 ( Industrial Internet Protocol)标准[4]。在2004年1月,SC65C工作组会议在法国召开,并且提出建议,颁布了六个新的实时以太网协议规范,其中,包括之前已公示的协议, Modbus TCP从此正式进入了IEC标准。
Modbus TCP协议定义了在TCP/IP协议下,工业系统内以Modbus为格式数据传送的方式。在这项协议之下实现了主控设施与从设施通过以太网进行数据的传送与交换。Modbus TCP十分简明易懂,众多工业企业都会将此协议应用到基于Modbus的自动化工业设施的管理运行中去。这项协议也可用于I/O模块中。
2。2。1 Modbus TCP报文格式
Modbus TCP协议可以通过把Modbus消息帧放置于TCP帧之中来形成新的信息帧形式,它的信息帧形式如图2-2所示。Modbus协议下TCP模式相比RTU模式的报文格式,多了报文头这一前缀,少了后面的CRC校验,而功能码还是和RTU一样的[5]。它能够通过TCP/IP 的TCP层和链路层(以太网)验证机制验证分组交换的精准度。在MBAP报文头中,它包含了事物处理标识、协议标识、长度和单元标识。
图2-2 Modbus TCP信息帧形式
MBAP报文头(Modblls APPlication Protocol Header)作为TCP/IP使用的专属报文头,可以用来检测出Modbus内部的应用数据单元。MBAP报文头总共包含7个字节,各个字节具体组成的含义如表2-8所示。
表2-8 MBAP报文头
功能码用于设置主控设备和从设备所需要操作的对应的Modbus功能,通常由位执行和16位的字执行,这两个大类组成。正确的功能码绝对是可以用来执行标准的Modbus协议的重要之处。在标准的Modbus协议中,规定的功能号一定要与相应的功能对号入座。论文网
数据域是一个可以加长的字段,具体的格式和之前的功能码非常相关。一般的说来,客户端所发送的请求数据给出占据2个字节的寄存器的起始地址和1字节的寄存器的个数;然后服务器端给出应答响应,给出1字节的被操作寄存器的个数和n个字节的寄存器的状态值。