Modbus功能表
Modbus功能码表
Modbus功能码一览
________________________________________
Modbus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。下表1是ModBus的功能码定义。
表1 ModBus功能码
功能码名称作用
01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)
02 读取输入状态取得一组开关输入的当前状态(ON/OFF)
03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值
04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值
05 强置单线圈强置一个逻辑线圈的通断状态
06 预置单寄存器把具体二进值装入一个保持寄存器
07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态
08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴
09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑
10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送
11 读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时
12 读取通信事件记录可是主机检索每台从机的ModBus事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误
Modbus通讯功能码及实例
功能码名称作用
01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)
02 读取输入状态取得一组开关输入的当前状态(ON/OFF)
03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值
04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值
05 强置单线圈强置一个逻辑线圈的通断状态
06 预置单寄存器把具体二进值装入一个保持寄存器
07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定
08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴
09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑
10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送
11 读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时
12 读取通信事件记录可是主机检索每台从机的ModBu s事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误
13 编程(184/384 484 584)可使主机模拟编程器功能修改PC从机逻辑
14 探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送
Modbus通讯 功能码及实例
功能码名称作用之欧侯瑞魂创作
01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)
02 读取输入状态取得一组开关输入的当前状态(ON/OFF)
03 读取坚持寄存器在一个或多个坚持寄存器中取得当前的二进制值
04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值
05 强置单线圈强置一个逻辑线圈的通断状态
06 预置单寄存器把具体二进值装入一个坚持寄存器
07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定
08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴
09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑
10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操纵任务,仅在含有功能码9的报文发送后,本功能码才发送
11 读取事件计数可使主机发出单询问,并随即判定操纵是否成
功,尤其是该命令或其他应答发生通信错误时
12 读取通信事件记录可是主机检索每台从机的ModBus事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误
13 编程(184/384 484 584)可使主机模拟编程器功能修改PC从机逻辑
14 探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操纵,仅在含有功能13的报文发送后,本功能码才得发送
15 强置多线圈强置一串连续逻辑线圈的通断
16 预置多寄存器把具体的二进制值装入一串连续的坚持寄存器
17 陈述从机标识可使主机判断编址从机的类型及该从机运行指示灯的状态
MODBUS常用功能码及对应地址
MODBUS常用功能码备查
表1 ModBus功能码
功能码名
称作用
01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)
02 读取输入状态取得一组开关输入的当前状态(ON/OFF)
03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值
04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值
05 强置单线圈强置一个逻辑线圈的通断状态
06 预置单寄存器把具体二进值装入一个保持寄存器
15 强置多线圈强置一串连续逻辑线圈的通断
16 预置多寄存器把具体的二进制值装入一串连续的保持寄存器
表2 ModBus功能码与数据类型对应表
代码功能数据类
型
对应地址
01 读位
0000X
02 读位
1000X
03 读整型、字符型、状态字、浮点型4000X
04 读整型、状态字、浮点
型3000X
05 写位
0000X
06 写整型、字符型、状态字、浮点型4000X
15 写位
0000X
16 写整型、字符型、状态字、浮点型4000X
(学习的目的是增长知识,提高能力,相信一分耕耘一分收获,努力就一定可以获得应有的回报)
Modbus功能码一览表(最全版)
Modbus功能码一览
________________________________________
Modbus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。下表1是ModBus的功能码定义。
表1 ModBus功能码
功能码名称作用
01 读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)
02 读取输入状态取得一组开关输入的当前状态(ON/OFF)
03 读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值
04 读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值
05 强置单线圈强置一个逻辑线圈的通断状态
06 预置单寄存器把具体二进值装入一个保持寄存器
07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态
08 回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴
09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑
10 控询(只用于484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送
11 读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时
12 读取通信事件记录可是主机检索每台从机的ModBus事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误
MODBUS协议(功能码及报文解析)
MODBUS协议
Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。M odbus比其他通信协议使用的更广泛的主要原因有:
公开发表并且无版税要求
相对容易的工业网络部署
对供应商来说,修改移动原生的位或字节没有很多限制
Modbus允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和remote terminal unit (RTU)。
Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
大多数Modbus设备通信通过串口EIA-485物理层进行[1]。
对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。这两个变种都使用串行通讯(serial communication)方式。RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。被配置为RTU变种的节点不会和设置为ASCII变种的节点通信,反之亦然。
对于通过TCP/IP(例如以太网)的连接,存在多个Modbus/TCP 变种,这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
ModBus通信协议的【功能码】
ModBus通信协议的【功能码】
Modbus的功能码
ModBus 功能码与数据类型对应表:
RTU ⽅式读取整数据的例⼦:
解析⼀下:主机发送指令,访问从站地址为1,使⽤功能码03(读保持寄存器),起始地址⾼8位、低8位:表⽰想读取的模拟量的起始地址(起始地址为0)。⽐如例⼦中的起始地址为38,⼗进制为:56。寄存器数量⾼8位、低8位:表⽰从起始地址开始读多少个模拟量。例⼦中为1个模拟量。注意,在返回的信息中⼀个模拟量需要返回两个字节。错误校验为CRC校验。
从站应答:设备地址和命令号和上⾯的相同。返回的字节数:表⽰数据的字节个数,也就是数据1,2...n中的n的值。例⼦中返回了1个模拟量的数据,因为⼀个模拟量需要2个字节所以共2个字节。数据⾼低字节:41和24代表返回的1个模拟量的值,即⼗进制的16676。错误校验为CRC校验。
MODBUS协议(功能码及报文解析)
MODBUS协议
Modbus是一种串行通信协议,是于____年,为使用可编程逻辑控制器(PLC)而发表的。事实上,它已经成为工业领域通信协议,并且现在是工业电子设备
之间相当常用的连接方式。Modbus比其他通信协议使用的更广泛的主要原因
有:
公开发表并且无版税要求
相对容易的工业网络部署
对供应商来说,修改移动原生的位或字节没有很多限制
Modbus允许多个设备连接在同一个网络上进行通信,举个例子,一个由测
量温度和湿度的装置,并且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和remote terminal unit (RTU)。
Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的
版本。
大多数Modbus设备通信通过串口物理层进行。
对于通过(例如)的连接,存在多个Modbus/TCP变种,这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封
装方式是不同的。
Modbus 有一个扩展版本Modbus Plus(Modbus+或者MB+),不过此协定是Modicon专有的,和Modbus不同。它需要一个专门的协处理器来处理类似的高速令牌旋转。它使用1Mbit/s的,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。连接Modbus Plus到计算机需要特别的接口,通常是支持ISA(SA85),PCI或者PCMCIA总线的板卡。
Modbus协议是一个master/slave 架构的协议。有一个节点是master 节点,其他使用Modbus协议参与通信的节点是slave 节点。每一个slave 设备都有一个唯一的地址。在串行和MB+网络中,只有被指定为主节点的节点可以启动一
Modbus通讯 功能码及实例
功能码名称作用之阿布丰王创作
01 读取线圈状态取得一组逻辑线圈的以后状态(ON/OFF)
02 读取输入状态取得一组开关输入的以后状态(ON/OFF)
03 读取坚持寄存器在一个或多个坚持寄存器中取得以后的二进制值
04 读取输入寄存器在一个或多个输入寄存器中取得以后的二进制值
05 强置单线圈强置一个逻辑线圈的通断状态
06 预置单寄存器把具体二进值装入一个坚持寄存器
07 读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定
08 回送诊断校验把诊断校验报文送从机,以对通信处置进行评鉴
09 编程(只用于484)使主机模拟编程器作用,修改PC从机逻辑
10 控询(只用于484)可使主机与一台正在执行长法式任务从机通信,探询该从机是否已完成其把持任务,仅在含有功能码9的报文发送后,本功能码才发送
11 读取事件计数可使主机发出单询问,并随即判定把持是否胜利,
尤其是该命令或其他应答发生通信毛病时
12 读取通信事件记录可是主机检索每台从机的ModBus事务处置通信事件记录.如果某项事务处置完成,记录会给出有关毛病
13 编程(184/384 484 584)可使主机模拟编程器功能修改PC从机逻辑
14 探询(184/384 484 584)可使主机与正在执行任务的从机通信,按期控询该从机是否已完成其法式把持,仅在含有功能13的报文发送后,本功能码才得发送
15 强置多线圈强置一串联续逻辑线圈的通断
16 预置多寄存器把具体的二进制值装入一串联续的坚持寄存器
17 陈说从机标识可使主机判断编址从机的类型及该从机运行指示灯的状态
modbus功能码及格式
1、“01”读取线圈状态
发送:
功能代码1字节0x01
起始地址2字节0x0000~0xFFFF 线圈数量2字节1~2000(0x7D0)接收:
功能代码1字节0x01
字节数1字节N
线圈状态n字节n = N/N+1
N=读取线圈个数 / 8 ,如果余数不为0则N=N+1
出错时的返回:
功能代码1字节0x81
错误代码1字节01/02/03/04
例子:
2、“02”读取输入状态
发送:
功能代码1字节0x02
起始地址2字节0x0000~0xFFFF
输入点数量2字节1~2000(0x7D0)接收:
功能代码1字节0x02
字节数1字节N
输入点状态n字节n = N/N+1
N=读取输入点个数 / 8 ,如果余数不为0则N=N+1
出错时的返回:
功能代码1字节0x82
错误代码1字节01/02/03/04
例子:
3、“03”保持型寄存器读取
发送:
功能代码1字节0x03
起始地址2字节0x0000~0xFFFF 寄存器数量2字节1~125(0x7D)接收:
功能代码1字节0x03
字节数1字节2*N
寄存器值N*2字节
N=寄存器数量
出错时的返回:
功能代码1字节0x83
错误代码1字节01/02/03/04
例子:
4、“05”写单一线圈
发送:
功能代码1字节0x05
线圈地址2字节0x0000~0xFFFF 写入值2字节0x0000或0xFF00接收:
功能代码1字节0x05
线圈地址2字节0x0000~0xFFFF 写入值2字节0x0000或0xFF00出错时的返回:
功能代码1字节0x85
错误代码1字节01/02/03/04
例子:
5、“06”写单一寄存器
Modbus功能表
Modbus 网络是一个工业通信系统,由带智能终端的可编程
序控制器和计算机经过公用线路或局部专用线路连接而成。
其系统结构既包含硬件、亦包含软件。它可应用于各种数据
收集和过程监控。下表 1 是 ModBus 的功能码定义。
表 1 ModBus 功能码
功能码名称作用
01读取线圈状态获得一组逻辑线圈的当前状态(ON/OFF) 02读取输入状态获得一组开关输入的当前状态(ON/OFF)
03
在一个或多个保持寄存器中获得当前的二读取保持寄存器
进制值
04
在一个或多个输入寄存器中获得当前的二读取输入寄存器
进制值
05强置单线圈强置一个逻辑线圈的通断状态
06预置单寄存器把详尽二进值装入一个保持寄存器
获得 8 个内部线圈的通断状态,这8 个线
07
圈的地址由控制器决定,用户逻辑可以将读取异常状态
这些线圈定义,以说明从机状态,短报文
适合于迅速读取状态
08
把诊断校验报文送从机,以对通信办理进回送诊断校验
行评鉴
编程(只用于09
484)
控询(只用于10
484)
11读取事件计数
读取通信事件记12
录
编程( 184/384 13
484 584 )
探询( 184/384 14
484 584 )
15强置多线圈
16预置多寄存器使主机模拟编程器作用,更正PC 从机逻辑
可使主机与一台正在执行长程序任务从机通信,探询该从机能否已完成其操作任务,仅在含有功能码 9 的报文发送后,本功能码
才发送
可使主机发出单咨询,并随即判断操作能
否成功,特别是该命令或其余应答产生通
信错误时
可是主机检索每台从机的ModBus 事务办理通信事件记录。假如某项事务办理完成,记录会给出有关错误
MODBUS功能码简述
MODBUS功能码简述
下表列出MODBUS支持的部分功能代码:以十进制表示。表1.1 MODBUS部分功能码
代码
中文名称寄存器PLC地址位操作/字操作操作数量
01 读线圈状态00001-09999 位操作单个或多个
02 读离散输入状态10001-19999 位操作单个或多个
03 读保持寄存器40001-49999 字操作单个或多个
04 读输入寄存器30001-39999 字操作单个或多个
05 写单个线圈00001-09999 位操作单个
06 写单个保持寄存器40001-49999 字操作单个
15 写多个线圈00001-09999 位操作多个
16 写多个保持寄存器40001-49999 字操作多个
Modbus功能码一览表
Modbus功能码一览 ________________________________________ Modbus网络是一个工业通信系统由带智能终端的可编程序控制器和计算机通过公用线路 或局部专用线路连接而成。其系统结构既包括硬件、亦包 括软件。它可应用于各种数据采 集和过程监控。下表1是ModBus的功能码定义。 表1 ModBus功能码 功能码 名称 作用 01 读取线圈状态 取得一组逻辑线圈的当前状态ON/OFF) 02 读取输入状态 取得一组开关输入的当前状态ON/OFF) 03 读取保持寄存器 在一个或多个保持寄存器中取得当前的二进制值 04 读取输入寄存器 在一个或多个输入寄存器中取得当前的二进制值 05 强置单线圈 强置一个逻辑线圈的通断状态 06 预置单寄存器 把具体二进值装入一个保持寄存器 07 读取异常状态 取得8个内部线圈的通断状态这8个线圈的地址由控制器决定用 户逻辑可以将这些线圈定义以说明从机状态短 报文适宜于迅速读取状态 08 回送诊断校验 把诊断校验报文送从机以对通信处理进行评鉴 09 编程只用于484 使主机模拟编程器作用修改PC从机逻辑 10 控询只用于484 可使主机与一台正在执行长程序任务从机通信探询该从机是否 已完成其操作任务仅在含有功能码9的报文发送后本功能码才发送 11 读取事件计数 可使主机发出单询问并随即判定操作是否成功尤其是该命令或其 他应答产生通信错误时 12 读取通信事件记录 可是主机检索每台从机的ModBus事务处理通信事件记录。如果 某项事务处理完成记录会给出有关错误 13 编程184/384 484 584 可使主机模拟编程器功能修改PC从机逻辑 14 探询184/384 484 584 可使主机与正在执行任务的从机通信定期控询该从机是否 已完成其程序操作仅在含有功能13的报文发送后本功能码才得发送 15 强置多线圈 强置一串连续逻辑线圈的通断 16 预置多寄存器 把具体的二进制值装入一串连续的保持寄存器 17 报告从机标识 可使主机判断编址从机的类型及该从机运行指示灯的状态 18 884和MICRO 84 可使主机模拟编程功能修改PC状态逻辑 19 重置通信链路 发生非可修改错误后是从机复位于已知状态可重置顺序字节 20 读取通用参数584L 显示扩展存储器文件中的数据信息 21 写入通用参数584L 把通用参数写入扩展存储文件或修改之 2264 保留作扩展功能备用 6572 保留以备用户功能所用 留作用户功能的扩展编码 73119 非法功能 120127 保留 留作内部作用 128255 保留
(完整版)MODBUS协议(功能码及报文解析)
MODBUS协议
Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。M odbus比其他通信协议使用的更广泛的主要原因有:
公开发表并且无版税要求
相对容易的工业网络部署
对供应商来说,修改移动原生的位或字节没有很多限制
Modbus允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和remote terminal unit (RTU)。
Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
大多数Modbus设备通信通过串口EIA-485物理层进行[1]。
对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。这两个变种都使用串行通讯(serial communication)方式。RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。被配置为RTU变种的节点不会和设置为ASCII变种的节点通信,反之亦然。
对于通过TCP/IP(例如以太网)的连接,存在多个Modbus/TCP 变种,这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
Modbus协议和点表
本通讯协议描述了公司GZDW直流屏监控系统在ModbusRTU通讯模式下的信息传输,输入输出命令格式和数据地址的定义,以方便第三方使用和开发,保证信息和数据在上位监控计算机和公司直流屏系统之间有效的传输。
1.物理接口:
1.1串行通讯口采用RS485方式。
1.2信息传输方式采用半双工异步方式,起始位1位,数据位8位,无校验,停止位1位。
1.3数据传输速率为9600bps(默认),存在选项.
1.4在现场总线设备中,GZDW直流屏通讯口作从站.
2.本通讯转换器支持的MODBUSRTU通讯帧结构解释:符合标准ModbusRTU通讯协议格式
每个Modbus通讯帧由以下几个部分组成:
1)地址域
2)功能域
3)数据域
4)校验域
数据发送顺序:
2.1地址域
ModbusRTU从站地址域为一个字节,公司直流屏系统地址固定为0x03,其响应网络数据帧中地址域数据与自身地址相等的数据信息命令。
2.2功能码域
2.3数据域
ModbusRTU通讯协议数据域长度不定,视具体情况而定.数据域中数据采用高字节在前,低字节在后的传输顺序,例如:
一个16位寄存器包含数据为0x12BC,该寄存器数据发送顺序为:
高位字节:0x12
低位字节:0xBC
2.4校验域
公司直流系统ModbusRTU通讯协议采用16位CRC校验,传输时低字节在前,高字节在后
2.5功能域中01命令示例:
01功能码可由上位机发送请求本通讯转换器中的一个或多个线圈(实际输出)状态,返回实际输出点接通/断开状态。
为0-15。例:请求从机设备17 读20-56 线圈。
modbus协议功能码及格式
1、“01”读取线圈状态
发送:
功能代码1字节0x01
开端地点2字节0x0000~0xFFFF
线圈数目2字节 1~2000(0x7D0 )
接收:
功能代码1字节0x01
字节数1字节N
线圈状态n 字节n = N/N+1
N= 读取线圈个数 / 8,假如余数不为0 则 N=N+1
犯错时的返回:
功能代码1字节0x81
错误代码1字节01/02/03/04
例子:
返送: 01 01 0000 00 19 FD C0即:读取 25 个线圈的状态
返回: 01 01 040F 03 80 01 A8 C5
FC BN N1 N2 N3 N4 CRC,N1为前 8 位的状态以此内推。
2、“02”读取输入状态
发送:
功能代码1字节0x02
开端地点2字节0x0000~0xFFFF
输入点数目2字节 1~2000(0x7D0 )接收:
功能代码1字节0x02
字节数1字节N
输入点状态n 字节n = N/N+1
N= 读取输入点个数 / 8,假如余数不为 0 则 N=N+1
犯错时的返回:
功能代码1字节0x82
错误代码1字节01/02/03/04
例子:
发送:
01 02 00 00 00 19 B9 C0
读25 个输入线圈的状态
返回:
01 02 04 00 00 00 00 FB E2
FC BN N1 N2 N3 N4CRC
3、“03”保持型存放器读取
发送:
功能代码1字节 0x03
开端地点2字节 0x0000~0xFFFF
存放器数目2字节 1~125( 0x7D )接收:
功能代码1字节 0x03
字节数1字节 2*N
存放器值 N*2字节
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Modbus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。下表1是ModBus的功能码定义。
表1 ModBus功能码
Modbus网络只是一个主机,所有通信都由他发出。网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。表2是ModBus各功能码对应的数据类型。
表2 ModBus功能码与数据类型对应表
(1)ModBus的传输方式
在ModBus系统中有2种传输模式可选择。这2种传输模式与从机PC通信的能力是同等的。选择时应视所用ModBus主机而定,每个ModBus系统只能使用一种模式,不允许2种模式混用。一种模式是ASCII(美国信息交换码),另一种模式是RT U(远程终端设备)这两种模式的定义见表3
表3 ASCII和RTU传输模式的特性
ASCII可打印字符便于故障检测,而且对于用高级语言(如Fortan)编程的主计算机及主PC很适宜。RTU则适用于机器语言编程的计算机和PC主机。
用RTU模式传输的数据是8位二进制字符。如欲转换为ASCII模式,则每个RTU字符首先应分为高位和低位两部分,这两部分各含4位,然后转换成十六进制等量值。用以构成报文的ASCII字符都是十六进制字符。ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译玛和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器。表4给出了以RTU 方式读取整数据的例子
以RTU方式读取整数据的例子
(2)Modbus的数据校验方式
CRC-16(循环冗余错误校验)
CRC-16错误校验程序如下:报文(此处只涉及数据位,不指起始位、停止位和任选的奇偶校验位)被看作是一个连续的二进制,其最高有效位(MSB)首选发送。报文先与X↑16相乘(左移16位),然后看X↑16+X↑15+X↑2+1除,X↑16+X↑15+X↑2+1可以表示为二进制数1100000000000 0101。整数商位忽略不记,16位余数加入该报文(MSB先发送),成为2个CRC校验字节。余数中的1全部初始化,以免所有的零成为一条报文被接收。经上述处理而含有CR C字节的报文,若无错误,到接收设备后再被同一多项式(X ↑16+X↑15+X↑2+1)除,会得到一个零余数(接收设备核验这个CRC字节,并将其与被传送的CRC比较)。全部运算以2为模(无进位)。
习惯于成串发送数据的设备会首选送出字符的最右位(L SB-最低有效位)。而在生成CRC情况下,发送首位应是被除数的最高有效位MSB。由于在运算中不用进位,为便于
操作起见,计算CRC时设MSB在最右位。生成多项式的位序也必须反过来,以保持一致。多项式的MSB略去不记,因其只对商有影响而不影响余数。
生成CRC-16校验字节的步骤如下:
①装如一个16位寄存器,所有数位均为1。
②该16位寄存器的高位字节与开始8位字节进行“异或”运算。运算结果放入这个16位寄存器。
③把这个16寄存器向右移一位。
④若向右(标记位)移出的数位是1,则生成多项式10100 00000000001和这个寄存器进行“异或”运算;若向右移出的数位是0,则返回③。
⑤重复③和④,直至移出8位。
⑥另外8位与该十六位寄存器进行“异或”运算。
⑦重复③~⑥,直至该报文所有字节均与16位寄存器进行“异或”运算,并移位8次。
⑧这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。
另外,在某些非ModBus通信协议中也经常使用CRC1 6作为校验手段,而且产生了一些CRC16的变种,他们是使用CRC16多项式X↑16+ X↑15+X↑2+1,单首次装入的1 6位寄存器为0000;使用CRC16的反序X↑16+X↑14+X↑1 +1,首次装入寄存器值为0000或FFFFH。
LRC(纵向冗余错误校验)
LRC错误校验用于ASCII模式。这个错误校验是一个8位二进制数,可作为2个ASCII十六进制字节传送。把十六进制字符转换成二进制,加上无循环进位的二进制字符和二进制补码结果生成LRC错误校验(参见图)。这个LRC 在接收设备进行核验,并与被传送的LRC进行比较,冒号(:)、回车符号(CR)、换行字符(LF)和置入的其他任何非ASCII十六进制字符在运算时忽略不计。
表5 LRC生成范例--读取02号从机的前8个线圈