Modbus通讯协议简化
V1.0 2004-5-21 1 Modbus协议概述
Modbus协议是主从站通讯协议,用异步串行口完成通讯,物理层采用RS485或RS232。传输速率可以达到115kbps,理论上可接(寻址)一台主站和至多247台从站。受线路和设备的,最多可接一台主站和32台从站。
Modbus协议的某些特性是固定的,如帧格式、帧顺序、通讯错误和异常情况的处理,以及所执行的功能等,都不能随便改动。其他特性属于用户可选的,如传输介质、波特率、字符奇偶校验、停止位的个数等等,传输模式为RTU。用户所选择的参数对于各个站必须一致,在系统运行时不能改变。 1.1 Modbus协议传输模式
Modbus的传输模式:RTU方式。 表1-1 RTU传输模式的特性
特性 编码系统 每个字符的位数 起始位 数据位 奇偶校验位 停止位 校验和
1.2 帧
Modbus协议的帧(报文)格式:RTU帧。 下表是RTU传输模式的一般格式命令帧。 从站地址 8位
2 Modbus协议 2.1 通讯方式
Modbus有两种通讯方式:应答方式和广播方式。
应答方式是主站向某个从站(地址1~247)发出命令,然后等待从站的应答;从站接到主站命令后,执行命令,并将执行结果返回给主站作为应答,然后等待下一个命令。
广播方式是主站向所有从站发送命令(从站地址为0),不需要等待从站应答;从站接到广播命令后,执行命令,也不向主站应答。
除了会送诊断校验外,只有05、06、15、16这四项功能(见2.3)对广播方式有
文案大全
RTU 十六进制 1位 8位 0或1位 1或2位 CRC(循环冗余校验) 功能码 8位 数据 N*8位 校验和 16位 实用标准文档
效。 2.2 Modbus帧
Modbus的帧按应答方式分为命令帧(询问帧)和应答帧。命令帧为一般格式命令帧,应答帧有显长度帧和隐长度帧之分,图2-1、2-3、2-4给出了典型的帧格式。 从站地址 功能码 数据 数据起始寄存器高位 数据起始寄存器地位 数据寄存器高位 数据寄存器地位 校验和 图2-1 一般格式命令帧
从站地址 从站地址 功能码 数据 图2-4 隐长度应答帧
2.2.1 从站地址字段
帧中的从站地址字段表示接收主站报文的从站地址。当从站地址字段为0时,表示所有从站,此时的报文是广播报文。
用户必须设定每台从站的专用地址。只有被编址的设备才能对主机的命令(询问)做出应答。从站发送应答报文时,报文中地址的作用是向主站报告正在通讯的是哪台从站。
2.2.2 功能码字段
功能码字段同志从站应执行何种功能。表2-1列出了功能码的意义和作用。2.3节
给出了各个功能码对应报文的详细格式和功能。 表2-1 Modbus功能码 功能码 01 02 03 04 05 06 07 08 09 10 11 12 文案大全
功能码 数据长度 图2-3 显长度应答帧 数据 校验和 校验和 名称 读取开出状态 读取开入状态 读取模出状态 读取模入状态 强制单路开出 强制单路模出 读取异常状态 回送诊断校验 编程 探询 读取事件计数 作用(对主站而言) 取得一组开关量输出的当前状态 取得一组开关量输入的当前状态 取得一组模拟量输出的当前状态 取得一组模拟量输入的当前状态 强制设定某个开关量输出的值 强制设定某个模拟量输出的值 取得从站的一些状态(8位) 把诊断校验报文送从站,以对通讯处理进行评鉴 主机模拟编程器的作用,修改从站逻辑 定期探询从站是否已完成某长程序任务 取得通讯状态和通讯事件的次数 读取通讯事件记录 取得通讯状态、事件次数、报文数量和至多个事实用标准文档
件 13 14 15 16 17 18 19 20-72 73-119 120-127 128-255
2.2.2 数据长度字段
数据长度字段记录的是随后的数据字段的长度,单位为字符(字节)。数据字段的长度总是被规定为RTU模式下数据字符的总数,数据字符的数量总是按RTU模式下的数据字符计算。 2.2.4 数据字段
数据字段内含有从站执行某项具体功能的信息,或者含有从站应答询问的信息。这些信息可以是数值、地址参数或范围,例如,从哪路开关量或寄存器开始,处理几个开关位或寄存器、开关量或寄存器的值等等。 2.2.5 校验和字段
校验和字段用于检查通讯报文在通讯线路中是否出错。 RTU模式传送时,用CRC-16,参见附录A。
2.3功能码
2.3.1读取开出状态(功能码01)
本功能可使主站获得被编址从站的开关量输出的通断状态。起始地址是指从哪一路开关量开始(编号从0开始),数据线圈数是指读取几路。应答帧中的数据是按上述要求读取的开关量数据(每路一位,每8位组成一个字节,最后一个字节的不足部分补0)。本功能不支持广播方式。
以下例子是读取17号从站开关量输出020-056的状态,读出的37位组成5个字节,最后一个字节的高三位补0。
询问RTU帧: 从站地址 功能码 起始地址高位 起始地址低位 数据线圈数高位 数据线圈数低位 校验和CRC 编程 探询 强制多路开出 强制多路模出 报告从站标识 编程 重置通讯链路 保留 非法功能 保留 保留 主机模拟编程器的作用,修改从站逻辑 定期探询从站是否已完成某长程序任务 强制设定从站几个开关量输出的值 强制设定从站几个模拟量输出的值 取得从站类型和运行指示灯的状态 主机模拟编程器的作用,修改从站逻辑 使从站复位于已知状态 留作扩展功能备用 留作内部使用 用作异常应答 文案大全
实用标准文档
11H 从站地址 11H 01H 功能码 01H 00H 字节计数 05H 13H 数据 00H 25H 校验和CRC 45H E6H 0EH 84H 应答RTU帧: CDH 6BH B2H 0EH 1BH 2.2.3 读取开入状态(功能码02)
本功能可使主站获得被编址从站的开关量输入的通断状态。起始地址是指从哪一路开关量开始(编号从0开始),数据线圈数是指读取几路。应答帧中的数据是按上述要求读取的开关量数据(每路一位,每8位组成一个字节,最后一个字节的不足部分补0)。本功能不支持广播方式。
以下例子是读取17号从站开关量输入0197-0218的状态,读出的22位组成3个字节,最后一个字节的高2位补0。
询问RTU帧: 从站地址 11H 功能码 02H
应答RTU帧: 从站地址 11H 功能码 02H 字节计数 03H 数据 ACH DBH 35H 校验和CRC 20H 18H 起始地址高位 00H 起始地址低位 C4H 数据线圈数高位 00H 数据线圈数低位 16H 校验和CRC BAH A9H
2.2.4 读取模出状态(功能码03)
本功能可使主站获得被编址从站的模拟量输出的通断状态。起始地址是指从哪一路模拟量开始(编号从0开始),寄存器数是指读取几路模拟量(每路模拟量2个字节,高位在前,低位在后)。应答帧中的数据是按上述要求读取的模拟量数据。本功能不支持广播方式。
以下例子是读取17号从站模出点0108-0110的状态。应答数据高字节在前。108是555,109是0,110是100。
询问RTU帧: 从站地址 11H 功能码 03H
应答RTU帧: 从站地址 11H 功能码 03H 字节计数 06H 数据 02H 2BH 00H 00H 00H H 校验和CRC CBH BAH 起始地址高位 00H 起始地址低位 6BH 寄存器数高位 00H 寄存器数低位 03H 校验和CRC 76H 87H
2.2.5 读取模入状态(功能码04)
本功能可使主站获得被编址从站的模拟量输入值。起始地址是指从哪一路模拟量开
文案大全
实用标准文档
始(编号从0开始),寄存器数是指读取几路模拟量(每路模拟量2个字节,高位在前,低位在后)。应答帧中的数据是按上述要求读取的模拟量数据。本功能不支持广播方式。
以下例子是读取17号节点的模入点0108-0110的状态。应答数据高字节在前。108是555,109是0,110是100。
询问RTU帧: 从站地址 11H 功能码 04H
应答RTU帧: 从站地址 11H 功能码 04H 字节计数 06H 数据 02H 2BH 00H 00H 00H H 校验和CRC 5C H 起始地址高位 00H 起始地址低位 6BH 寄存器数高位 00H 寄存器数低位 03H 校验和CRC C3H 47H
2.2.6 强制单路开出(功能码05)
本功能可使主站强行设定被编址从站某路开关量输出的通断状态。从站内部的任何一路开关量均能被强制。起始地址是指设定开关量的哪一路(编号从0开始),数据用于设定开或关:FF为开,0为关,其他值为非法值。正常应答是将报文原文发回。从站地址为0时,为广播方式。
以下例子是强制17号从站开出点173为ON。 询问RTU帧: 从站地址 11H 功能码 05H 起始地址高位 00H 起始地址低位 ACH 数据 FFH 开关原状态 00H 校验和CRC 4EH 8BH
应答RTU帧: 从站地址 11H 功能码 05H 起始地址高位 00H 起始地址低位 ACH 数据 FFH 开关原状态 00H 校验和CRC 4EH 8BH
2.2.7 强制单路模出(功能码06)
本功能可使主站强行设定被编址从站某路模拟量输出的值。从站内部的任何一路模拟量均能被强制。起始地址是指设定哪一路模拟量(编号从0开始),数据用于设定该模拟量的值(高位在前,低位在后)。正常应答是将报文原文发回。从站地址为0时,为广播方式。
文案大全
实用标准文档
以下例子是强制17号从站模出点136为039EH。 询问RTU帧: 从站地址 11H 功能码 06H 起始地址高位 00H 起始地址低位 87H 数据高位 03H 数据低位 9EH 校验和CRC BAH 2BH 应答RTU帧: 从站地址 11H
2.2.8 强制多路开出(功能码15)
本功能可使主站强行设定被编址从站一组连续开关量输出的通断状态。从站内部的任何开出量均能被强制。起始地址是从哪一路开关量开始(编号从0开始),寄存器数是指设定几路。字节计数是指随后的线圈状态(开关量设定值)的字节数。线圈状态是设定的开出值,每一路开出占用一位(1为开,0为关),每八位组成一个字节,最后一个字节的不足部分补0。正常应答内容是回送从站地址、功能码、起始地址和强置的开关量数。从站地址为0时,为广播模式。
以下例子是强置17号从站开关量输出0020-0029的状态,设定值CD(11001101)和00(00000000)表示开关量输出的第27、26、23、22和20将被强置为开状态。
询问RTU帧: 从站地址 11H 功能码 起始地起始地寄存器寄存器址高位 址低位 数高位 数低位 0FH
应答RTU帧: 从站地址 11H 功能码 0FH 起始地址高位 00H 起始地址低位 13H 寄存器数高位 00H 寄存器数低位 0AH 校验和CRC 26H 99H 00H 13H 00H 0AH 字节计数 02H 数据 CDH 00H 校验和CRC 7EH CBH 功能码 06H 起始地址高位 00H 起始地址低位 87H 数据高位 03H 数据低位 9EH 校验和CRC BAH 2BH 2.2.9 强制多路模出(功能码16)
本功能可使主站强行设定被编址从站一组连续模拟量输出的值。从站内部的任何模出量均能被强制。起始地址是从哪一路模拟量开始(编号从0开始),寄存器数是指设定几路。字节计数是指随后的数据(模拟量设定值)的字节数。数据是设定的模出值,每一路模出两个字节(高位在前,低位在后)。正常应答内容是回送从站地址、功能码、
文案大全
实用标准文档
起始地址和强置的模拟量数。从站地址为0时,为广播模式。
以下例子是强置17号从站模拟量输出0136-0137的状态,设定值0136为000A,设定0137为0102。
询问RTU帧: 从站地址 11H 功能码 起始地起始地寄存器寄存器址高位 址低位 数高位 数低位 10H
应答RTU帧: 从站地址 11H 功能码 10H 起始地址高位 00H 起始地址低位 87H 寄存器数高位 00H 寄存器数低位 02H 校验和CRC F3H 71H 00H 87H 00H 02H 字节计数 04H 数据 校验和CRC 00H 0AH 4EH BAH 01H 02H 附录A 循环冗余校验 (CRC)码算法
生成CRC-16校验字节的步骤如下:
1.装入一个16位寄存器,所有数位均为1。
2.装16位寄存器的低位字节与开始8位字节进行“异或”运算。运算结果放入这个16位寄存器。
3.把这个16位寄存器向右移1位。
4.若向右(标记位)移出的数位是1,则生成多项式1010000000000001和这个寄存器进行异或运算。若向右移出的数位是0,则返回(3)。 5.重复(3)和(4),直到移出8位。
6.另外8位与该16位寄存器进行“异或”运算。
7.重复(3)-(6),直至该报文所有字节均与16位寄存器进行“异或”运算,并移位8次。
8.这个16位寄存器的内容即是2字节CRC校验值。
文案大全
实用标准文档
附录B.数据通道表
不同的数据通道表应由数据传送方提供,表格式如下表(数据名称、数据地址、取值范围应根据实际而定) 序号 1 2 3 4 5 6 7 8 序号 1 2 3 4 5 6 序号 1 2 3 4 5 6 7 8
文案大全
数据名称 模拟量1 模拟量2 模拟量3 模拟量4 模拟量5 模拟量6 模拟量7 模拟量8 数据类型 16位二进制, 有符号整数 功能码 0x03 0x03 0x03 0x03 0x03 0x03 0x03 0x03 数据地址 40001 40002 40003 40004 40005 40006 40007 40008 传输方向 主站 < 子站 主站 < 子站 主站 < 子站 主站 < 子站 主站 < 子站 主站 < 子站 主站 < 子站 主站 < 子站 缩放倍数 1 0.5 0.5 1 0.01 0.01 0.1 1 取值范围 2000-2100 1-100 0-50 0-23 0-9999 0-999 200-210 1-12 数据名称 开关量1 开关量2 开关量3 开关量4 开关量5 开关量1 …. 数据名称 模拟量1 模拟量2 模拟量3 模拟量4 模拟量5 模拟量6 模拟量7 模拟量8 数据类型 16位二进制, 有符号整数 功能码 0X02 0X02 0X02 0X02 0X02 0x02 功能码 0x10 0x10 0x10 0x10 0x10 0x10 0x10 0x10 数据地址 10001 10002 10003 10004 10005 10001 数据地址 40101 40102 40103 40104 40105 40106 40107 40108 传输方向 主站< 子站 主站 < 子站 主站 < 子站 主站 < 子站 主站 < 子站 主站 < 子站 传输方向 主站 >子站 主站 >子站 主站 >子站 主站 >子站 主站 >子站 主站 > 子站 主站 >子站 主站 >子站 取值范围 0/1 0/1 0/1 0/1 0/1 0/1 缩放倍数 1 0.5 0.5 1 0.01 0.01 0.1 1 取值范围 2000-2100 1-100 0-50 0-23 0-9999 0-999 200-210 1-12 实用标准文档
序号 1 2 3 4 5 6
数据名称 开关量1 开关量2 开关量3 开关量4 开关量5 开关量1 …. 功能码 0X0A 0X0A 0X0A 0X0A 0X0A 0x02 数据地址 00001 00002 00003 00004 00005 10001 传输方向 主站 > 子站 主站 > 子站 主站 > 子站 主站 > 子站 主站 > 子站 主站 < 子站 取值范围 0/1 0/1 0/1 0/1 0/1 0/1 文案大全
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务