《Modbus通讯协议合约.doc》由会员分享,可在线阅读,更多相关《Modbus通讯协议合约.doc(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Modbus 通讯协议简化通讯协议简化V1.0 2004-5-21 1Modbus 协议概述 Modbus 协议是主从站通讯协议,用异步串行口完成通讯,物理层采用 RS485 或RS232。传输速率可以达到 115kbps,理论上可接(寻址)一台主站和至多 247 台从站。受线路和设备的限制,最多可接一台主站和 32 台从站。Modbus 协议的某些特性是固定的,如帧格式、帧顺序、通讯错误和异常情况的处理,以及所执行的功能等,都不能随便改动。其他特性属于用户可选的,如传输介质、波特率、字符奇偶校验、停止位的个数等等,传输模式为 RTU。用户所选择的参数对于各个站必须一致,在系统运行时不能改变。
2、1.1 Modbus 协议传输模式Modbus 的传输模式:RTU 方式。表 1-1 RTU 传输模式的特性特性RTU编码系统十六进制起始位1 位数据位8 位奇偶校验位0 或 1 位每个字符的位数停止位1 或 2 位校验和CRC(循环冗余校验)1.2 帧Modbus 协议的帧(报文)格式:RTU 帧。下表是 RTU 传输模式的一般格式命令帧。从站地址功能码数据校验和8 位8 位N*8 位16 位2Modbus 协议 2.1 通讯方式Modbus 有两种通讯方式:应答方式和广播方式。应答方式是主站向某个从站(地址 1247)发出命令,然后等待从站的应答;从站接到主站命令后,执行命令,并将执行结果
3、返回给主站作为应答,然后等待下一个命令。广播方式是主站向所有从站发送命令(从站地址为 0) ,不需要等待从站应答;从站接到广播命令后,执行命令,也不向主站应答。除了会送诊断校验外,只有 05、06、15、16 这四项功能(见 2.3)对广播方式有效。2.2Modbus 帧Modbus 的帧按应答方式分为命令帧(询问帧)和应答帧。命令帧为一般格式命令帧,应答帧有显长度帧和隐长度帧之分,图 2-1、2-3、2-4 给出了典型的帧格式。数据从站地 址功能 码数据起始寄存器高位数据起始寄存器 地位数据寄存器 高位数据寄存器 地位校验 和图 2-1 一般格式命令帧从站地址功能码数据长度数据校验和图 2-
4、3 显长度应答帧从站地址功能码数据校验和图 2-4 隐长度应答帧 2.2.1从站地址字段帧中的从站地址字段表示接收主站报文的从站地址。当从站地址字段为 0 时,表示所有从站,此时的报文是广播报文。用户必须设定每台从站的专用地址。只有被编址的设备才能对主机的命令(询问)做出应答。从站发送应答报文时,报文中地址的作用是向主站报告正在通讯的是哪台从站。2.2.2 功能码字段功能码字段同志从站应执行何种功能。表 2-1 列出了功能码的意义和作用。2.3 节给出了各个功能码对应报文的详细格式和功能。表 2-1 Modbus 功能码功能码名称作用(对主站而言)01读取开出状态取得一组开关量输出的当前状态0
5、2读取开入状态取得一组开关量输入的当前状态03读取模出状态取得一组模拟量输出的当前状态04读取模入状态取得一组模拟量输入的当前状态05强制单路开出强制设定某个开关量输出的值06强制单路模出强制设定某个模拟量输出的值07读取异常状态取得从站的一些状态(8 位)08回送诊断校验把诊断校验报文送从站,以对通讯处理进行评鉴09编程主机模拟编程器的作用,修改从站逻辑10探询定期探询从站是否已完成某长程序任务11读取事件计数取得通讯状态和通讯事件的次数12读取通讯事件记录取得通讯状态、事件次数、报文数量和至多 64 个 事件13编程主机模拟编程器的作用,修改从站逻辑14探询定期探询从站是否已完成某长程序任
6、务15强制多路开出强制设定从站几个开关量输出的值16强制多路模出强制设定从站几个模拟量输出的值17报告从站标识取得从站类型和运行指示灯的状态18编程主机模拟编程器的作用,修改从站逻辑19重置通讯链路使从站复位于已知状态20-72保留留作扩展功能备用73-119非法功能120-127保留留作内部使用128-255保留用作异常应答2.2.2数据长度字段数据长度字段记录的是随后的数据字段的长度,单位为字符(字节) 。数据字段的长度总是被规定为 RTU 模式下数据字符的总数,数据字符的数量总是按 RTU 模式下的数据字符计算。2.2.4 数据字段数据字段内含有从站执行某项具体功能的信息,或者含有从站应
7、答询问的信息。这些信息可以是数值、地址参数或范围,例如,从哪路开关量或寄存器开始,处理几个开关位或寄存器、开关量或寄存器的值等等。2.2.5 校验和字段校验和字段用于检查通讯报文在通讯线路中是否出错。RTU 模式传送时,用 CRC-16,参见附录 A。2.3 功能码2.3.1 读取开出状态(功能码 01)本功能可使主站获得被编址从站的开关量输出的通断状态。起始地址是指从哪一路开关量开始(编号从 0 开始) ,数据线圈数是指读取几路。应答帧中的数据是按上述要求读取的开关量数据(每路一位,每 8 位组成一个字节,最后一个字节的不足部分补 0) 。本功能不支持广播方式。以下例子是读取 17 号从站开
8、关量输出 020-056 的状态,读出的 37 位组成 5 个字节,最后一个字节的高三位补 0。询问 RTU 帧:从站地址功能码起始地址 高位起始地址 低位数据线圈 数高位数据线圈 数低位校验和 CRC11H01H00H13H00H25H0EH 84H应答 RTU 帧:从站地址功能码字节计数数据校验和 CRC11H01H05HCDH 6BH B2H 0EH 1BH45H E6H2.2.3读取开入状态(功能码 02)本功能可使主站获得被编址从站的开关量输入的通断状态。起始地址是指从哪一路开关量开始(编号从 0 开始) ,数据线圈数是指读取几路。应答帧中的数据是按上述要求读取的开关量数据(每路一位
9、,每 8 位组成一个字节,最后一个字节的不足部分补 0) 。本功能不支持广播方式。以下例子是读取 17 号从站开关量输入 0197-0218 的状态,读出的 22 位组成 3 个字节,最后一个字节的高 2 位补 0。询问 RTU 帧:从站地址功能码起始地址 高位起始地址 低位数据线圈 数高位数据线圈 数低位校验和 CRC11H02H00HC4H00H16HBAH A9H应答 RTU 帧:从站地址功能码字节计数数据校验和 CRC11H02H03HACH DBH 35H20H 18H2.2.4读取模出状态(功能码 03)本功能可使主站获得被编址从站的模拟量输出的通断状态。起始地址是指从哪一路模拟量
10、开始(编号从 0 开始) ,寄存器数是指读取几路模拟量(每路模拟量 2 个字节,高位在前,低位在后) 。应答帧中的数据是按上述要求读取的模拟量数据。本功能不支持广播方式。以下例子是读取 17 号从站模出点 0108-0110 的状态。应答数据高字节在前。108是 555,109 是 0,110 是 100。询问 RTU 帧:从站地址功能码起始地址 高位起始地址 低位寄存器数 高位寄存器数 低位校验和 CRC11H03H00H6BH00H03H76H 87H应答 RTU 帧:从站地址功能码字节计数数据校验和 CRC11H03H06H02H 2BH 00H 00H 00H 64HCBH BAH2.
11、2.5读取模入状态(功能码 04)本功能可使主站获得被编址从站的模拟量输入值。起始地址是指从哪一路模拟量开始(编号从 0 开始) ,寄存器数是指读取几路模拟量(每路模拟量 2 个字节,高位在前,低位在后) 。应答帧中的数据是按上述要求读取的模拟量数据。本功能不支持广播方式。以下例子是读取 17 号节点的模入点 0108-0110 的状态。应答数据高字节在前。108 是 555,109 是 0,110 是 100。询问 RTU 帧:从站地址功能码起始地址 高位起始地址 低位寄存器数 高位寄存器数 低位校验和 CRC11H04H00H6BH00H03HC3H 47H应答 RTU 帧:从站地址功能码
12、字节计数数据校验和 CRC11H04H06H02H 2BH 00H 00H 00H 64H5C 89H2.2.6强制单路开出(功能码 05)本功能可使主站强行设定被编址从站某路开关量输出的通断状态。从站内部的任何一路开关量均能被强制。起始地址是指设定开关量的哪一路(编号从 0 开始) ,数据用于设定开或关:FF 为开,0 为关,其他值为非法值。正常应答是将报文原文发回。从站地址为 0 时,为广播方式。以下例子是强制 17 号从站开出点 173 为 ON。询问 RTU 帧:从站地址功能码起始地址 高位起始地址 低位数据开关原状 态校验和 CRC11H05H00HACHFFH00H4EH 8BH应
13、答 RTU 帧:从站地址功能码起始地址 高位起始地址 低位数据开关原状 态校验和 CRC11H05H00HACHFFH00H4EH 8BH2.2.7强制单路模出(功能码 06)本功能可使主站强行设定被编址从站某路模拟量输出的值。从站内部的任何一路模拟量均能被强制。起始地址是指设定哪一路模拟量(编号从 0 开始) ,数据用于设定该模拟量的值(高位在前,低位在后) 。正常应答是将报文原文发回。从站地址为 0 时,为广播方式。以下例子是强制 17 号从站模出点 136 为 039EH。询问 RTU 帧:从站地址功能码起始地址 高位起始地址 低位数据高位数据低位校验和 CRC11H06H00H87H0
14、3H9EHBAH 2BH应答 RTU 帧:从站地址功能码起始地址 高位起始地址 低位数据高位数据低位校验和 CRC11H06H00H87H03H9EHBAH 2BH2.2.8强制多路开出(功能码 15)本功能可使主站强行设定被编址从站一组连续开关量输出的通断状态。从站内部的任何开出量均能被强制。起始地址是从哪一路开关量开始(编号从 0 开始) ,寄存器数是指设定几路。字节计数是指随后的线圈状态(开关量设定值)的字节数。线圈状态是设定的开出值,每一路开出占用一位(1 为开,0 为关) ,每八位组成一个字节,最后一个字节的不足部分补 0。正常应答内容是回送从站地址、功能码、起始地址和强置的开关量数
15、。从站地址为 0 时,为广播模式。以下例子是强置 17 号从站开关量输出 0020-0029 的状态,设定值CD(11001101)和 00(00000000)表示开关量输出的第 27、26、23、22 和 20 将被强置为开状态。询问 RTU 帧:从站地 址功能码起始地 址高位起始地 址低位寄存器 数高位寄存器 数低位字节计 数数据校验和 CRC11H0FH00H13H00H 0AH 02H CDH 00H7EH CBH应答 RTU 帧:从站地址功能码起始地址 高位起始地址 低位寄存器数 高位寄存器数 低位校验和 CRC11H0FH 00H13H00H0AH26H 99H2.2.9强制多路模
16、出(功能码 16)本功能可使主站强行设定被编址从站一组连续模拟量输出的值。从站内部的任何模出量均能被强制。起始地址是从哪一路模拟量开始(编号从 0 开始) ,寄存器数是指设定几路。字节计数是指随后的数据(模拟量设定值)的字节数。数据是设定的模出值,每一路模出两个字节(高位在前,低位在后) 。正常应答内容是回送从站地址、功能码、起始地址和强置的模拟量数。从站地址为 0 时,为广播模式。以下例子是强置 17 号从站模拟量输出 0136-0137 的状态,设定值 0136 为 000A,设定 0137 为 0102。询问 RTU 帧:从站地 址功能码起始地 址高位起始地 址低位寄存器 数高位寄存器
17、数低位字节计 数数据校验和 CRC11H10H00H87H00H 02H04H 00H 0AH 01H 02H4EH BAH应答 RTU 帧:从站地址功能码起始地址 高位起始地址 低位寄存器数 高位寄存器数 低位校验和 CRC11H10H 00H87H00H02HF3H 71H附录附录 A 循环冗余校验 (CRC)码算法生成 CRC-16 校验字节的步骤如下:1装入一个 16 位寄存器,所有数位均为 1。2装 16 位寄存器的低位字节与开始 8 位字节进行“异或”运算。运算结果放入这个 16 位寄存器。3把这个 16 位寄存器向右移 1 位。4若向右(标记位)移出的数位是 1,则生成多项式 1
18、010000000000001 和这个寄存器进行异或运算。若向右移出的数位是 0,则返回(3) 。5重复(3)和(4) ,直到移出 8 位。6另外 8 位与该 16 位寄存器进行“异或”运算。7重复(3)-(6) ,直至该报文所有字节均与 16 位寄存器进行“异或”运算,并移位 8 次。8这个 16 位寄存器的内容即是 2 字节 CRC 校验值。附录附录 B数据通道表不同的数据通道表应由数据传送方提供,表格式如下表(数据名称、数据地址、取值范围应根据实际而定)序 号数据名称数据类型功能码数据地 址传输方向缩放倍数取值范围1模拟量 10x0340001主站 子站12000-21002模拟量 20
19、x1040102主站 子站0.51-1003模拟量 30x1040103主站 子站0.50-504模拟量 40x1040104主站 子站10-235模拟量 50x1040105主站 子站0.010-99996模拟量 60x1040106 主站 子站0.010-9997模拟量 70x1040107主站 子站0.1200-2108模拟量 816 位二进制, 有符号整数0x1040108主站 子站11-12序 号数据名称功能码数据地 址传输方向取值范围1开关量 10X0A00001主站 子站0/12开关量 20X0A00002主站 子站0/13开关量 30X0A00003主站 子站0/14开关量 40X0A00004主站 子站0/15开关量 50X0A00005主站 子站0/16开关量 10x0210001主站 子站0/1.