当前位置:首页 >> 信息与通信 >>

modbus协议标准新版


KJB001-2010





一.概述..........................................................................................................................................

.2 二.功能码分类...............................................................................................................................5 三.地址分配及功能码使用...........................................................................................................6 3.1 开关量输出........................................................................................................................6 3.2 3.3 3.4 3.5 开关量输入........................................................................................................................6 模拟量输入........................................................................................................................7 设备标识信息....................................................................................................................7 模拟输出及系统参数........................................................................................................7

3.6 系统参数..........................................................................................................................20 四.功能码描述.............................................................................................................................23 4.1 01(0x01)读线圈................................................................................................................23 4.2 02(0x02)读离散量输入....................................................................................................24 4.3 03(0x03)读保持寄存器....................................................................................................27 4.4 04(0x04)读输入寄存器....................................................................................................29 4.5 05(0x05)写单个线圈........................................................................................................31 4.6 06(0x06)写单个寄存器....................................................................................................33 4.7 15(0x0F)写多个线圈........................................................................................................35 4.8 16(0x10)写多个保持寄存器............................................................................................37 4.9 43/14(0x2B/0x0E)读设备标识........................................................................................39 4.10 65(0x41)读标定参数及相关系统参数..........................................................................41 4.11 66(0x42)写多个标定参数及相关系统参数..................................................................41 五.Modbus 异常响应..................................................................................................................42 六.Modbus 协议在串行链路上的实现规范..............................................................................43 6.1 Modbus 主/从协议原理...................................................................................................43 6.2 Modbus 寻址规则............................................................................................................43 6.3 Modbus 帧描述................................................................................................................43 6.4 主站/从站状态图............................................................................................................44 6.4.1 主站状态图..........................................................................................................44 6.4.2 从站状态图..........................................................................................................45 6.5 串行传输模式.................................................................................................................46 6.5.1 Modbus 报文 RTU 帧...........................................................................................47 6.5.2 CRC 校验..............................................................................................................48

1

KJB001-2010

一.概述
此次 Modbus RTU 通讯协议标准的制定参照 GB/T 19582—2008《基于 Modbus 协议的工 业自动化网络规范》 。协议中规定了功能码的使用和数据地址的分配,Modbus 通讯协议的实 现请参照 GB/T 19582—2008《基于 Modbus 协议的工业自动化网络规范》 。 GB/T 19582—2008 分为三部分: ——第 1 部分:Modbus 应用协议; ——第 2 部分:Modbus 协议在串行链路上的实现指南; ——第 3 部分:Modbus 协议在 TCP/IP 上的实现指南。 第 1 部分描述了 Modbus 事物处理;第 2 部分提供了有助于开发者在串行链路上实现 Modbus 应用层的参考信息;第 3 部分提供了有助于开发者在 TCP/IP 上实现 Modbus 应用层 的参考信息。 GB/T 19582—2008 包括两个通信规程中使用的 Modbus 应用层协议和服务规范: ——串行链路上的 Modbus 基于 TIA/EIA 标准:232—E 和 485—A; ——TCP/IP 上的 Modbus 基于 IETF 标准:RFC793 和 RFC791。 Modbus 是一种请求/应答协议,并提供功能码规定的服务。协议定义了一个与基础通信层无 关的简单协议数据单元(PDU) 。特定总线或网络上的 Modbus 协议映射能够在数据单元 (ADU)上引入一些附加字段,如图 1.1 所示。
ADU

地址字段

功能码
PDU

数据

CRC

图 1.1 通用 Modbus 通讯帧

在一个正确接收的 Modbus ADU 中,如果不出现与请求的 Modbus 功能有关的差错,那 么设备至上位机的相应数据字段包括所要求的数据。如果出现与所要求的 Modbus 功能有关 的差错,那么该字段包括一个异常码。当设备对上位机响应时,它使用功能码字段来只是正 常(无差错)响应(见图 1.2)或出现某中差错(异常响应,见图 1.3)。
上位机 设备

启动请求 功能码 数据请求 执行操作 启动响应 功能码 接收响应 图 1.2 Modbus 事务处理(无差错)
2

数据应答

KJB001-2010 对于正常响应,设备仅复制原始功能码。对于异常响应,设备将请求 PDU 中的原始功能的最 高有效位设置逻辑 1 后返回。
上位机 设备

启动请求 功能码 数据请求 在操作中检测误差 启动误差 异常功能码 接收响应 图 1.3 Modbus 事务处理(异常响应) 异常码

注意:需要超时管理,以免无期限的等待可能不会出现的应答。 串行通讯链路上 Modbus ADU 的长度最大为 256 字节, Modbus PDU=256-设备地址 则 (1 字节)-CRC(2 字节)=253 字节。 Modbus 事务处理: 图 1.4 是 Modbus 事务处理状态图,描述了在设备上 Modbus 事务处理的一般过程。一旦 设备处理请求,就使用相应的 Modbus 事务处理生成 Modbus 响应。根据处理结果,可以建立 两种类型的响应: ——一个正常的 Modbus 响应:响应功能码=请求功能码。 ——一个异常的 Modbus 响应: 1)用来为上位机提供处理过程中与所发现的差错相关的信息; 2)异常功能码=请求功能码+0x80; 3)提供一个异常码来指示差错原因。

3

KJB001-2010

等待 MB 的指示
接收 MB 指示

校验功能码
无效

异常码=1
有效

校验数据地址
无效

异常码=2
有效

校验数据值
无效

异常码=3
有效

执行 MB 功能
无效

异常码=4,5,6
有效

发送 Modbus 异常响应

发送 MB 响应

图 1.4 Modbus 事务处理的状态图

注:MB(Modbus Protocol) —— Modbus 协议。

4

KJB001-2010

二.功能码分类
本协议中规定了 11 种功能码,其功能如表 2.1 所示:

表 2.1 功能码分类表 功能码 01(0x01) 02(0x02) 03(0x03) 04(0x04) 05(0x05) 06(0x06) 15(0x0F) 16(0x10) 43/13(0x2B/0x0E) 65(0x41) 66(0x42) 功能 读线圈 读离散量输入 读保持寄存器 读输入寄存器 写单个线圈 写单个寄存器 写多个线圈 写多个寄存器 读设备标识 自定义 自定义 备注 读开关量输出状态 读开关量输入状态、报警标志 读系统参数、模拟量输出值 读模拟量输入值、报警标志 写单个开关量输出状态 写单个系统参数、模拟量输出值 写多个开关量输出状态 写多个系统参数、模拟量输出值 读设备标识信息 读标定参数及相关系统参数 写多个标定参数及相关系统参数

5

KJB001-2010

三.地址分配及功能码使用
3.1 开关量输出: 功能码 0x01(读)、0x05(写单个 、0x0F(写多个 开关量输出: 写单个)、 写多个) 读、 写单个 写多个 0x0000H 第 1 路开关量输出通道状态 0 表示 OFF,1 表示 ON 0x0001H 第 2 路开关量输出通道状态 0 表示 OFF,1 表示 ON 0x0002H 第 3 路开关量输出通道状态 0 表示 OFF,1 表示 ON 0x0003H 0x0004H ............. 0x002FH 第 4 路开关量输出通道状态 第 5 路开关量输出通道状态 ................................................ 第 48 路开关量输出通道状态 0 表示 OFF,1 表示 ON 0 表示 OFF,1 表示 ON 0 表示 OFF,1 表示 ON 对外公布 0 表示 OFF/低电平,1 表示 ON/高电平 0 表示 OFF/低电平,1 表示 ON/高电平 0 表示 OFF/低电平,1 表示 ON/高电平 0 表示 OFF/低电平,1 表示 ON/高电平 0 表示 OFF/低电平,1 表示 ON/高电平 0 表示 OFF/低电平,1 表示 ON/高电平 0 表示正常,1 表示报警 0 表示正常,1 表示报警 0 表示正常,1 表示报警 0 表示正常,1 表示报警 0 表示正常,1 表示报警 0 表示正常,1 表示报警 对外公布

3.2 开关量输入: 功能码 0x02(读) 开关量输入: 读 0x0000H 第 1 路开关量输入通道状态 0x0001H 第 2 路开关量输入通道状态 0x0002H 0x0003H 0x0004H ............. 0x002FH 0x0030H 0x0031H 0x0032H 0x0033H 0x0034H .............. 0x005FH 第 3 路开关量输入通道状态 第 4 路开关量输入通道状态 第 5 路开关量输入通道状态 ................................................ 第 48 路开关量输入通道状态 第 1 路开关量输入报警标志 第 2 路开关量输入报警标志 第 3 路开关量输入报警标志 第 4 路开关量输入报警标志 第 5 路开关量输入报警标志 .............................................. 第 48 路开关量输入报警标志

6

KJB001-2010 模拟量输入: 3.3 模拟量输入: 功能码 0x04(读) 读 0x0000H 第 1 路模拟量输入通道值 0x0001H 第 2 路模拟量输入通道值 0x0002H 第 3 路模拟量输入通道值 0x0003H 第 4 路模拟量输入通道值 0x0004H ............. 0x002FH 0x0030H 第 5 路模拟量输入通道值 ................................................ 第 48 路模拟量输入通道值 第 1 路模拟量输入报警标志 对外公布 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 00 —— 无报警;01 —— 上限报警; 02 —— 下限报警;03 —— 上上限报警; 04 —— 下下限报警。 0x0031H 0x0032H .............. 0x005FH 第 2 路模拟量输入报警标志 第 3 路模拟量输入报警标志 .............................................. 第 8 路模拟量输入报警标志

3.4 设备标识信息: 设备标识信息: 功能码 0x2B/0x0E 0x00 厂商名称“ColliHigh” 0x01 0x02 0x03 0x04 0x05 产品代码,即序列号 版本号,如“V1.0” 厂商网址“www.klha.cn” 产品名称,如“KL-N4000 Series” 型号名称,如“KL-N4118-20mA-232”

对外公布 ASII 字符串 ASII 字符串 ASII 字符串 ASII 字符串 ASII 字符串 ASII 字符串

3.5 模拟量输出及系统参数 写单个)、 写多个) 功能码 0x03(读)、0x06(写单个 、0x10(写多个 读、 写单个 写多个 0x0000H 第 1 路模拟量输出通道值 16 位整型 0x0001H 0x0002H 0x0003H 0x0004H .............. 0x002FH 第 2 路模拟量输出通道值 第 3 路模拟量输出通道值 第 4 路模拟量输出通道值 第 5 路模拟量输出通道值 ........................................... 第 48 路模拟量输出通道值 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型

对外公布

7

KJB001-2010 串口通讯参数: 0x0030H~0x0032H 串口通讯参数: 0x0030H 设备地址 地址范围:1~247 0x0031H 通讯波特率 编码 01 —— 300bps;02 —— 600bps; 03 —— 1200bps;04 —— 2400bps; 05 —— 4800bps;06 —— 9600bps; 07 09 00 02 —— —— —— —— 19200bps;08 —— 38400bps; 57600bps;0A —— 115200bps。 偶检验(默认);01 —— 奇校验; 无校验,2 个停止位;

0x0032H

串口通讯帧格式

编码

03 —— 无校验,1 个停止位。 0x0033H~0x003FH 网络通讯参数: 网络通讯参数: 0x0033H 设备网关低两位 低位在前高位在后 0x0034H 设备网关高两位 低位在前高位在后 例如:网关为 192.168.0.1 0x0033H 中的内容为 0x0100 0x0034H 中的内容为 0xA8C0 低位在前高位在后 低位在前高位在后 例如:子网掩码为 123.111.211.1 0x0035H 中的内容为 0x01D3 0x0036H 中的内容为 0x6F7B 低位在前高位在后 低位在前高位在后 例如:网关为 192.168.47.123 0x0037H 中的内容为 0x7B2F 0x0038H 中的内容为 0xA8C0 低位在前高位在后 低位在前高位在后 例如:网关为 211.100.8.14 0x0039H 中的内容为 0x0E08 0x003AH 中的内容为 0x64D3 16 位整型 0 —— TCP;1 —— UDP。 0 —— CMNET;1 —— CMWAP。

0x0035H 0x0036H

设备子网掩码低两位 设备子网掩码高两位

0x0037H 0x0038H

设备 IP 低两位 设备 IP 高两位

0x0039H 0x003AH

服务器 IP 低两位 服务器 IP 高两位

0x003BH 0x003CH 0x003DH 0x003EH 0x003FH

服务器端口 设备通讯模式 APN 预留 预留

8

KJB001-2010 0x0040H 0x0041H 0x0042H 0x0043H 0x0044H .............. 0x005FH AD 滤波参数 系统睡眠时间 系统工作时间 系统参数恢复出厂设置 预留 预留 16 位整型 16 位整型 16 位整型 0 — 不恢复参数;1 — 恢复参数。

0x0060H~0x065FH 模拟量输入通道参数: 模拟量输入通道参数: 0x0060H 0x0061H 0x0062H 0x0063H .............. 0x008FH 0x0090H 0x0091H 0x0092H 0x0093H .............. 0x00BFH 0x00C0H 0x00C1H 0x00C2H 0x00C3H .............. 0x00EFH 0x00F0H 0x00F1H 0x00F2H 0x00F3H ............... 0x011FH 第 1 路模拟量输入通道量程零点 第 2 路模拟量输入通道量程零点 第 3 路模拟量输入通道量程零点 第 4 路模拟量输入通道量程零点 .......................................................... 第 48 路模拟量输入通道量程零点 第 1 路模拟量输入通道量程满度 第 2 路模拟量输入通道量程满度 第 3 路模拟量输入通道量程满度 第 4 路模拟量输入通道量程满度 .......................................................... 第 48 路模拟量输入通道量程满度 第 1 路模拟量输入通道报警上限 第 2 路模拟量输入通道报警上限 第 3 路模拟量输入通道报警上限 第 4 路模拟量输入通道报警上限 ......................................................... 第 48 路模拟量输入通道报警上限 第 1 路模拟量输入通道报警下限 第 2 路模拟量输入通道报警下限 第 3 路模拟量输入通道报警下限 第 4 路模拟量输入通道报警下限 ........................................................... 第 48 路模拟量输入通道报警下限 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型

9

KJB001-2010 0x0120H 0x0121H 0x0122H 0x0123H .............. 0x014FH 0x0150H 0x0151H 0x0152H 0x0153H .............. 0x017FH 0x0180H 0x0181H 0x0182H 0x0183H .............. 0x01AFH 0x01B0H 0x01B1H 0x01B2H 0x01B3H ............... 0x01DFH 0x01E0H 0x01E1H 0x01E2H 0x01E3H ............... 0x020FH 第 1 路模拟量输入通道报警上上限 第 2 路模拟量输入通道报警上上限 第 3 路模拟量输入通道报警上上限 第 4 路模拟量输入通道报警上上限 ............................................................ 第 48 路模拟量输入通道报警上上限 第 1 路模拟量输入通道报警下下限 第 2 路模拟量输入通道报警下下限 第 3 路模拟量输入通道报警下下限 第 4 路模拟量输入通道报警下下限 .............................................................. 第 48 路模拟量输入通道报警下下限 第 1 路模拟量输入通道报警回差值 第 2 路模拟量输入通道报警回差值 第 3 路模拟量输入通道报警回差值 第 4 路模拟量输入通道报警回差值 ............................................................. 第 48 路模拟量输入通道报警回差值 第 1 路模拟量输入通道报警使能 第 2 路模拟量输入通道报警使能 第 3 路模拟量输入通道报警使能 第 4 路模拟量输入通道报警使能 .......................................................... 第 48 路模拟量输入通道报警使能 第 1 路模拟量输入通道报警锁存 第 2 路模拟量输入通道报警锁存 第 3 路模拟量输入通道报警锁存 第 4 路模拟量输入通道报警锁存 .......................................................... 第 48 路模拟量输入通道报警锁存 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 0 — 不使能;1 — 使能报警。 0 — 不使能;1 — 使能报警。 0 — 不使能;1 — 使能报警。 0 — 不使能;1 — 使能报警。 0 — 不使能;1 — 使能报警。 0 — 不锁存;1 — 锁存报警。 0 — 不锁存;1 — 锁存报警。 0 — 不锁存;1 — 锁存报警。 0 — 不锁存;1 — 锁存报警。 0 — 不锁存;1 — 锁存报警。

10

KJB001-2010 0x0210H 0x0211H 0x0212H 0x0213H .............. 0x023FH 0x0240H 第 1 路模拟量输入通道偏移量 第 2 路模拟量输入通道偏移量 第 3 路模拟量输入通道偏移量 第 4 路模拟量输入通道偏移量 ...................................................... 第 48 路模拟量输入通道偏移量 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型

第 1 模拟量输入通道上限报警联动 1~16 路继电器 0 表示联动;1 表示不联动 低通道号对应低位: 低字节位 0 代表第 1 通道; 7 代表第 8 位 通道,高字节位 0 代表第 9 通道;位 7 代表第 16 通道。

0x0241H 0x0242H 0x0243H .............. 0x026FH 0x0270H

第 2 模拟量输入通道上限报警联动 1~16 路继电器 第 3 模拟量输入通道上限报警联动 1~16 路继电器 第 4 模拟量输入通道上限报警联动 1~16 路继电器 ....................................................................................... 第 48 模拟量输入通道上限报警联动 1~16 路继电器 第 1 模拟量输入通道上限报警联动 17~32 路继电器 0 表示联动;1 表示不联动 低通道号对应低位: 低字节位 0 代表第 17 通道;位 7 代表第 24 通道,高字节位 0 代表第 25 通道; 位 7 代表第 32 通道。 第 2 模拟量输入通道上限报警联动 17~32 路继电器 第 3 模拟量输入通道上限报警联动 17~32 路继电器 第 4 模拟量输入通道上限报警联动 17~32 路继电器 ............................................................................................ 第 48 模拟量输入通道上限报警联动 17~32 路继电器 第 1 模拟量输入通道上限报警联动 33~48 路继电器 0 表示联动;1 表示不联动 低字节位 0 代表第 33 通道;位 7 代表第 40 通道,高字节位 0 代表第 41 通道; 位 7 代表第 48 通道。 第 2 模拟量输入通道上限报警联动 33~48 路继电器 第 3 模拟量输入通道上限报警联动 33~48 路继电器
11

0x0271H 0x0272H 0x0273H .............. 0x029FH 0x02A0H

0x02A1H 0x02A2H

KJB001-2010 0x02A3H ............... 0x02CFH 0x02D0H 0x02D1H 0x02D2H 0x02D3H ............... 0x02FFH 0x0300H 0x0301H 0x0302H 0x0303H .............. 0x032FH 0x0330H 0x0331H 0x0332H 0x0333H .............. 0x035FH 0x0360H 0x0360H 0x0360H 0x0360H .............. 0x038FH 0x0390H 0x0391H 0x0392H 0x0393H ............... 0x03BFH 第 4 模拟量输入通道上限报警联动 33~48 路继电器 .......................................................................................... 第 48 模拟量输入通道上限报警联动 33~48 路继电器 第 1 模拟量输入通道下限报警联动 1~16 路继电器 第 2 模拟量输入通道下限报警联动 1~16 路继电器 第 3 模拟量输入通道下限报警联动 1~16 路继电器 第 4 模拟量输入通道下限报警联动 1~16 路继电器 ........................................................................................ 第 48 模拟量输入通道下限报警联动 1~16 路继电器 第 1 模拟量输入通道下限报警联动 17~32 路继电器 第 2 模拟量输入通道下限报警联动 17~32 路继电器 第 3 模拟量输入通道下限报警联动 17~32 路继电器 第 4 模拟量输入通道下限报警联动 17~32 路继电器 .......................................................................................... 第 48 模拟量输入通道下限报警联动 17~32 路继电器 第 1 模拟量输入通道下限报警联动 33~48 路继电器 第 2 模拟量输入通道下限报警联动 33~48 路继电器 第 3 模拟量输入通道下限报警联动 33~48 路继电器 第 4 模拟量输入通道下限报警联动 33~48 路继电器 ......................................................................................... 第 48 模拟量输入通道下限报警联动 33~48 路继电器 第 1 模拟量输入通道上上限报警联动 1~16 路继电器 第 2 模拟量输入通道上上限报警联动 1~16 路继电器 第 3 模拟量输入通道上上限报警联动 1~16 路继电器 第 4 模拟量输入通道上上限报警联动 1~16 路继电器 ............................................................................................ 第 48 模拟量输入通道上上限报警联动 1~16 路继电器 第 1 模拟量输入通道上上限报警联动 17~32 路继电器 第 2 模拟量输入通道上上限报警联动 17~32 路继电器 第 3 模拟量输入通道上上限报警联动 17~32 路继电器 第 4 模拟量输入通道上上限报警联动 17~32 路继电器 .............................................................................................. 第 48 模拟量输入通道上上限报警联动 17~32 路继电器
12

KJB001-2010 0x03C0H 0x03C1H 0x03C2H 0x03C3H ............... 0x03EFH 0x03F0H 0x03F1H 0x03F2H 0x03F3H ............... 0x041FH 0x0420H 0x0421H 0x0422H 0x0423H .............. 0x044FH 0x0450H 0x0451H 0x0452H 0x0453H .............. 0x047FH 第 1 模拟量输入通道上上限报警联动 33~48 路继电器 第 2 模拟量输入通道上上限报警联动 33~48 路继电器 第 3 模拟量输入通道上上限报警联动 33~48 路继电器 第 4 模拟量输入通道上上限报警联动 33~48 路继电器 ............................................................................................. 第 48 模拟量输入通道上上限报警联动 33~48 路继电器 第 1 模拟量输入通道下下限报警联动 1~16 路继电器 第 2 模拟量输入通道下下限报警联动 1~16 路继电器 第 3 模拟量输入通道下下限报警联动 1~16 路继电器 第 4 模拟量输入通道下下限报警联动 1~16 路继电器 ............................................................................................ 第 48 模拟量输入通道下下限报警联动 1~16 路继电器 第 1 模拟量输入通道下下限报警联动 17~32 路继电器 第 2 模拟量输入通道下下限报警联动 17~32 路继电器 第 3 模拟量输入通道下下限报警联动 17~32 路继电器 第 4 模拟量输入通道下下限报警联动 17~32 路继电器 ............................................................................................. 第 48 模拟量输入通道下下限报警联动 17~32 路继电器 第 1 模拟量输入通道下下限报警联动 33~48 路继电器 第 2 模拟量输入通道下下限报警联动 33~48 路继电器 第 3 模拟量输入通道下下限报警联动 33~48 路继电器 第 4 模拟量输入通道下下限报警联动 33~48 路继电器 .............................................................................................. 第 48 模拟量输入通道下下限报警联动 33~48 路继电器

0x0480H~0x065FH 预留

13

KJB001-2010 开关量输入通道参数: 0x0660H~0x095FH 开关量输入通道参数: 0x0660H 第 1 路开关量输入通道报警状态 0x0661H 第 2 路开关量输入通道报警状态 0x0662H 第 3 路开关量输入通道报警状态 0x0663H 第 4 路开关量输入通道报警状态 .............. 0x068FH 0x0690H 0x0691H 0x0692H 0x0693H .............. 0x06BFH 0x06C0H 0x06C1H 0x06C2H 0x06C3H ............... 0x06EFH 0x06F0H .......................................................... 第 48 路开关量输入通道报警状态 第 1 路开关量输入通道报警使能 第 2 路开关量输入通道报警使能 第 3 路开关量输入通道报警使能 第 4 路开关量输入通道报警使能 .......................................................... 第 48 路开关量输入通道报警使能 第 1 路开关量输入通道报警锁存 第 2 路开关量输入通道报警锁存 第 3 路开关量输入通道报警锁存 第 4 路开关量输入通道报警锁存 .......................................................... 第 48 路开关量输入通道报警锁存

0—闭合/低电平报警;1—断开/高电平报警 0—闭合/低电平报警;1—断开/高电平报警 0—闭合/低电平报警;1—断开/高电平报警 0—闭合/低电平报警;1—断开/高电平报警 0—闭合/低电平报警;1—断开/高电平报警 0—不使能报警;1—使能报警 0—不使能报警;1—使能报警 0—不使能报警;1—使能报警 0—不使能报警;1—使能报警 0—不使能报警;1—使能报警 0—不锁存报警;1—锁存报警 0—不锁存报警;1—锁存报警 0—不锁存报警;1—锁存报警 0—不锁存报警;1—锁存报警 0—不锁存报警;1—锁存报警

第 1 路开关量输入通道报警联动 1~16 路继电器 0 表示联动;1 表示不联动 低通道号对应低位: 低字节位 0 代表第 1 通道; 7 代表第 8 位 通道,高字节位 0 代表第 9 通道;位 7 代表第 16 通道。

0x06F1H 0x06F2H 0x06F3H ............... 0x071FH 0x0720H

第 2 路开关量输入通道报警联动 1~16 路继电器 第 3 路开关量输入通道报警联动 1~16 路继电器 第 4 路开关量输入通道报警联动 1~16 路继电器 .................................................................................... 第 48 路开关量输入通道报警联动 1~16 路继电器 第 1 路开关量输入通道报警联动 17~32 路继电器 0 表示联动;1 表示不联动 低通道号对应低位: 低字节位 0 代表第 17 通道;位 7 代表第
14

KJB001-2010 24 通道,高字节位 0 代表第 25 通道; 位 7 代表第 32 通道。 第 2 路开关量输入通道报警联动 17~32 路继电器 第 3 路开关量输入通道报警联动 17~32 路继电器 第 4 路开关量输入通道报警联动 17~32 路继电器 ...................................................................................... 第 48 路开关量输入通道报警联动 17~32 路继电器 第 1 路开关量输入通道报警联动 33~48 路继电器 0 表示联动;1 表示不联动 低字节位 0 代表第 33 通道;位 7 代表第 40 通道,高字节位 0 代表第 41 通道; 位 7 代表第 48 通道。 0x0751H 0x0752H 0x0753H .............. 0x077FH 第 2 路开关量输入通道报警联动 33~48 路继电器 第 3 路开关量输入通道报警联动 33~48 路继电器 第 4 路开关量输入通道报警联动 33~48 路继电器 ...................................................................................... 第 48 路开关量输入通道报警联动 33~48 路继电器

0x0721H 0x0722H 0x0723H ............... 0x074FH 0x0750H

0x0780H~0x095FH 预留

0x0960H~0x098FH 开关量输出通道参数: 开关量输出通道参数: 0x0960H 0x0961H 0x0962H 0x0963H .............. 0x098FH 第 1 路继电器输出控制标志 第 2 路继电器输出控制标志 第 3 路继电器输出控制标志 第 4 路继电器输出控制标志 ............................................... 第 48 路继电器输出控制标志 0 表示远程控制;1 表示联动控制 0 表示远程控制;1 表示联动控制 0 表示远程控制;1 表示联动控制 0 表示远程控制;1 表示联动控制 0 表示远程控制;1 表示联动控制

0x0990H~0x09BFH 压力变送器专用:48 个 压力变送器专用: 0x0990H 信道 16 位整型

15

KJB001-2010 超声波变送器专用: 0x09C0H~0x0A3FH 超声波变送器专用:128 个 0x09C0H 测量方式 0 表示测量物位高度;1 表示测量物位距离。 0x09C1H 修正值 16 位整型 0x09C2H 滤波次数 16 位整型 3~9 0x09C3H 零点输出 16 位整型 0x09C4H 0x09C5H 0x09C6H 0x09C7H 0x09C8H 0x09C9H 0x09CAH 0x09CBH 0x09CCH 0x09CDH 0x09CEH 0x09CFH 0x09D0H 0x09D1H 0x09D2H 0x09D3H 0x09D4H 0x09D5H 0x09D6H 0x09D7H 0x09D8H 0x09D9H 0x09DAH 0x09DBH 0x09DCH 0x09DDH 0x09DEH 0x09DFH 0x09E0H 0x09E1H 0x09E2H 0x09E3H 0x09E4H 满度输出 故障输出 温度显示选择 波数显示选择 波值显示选择 接收范围选择 近端距离 远端距离 通讯协议 接收模式 发射频率 发射模式 发射强度 1 发射强度 2 发射强度 3 发射强度 4 发射强度 5 发射强度 6 发射强度 7 发射强度 8 发射强度 9 发射强度 10 接收灵敏度 1 接收灵敏度 2 接收灵敏度 3 接收灵敏度 4 接收灵敏度 5 接收灵敏度 6 接收灵敏度 7 接收灵敏度 8 接收灵敏度 9 接收灵敏度 10 比较电平值 16 位整型 16 位整型 0 表示液晶不显示温度;1 表示液晶显示温度。 0 表示液晶不显示波数;1 表示液晶显示波数。 0 表示液晶不显示波值;1 表示液晶显示波值。 0 表示液晶不显示接收范围;1 表示液晶显示接收范围。 16 位整型 16 位整型 16 位整型 0 表示“模式 1” 表示“模式 2” ;1 。 16 位整型 0 表示“模式 1” 表示“模式 2” ;1 。 16 位整型 0~16 16 位整型 0~16 16 位整型 0~16 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型
16

0~16 0~16 0~16 0~16 0~16 0~16 0~16 0~9 0~9 0~9 0~9 0~9 0~9 0~9 0~9 0~9 0~9

KJB001-2010 0x09E5H 0x09E6H 0x09E7H 0x09E8H 0x09E9H 0x09EAH 0x09EBH ............... 0x0A3FH 波形宽度 测量介质 背光延时时间 安装高度 高度设置 低位设置 预留 ................ 预留 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型

0x0A40H~0x0ABFH 油、水液面变送器专用:128 个 水液面变送器专用: 0x0A40H 输出方式 0 — 测量物位高度;1 — 测量物位距离。 0x0A41H 探极数量 16 位整型 0~40 0x0A42H 0x0A43H 0x0A44H 0x0A45H 0x0A46H 0x0A47H 0x0A48H 0x0A49H 0x0A4AH 0x0A4BH 0x0A4CH 0x0A4DH 0x0A4EH 0x0A4FH 0x0A50H 0x0A51H 0x0A52H 0x0A53H 0x0A54H 0x0A55H 0x0A56H 0x0A57H 起始探极 结束探极 零点设置 满度设置 修正值 启动延时 峰值延时 均值延时 整定延时 滤波次数 测量介质 油气正常值 油气最小值 油水正常值 油水最小值 一级增益 二级增益 探极长度 单个探极 中间探极 工作频率 工作模式 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 0~9 0~9 0~40 0~40

0~99

16 位整型 16 位整型 0 —“模式 1” ;1 —“模式 2” 。
17

KJB001-2010 0x0A58H 0x0A59H 0x0A5AH 0x0A5BH ................ 0x0A7FH 0x0A80H 0x0A81H 0x0A82H 系数修正值 1 系数修正值 2 系数修正值 3 系数修正值 4 ....................... 系数修正值 40 自整定使能 干扰探极 空气电压值 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 0 — 不使能自整定;1 — 使能自整定。 16 位整型 0~99 16 位整型 16 位整型 16 位整型

0x0A83H 满油电压值 0x0A84H 背光延时时间 0x0A86H~0x0ABFH 预留

0x0AC0H~0x0FFFH GPRS 数据采集模块专用:1344 个 数据采集模块专用: 0x0AC0H~0x0BBFH 服务器域名 16 位整型 0x0BC0H GPRS 最大在线时间 16 位整型 0x0BC1H 0x0BC2H 0x0BC3H 0x0BC4H 0x0BC5H 0x0BC6H 0x0BC7H 0x0BC8H 0x0BC9H 0x0BCAH 0x0BCBH 0x0BCCH 0x0BCDH 0x0BCEH 0x0BCFH 0x0BD0H 0x0BD1H 0x0BD2H 0x0BD3H ............... 0x0C2EH 0x0C2FH GPRS 最大离线时间 电话申请的时间长度 设备工作模式 设备自动操作和数据传输模式 短信群发标志 群发模式下要处理的号码序号 预留 预留 预留 预留 预留 预留 预留 预留 预留 第 1 路模拟量输入通道基准零点 第 1 路模拟量输入通道基准满度 第 2 路模拟量输入通道基准零点 第 2 路模拟量输入通道基准满度 ......................................................... 第 48 路模拟量输入通道基准零点 第 48 路模拟量输入通道基准满度
18

256 字节

16 位整型 16 位整型 16 位整型 16 位整型 0 表示按通道发送;1 表示群发。 16 位整型

16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型

KJB001-2010

0x0C30H~0x0C37H 0x0C38H~0x0C3FH 0x0C40H~0x0C47H 0x0C48H~0x0C4FH 0x0C50H~0x0C57H 0x0C58H~0x0C5FH 0x0C60H~0x0C67H 0x0C68H~0x0C6FH 0x0C70H~0x0C77H 0x0C78H~0x0C7FH 0x0C80H~0x0C87H 0x0C88H~0x0C8FH 0x0C90H~0x0CAFH 0x0CB0H~0x0CCFH 0x0CD0H~0x0CEFH 0x0CF0H~0x0D0FH 0x0D10H~0x0D2FH 0x0D30H~0x0D4FH 0x0D50H~0x0D6FH 0x0D70H~0x0D8FH 0x0D90H~0x0FFFH

短信号码 1 短信号码 2 短信号码 3 短信号码 4 短信号码 5 短信号码 6 短信号码 7 短信号码 8 语音电话号码 1 语音电话号码 2 语音电话号码 3 语音电话号码 4 短信息内容 1 短信息内容 2 短信息内容 3 短信息内容 4 短信息内容 5 短信息内容 6 短信息内容 7 短信息内容 8 预留

16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型

0x1000H~0x10FFH 以太网数据采集模块专用:256 个 以太网数据采集模块专用:

0x1100H~0x11FFH Zigbee 模块专用:256 个 模块专用: 0x1100H 无线频点 16 位整型 0x1101H 0x1102H 0x1103H 0x1104H 无线发射功率 网络类型 节点类型 网络编号 16 位整型 16 位整型 16 位整型 16 位整型

模块专用: 0x1200H~0x12FFH WiFi 模块专用:256 个
19

KJB001-2010 3.6 系统参数 0x0000H 0x0001H 0x0002H 0x0003H .............. 0x002FH 0x0030H 0x0031H 0x0032H 0x0033H ............... 0x005FH 写多个) 功能码 0x41(读)、0x42(写多个 读、 写多个 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 不对外公布

第 1 路模拟量输入通道 AD 标定点 1 第 2 路模拟量输入通道 AD 标定点 1 第 3 路模拟量输入通道 AD 标定点 1 第 4 路模拟量输入通道 AD 标定点 1 ................................................................ 第 48 路模拟量输入通道 AD 标定点 1 第 1 路模拟量输入通道 AD 标定点 2 第 2 路模拟量输入通道 AD 标定点 2 第 3 路模拟量输入通道 AD 标定点 2 第 4 路模拟量输入通道 AD 标定点 2 ................................................................. 第 48 路模拟量输入通道 AD 标定点 2

.......................................................................................................................... 0x02D0H 0x02D1H 0x02D2H 0x02D3H ............... 0x02FFH 0x0300H 0x0301H 0x0302H 0x0303H ............... 0x032FH 0x0330H 0x0331H 0x0332H 0x0333H .............. 0x035FH 第 1 路模拟量输入通道 AD 标定点 16 第 2 路模拟量输入通道 AD 标定点 16 第 3 路模拟量输入通道 AD 标定点 16 第 4 路模拟量输入通道 AD 标定点 16 ................................................................... 第 48 路模拟量输入通道 AD 标定点 16 第 1 路模拟量输出通道 DA 标定点 1 第 2 路模拟量输出通道 DA 标定点 1 第 3 路模拟量输出通道 DA 标定点 1 第 4 路模拟量输出通道 DA 标定点 1 ................................................................. 第 48 路模拟量输出通道 DA 标定点 1 第 1 路模拟量输出通道 DA 标定点 2 第 2 路模拟量输出通道 DA 标定点 2 第 3 路模拟量输出通道 DA 标定点 2 第 4 路模拟量输出通道 DA 标定点 2 ................................................................ 第 48 路模拟量输出通道 DA 标定点 2 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型

20

KJB001-2010 ................................................................................................................... 16 位整型 0x05D0H 第 1 路模拟量输出通道 DA 标定点 16 0x05D1H 第 2 路模拟量输出通道 DA 标定点 16 16 位整型 0x05D2H 第 3 路模拟量输出通道 DA 标定点 16 16 位整型 0x05D3H 第 4 路模拟量输出通道 DA 标定点 16 16 位整型 ............... 0x05FFH 0x0600H 0x0601H 0x0602H 0x0603H 0x0604H .............. 0x061FH 0x0620H 0x0621H 0x0622H 0x0623H ............... 0x064FH 0x0650H 0x0651H 0x0652H 0x0653H .............. 0x067FH 0x0680H ................................................................... 第 48 路模拟量输出通道 DA 标定点 16 开关量输入通道数 开关量输出通道数 模拟量输入通道数 模拟量输出通道数 预留 ....... 预留 第 1 路模拟量输入通道量程零点 第 2 路模拟量输入通道量程零点 第 3 路模拟量输入通道量程零点 第 4 路模拟量输入通道量程零点 ......................................................... 第 48 路模拟量输入通道量程零点 第 1 路模拟量输入通道量程满度 第 2 路模拟量输入通道量程满度 第 3 路模拟量输入通道量程满度 第 4 路模拟量输入通道量程满度 .......................................................... 第 48 路模拟量输入通道量程满度 第 1 路模拟量输入通道类型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型 编码 00 —— 4~20mA;01 —— 0~20mA; 02 —— 0~10mA;03 —— 0~5V; 04 —— 0~10V;05 —— PT100; 06 —— 0~100mV。 编码 编码 编码 16 位整型 16 位整型 16 位整型 16 位整型 16 位整型

0x0681H 0x0682H 0x0683H ..............

第 2 路模拟量输入通道类型 第 3 路模拟量输入通道类型 第 4 路模拟量输入通道类型 ..................................................
21

KJB001-2010 0x06AFH 第 48 路模拟量输入通道类型 0x06B0H~0x06BFH 产品系列号 编码

0x1000H~0x10FFH 压力变送器专用:256 个 压力变送器专用: 0x1100H~0x11FFH 超声波变送器专用:256 个 超声波变送器专用: 0x1200H~0x12FFH 油、水液面变送器专用:256 个 水液面变送器专用: 0x1300H~0x13FFH GPRS 采集模块专用:256 个 采集模块专用: 0x1400H~0x14FFH 以太网专用:256 个 以太网专用: 0x1500H~0x15FFH Zigbee 模块专用:256 个 模块专用: 0x1600H~0x16FFH WiFi 模块专用:256 个 模块专用 专用:

22

KJB001-2010

四.功能码描述
4.1 01(0x01)读线圈 读线圈 功能码 01(0x01)用于读开关量(继电器)输出通道状态,如图 4.1 和表 4.1~4.3 所示:
表 4.1 读线圈请求

功能码 起始地址 线圈数量 功能码 字节计数 线圈状态

1 字节 2 字节 2 字节
表 4.2 读线圈响应

0x01 0x0000~0xFFFF 1~2000(0x7D0) 0x01 N n=N 或 N+1

1 字节 1 字节 n 字节

N=输出数量/8,若余数不等于 0,则 N=N+1 表 4.3 读线圈错误响应

异常功能码 异常码

1 字节 1 字节

功能码+0x80 01 或 02 或 03 或 04

开始 否

设备接收 Modbus 请求

支持的功能码 异常码=01 否 0x0001<=输出数量<=0x07D0 异常码=03 否 是 起始地址=OK 并且 起始地址+输出数量=OK 是 处理请求 否 异常码=04 读取离散量输出=OK 是 设备发送 Modbus 异常响应 退出 图 4.1 读线圈状态图
23



异常码=02

设备发送 Modbus 响应

KJB001-2010 该功能码可从设备中读 1~2000 个连续的线圈状态。请求 PDU 指定了起始地址,即指定 了第一个线圈地址和线圈数目。在 PDU 中,从零开始寻址线圈,因此编号为 1~16 的线圈寻 址为 0~15。 响应报文中的线圈按数据字段的每位一个线圈进行打包。状态被表示成 1=ON/高电平和 0=OFF/低电平。第一个数据字节的 LSB(最低有效位)包含询问中所寻址的输出。其他线圈依 次类推,一直到这个字节的高位端为止,并在后续字节中按照从低位到高位的顺序排列。 若返回的输出数量不是 8 的倍数,将用零填补最后数据字节中的剩余位(一直到字节的高 位端)。字节计数字段指定了数据的全部字节数。 表 4.4 是一个请求读数字量输出 20~38 的示例。
表 4.4 读数字量输出

请求 字段名 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 十六进制 01 00 13 00 13 功能 字节计数 字段名

响应 十六进制 01 03 CD 6B 05

输出状态 27~20 输出状态 35~28 输出状态 28~36

将输出 27~20 的状态表示为十六进制字节值 CD, 或二进制 1100 1101。 输出 27 是这个字 节的 MSB(最高有效位),输出 20 是 LSB(最低有效位)。 通常, 一个字节的 MSB 位于左侧, LSB 位于右侧。 第一个字节的输出从左到右为 27~20。 下一个字节的输出从左到右为 35~28。当串行发送这些位时,从 LSB 向 MSB 传输:20~27、 28~35 等等。 在最后的数据字节中,将输出 38~36 的状态表示为十六进制字节值 05,回二进制 0000 0101。输出 38 是左侧第六个位位置,输出 36 是这个字节的 LSB。用零填充 5 个剩余高位位。 注:用零填充 5 个剩余位(一直到高端)。

24

KJB001-2010 4.2 02(0x02)读离散量输入 读离散量输入 功能码 02(0x02)用于读开关量输入通道状态,如图 4.2 和表 4.5~4.7 所示:
表 4.5 读线圈请求

功能码 起始地址 输入数量 功能码 字节计数 输入状态

1 字节 2 字节 2 字节
表 4.6 读线圈响应

0x02 0x0000~0xFFFF 1~2000(0x7D0) 0x02 N .......

1 字节 1 字节 N*1 字节

N=输出数量/8,若余数不等于 0,则 N=N+1 表 4.7 读线圈错误响应

异常功能码 异常码

1 字节 1 字节

功能码+0x80 01 或 02 或 03 或 04

开始 否

设备接收 Modbus 请求

支持的功能码 异常码=01 否 0x0001<=输出数量<=0x07D0 异常码=03 否 是 起始地址=OK 并且 起始地址+输入数量=OK 是 处理请求 否 异常码=04 读取离散量输入=OK 是 设备发送 Modbus 异常响应 退出 图 4.2 读线圈状态图 设备发送 Modbus 响应 是

异常码=02

25

KJB001-2010 该功能码可从设备中读 1~2000 个连续的离散量输入状态。请求 PDU 指定了起始地址, 即指定了第一个离散量输入地址和离散量输入数目。在 PDU 中,从零开始寻址离散量输入, 因此编号为 1~16 的离散量输入寻址为 0~15。 响应报文中的离散量输入按数据字段的每位一个离散量输入进行打包。状态被表示成 1=ON/高电平和 0=OFF/低电平。第一个数据字节的 LSB(最低有效位)包含询问中所寻址的输 入。其他离散量输入依次类推,一直到这个字节的高位端为止,并在后续字节中按照从低位 到高位的顺序排列。 若返回的输入数量不是 8 的倍数,将用零填补最后数据字节中的剩余位(一直到字节的高 位端)。字节计数字段指定了数据的全部字节数。 表 4.8 是一个请求读离散量输入 197~218 的示例。
表 4.8 读离散量输入

请求 字段名 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 十六进制 02 00 C4 00 16 功能 字节计数 字段名

响应 十六进制 02 03 AC DB 35

输入状态 204~197 输入状态 212~205 输入状态 218~213

将离散量输入 204~197 的状态表示为十六进制字节值 AC, 或二进制 1010 1100。 输入 204 是这个字节的 MSB,输入 197 是 LSB。 将离散量输入 218~213 的状态表示为十六进制字节值 35,或二进制 0011 0101。输入 218 位于左侧第 3 位,输入 213 是 LSB。 注:用零填充 2 个剩余位(一直到高端)。

26

KJB001-2010 4.3 03(0x03)读保持寄存器 读保持寄存器 功能码 03(0x03)用于读系统参数、模拟量输出值,如图 4.3 和表 4.9~4.11 所示:
表 4.9 读保存寄存器

功能码 起始地址 寄存器数量 功能码 字节计数 输入状态

1 字节 2 字节 2 字节 1 字节 1 字节 N*2 字节

0x03 0x0000~0xFFFF 1~125(0x07D) 0x03 N*2 .......

表 4.10 读保存寄存器响应

N=保持寄存器的数量 表 4.11 读保持寄存器错误响应

异常功能码 异常码

1 字节 1 字节

功能码+0x80 01 或 02 或 03 或 04

开始 否

设备接收 Modbus 请求

支持的功能码 异常码=01 否 0x0001<=输出数量<=0x007D 异常码=03 否 是 起始地址=OK 并且 起始地址+数量=OK 是 处理请求 否 异常码=04 读多个寄存器=OK 是 设备发送 Modbus 异常响应 退出 图 4.3 读保持寄存器状态图 设备发送 Modbus 响应 是

异常码=02

27

KJB001-2010 该功能码可从设备中连续读 125 个保持寄存器的内容。 请求 PDU 指定了起始寄存器地址 和寄存器数量。 PDU 中, 在 从零开始寻址寄存器, 因此编号为 1~16 的寄存器被寻址为 0~15。 将响应报文中的寄存器数据按每个寄存器两字节进行打包,这个二进制内容正好填满每 个字节。对于每个寄存器,第一个字节包括高位位,第二个字节包括低位位。 表 4.12 是一个请求读保存寄存器 108~110 的示例。
表 4.12 读保存寄存器

请求 字段名 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 十六进制 03 00 6B 00 03 功能 字节计数 字段名

响应 十六进制 03 06 02 2B 00 00 00 64

寄存器值 Hi(108) 寄存器值 Lo(108) 寄存器值 Hi(109) 寄存器值 Lo(109) 寄存器值 Hi(110) 寄存器值 Lo(110)

将寄存器 108 的内容表示为两个十六进制字节值 02 2B, 或十进制 555。 将寄存器 109~110 的内容分别表示为十六进制字节值 00 00 和 00 64,或十进制 0 和 100。

28

KJB001-2010 4.4 04(0x04)读输入寄存器 读输入寄存器 功能码 04(0x04)用于读模拟量输入值、报警标志,如图 4.4 和表 4.13~4.15 所示:
表 4.13 读输入寄存器

功能码 起始地址 寄存器数量 功能码 字节计数 输入状态

1 字节 2 字节 2 字节 1 字节 1 字节 N*2 字节

0x04 0x0000~0xFFFF 1~125(0x007D) 0x04 N*2 .......

表 4.14 读输入寄存器响应

N=输入寄存器的数量 表 4.15 读输入寄存器错误响应

异常功能码 异常码

1 字节 1 字节

功能码+0x80 01 或 02 或 03 或 04

开始 否

设备接收 Modbus 请求

支持的功能码 异常码=01 否 0x0001<=输出数量<=0x007D 异常码=03 否 是 起始地址=OK 并且 起始地址+数量=OK 是 处理请求 否 异常码=04 读输入寄存器=OK 是 设备发送 Modbus 异常响应 退出 图 4.4 读输入寄存器状态图 设备发送 Modbus 响应 是

异常码=02

29

KJB001-2010 该功能码可从设备中读 1~125 个连续输入寄存器的内容。 请求 PDU 指定了起始寄存器地址和寄存器数量。在 PDU 中,从零开始寻址寄存器,因 此编号为 1~16 的寄存器被寻址为 0~15。 将响应报文中的寄存器数据按每个寄存器两字节进行打包,这个二进制内容正好填满每 个字节。对于每个寄存器,第一个字节包括高位位,第二个字节包括低位位。 表 4.16 是一个请求读输入寄存器 9 的示例。
表 4.16 读输入寄存器

请求 字段名 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 十六进制 04 00 08 00 01 功能 字节计数 字段名

响应 十六进制 04 02 00 0A

寄存器值 Hi(9) 寄存器值 Lo(9)

将输入寄存器 9 的内容表示为两个十六进制字节值 00 0A,或十进制 10。

30

KJB001-2010 4.5 05(0x05)写单个线圈 写单个线圈 功能码 05(0x05)用于写单个开关量(继电器)输出状态,如图 4.5 和表 4.17~4.19 所示:
表 4.17 写单个线圈请求

功能码 起始地址 输出值 功能码 起始地址 输出值

1 字节 2 字节 2 字节 1 字节 2 字节 2 字节

0x05 0x0000~0xFFFF 0x0000 或 0xFF00 0x05 0x0000~0xFFFF 0x0000 或 0xFF00

表 4.18 写单个线圈响应

表 4.19 写单个线圈错误响应

异常功能码 异常码

1 字节 1 字节

功能码+0x80 01 或 02 或 03 或 04

开始 否

设备接收 Modbus 请求

支持的功能码 异常码=01 否 输出值=0x0000 或 0xFF00 异常码=03 否 输出地址=OK 异常码=02 是 是

是 处理请求 否

异常码=04

写单个线圈=OK 是

设备发送 Modbus 异常响应

退出 图 4.5 写单个线圈状态图

设备发送 Modbus 响应

31

KJB001-2010 该功能码可将设备中的单个开关量(继电器)输出状态写为 ON 或 OFF。 所请求的 ON/OFF 状态有请求数据字段中的常数指定。 十六进制值 FF 00 请求输出为 ON, 十六进制值 00 00 请求输出为 OFF,其他所有值均是非法的,并且对输出不起作用。 请求 PDU 指定了被强制的线圈地址。在 PDU 中,从零开始寻址线圈,因此编号为 1 的 线圈被寻址为 0。 正常的响应是请求的复制,在写入线圈状态后被返回。 表 4.20 是一个请求写线圈 173 为 ON 的示例。
表 4.20 写单个线圈

请求 字段名 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 十六进制 05 00 AC FF 00 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 字段名

响应 十六进制 05 00 AC FF 00

32

KJB001-2010 4.6 06(0x06)写单个寄存器 写单个寄存器 功能码 06(0x06)用于写单个系统参数、模拟量输出值,如图 4.6 和表 4.21~4.23 所示:
表 4.21 写单个寄存器请求

功能码 起始地址 输出值 功能码 起始地址 输出值

1 字节 2 字节 2 字节 1 字节 2 字节 2 字节

0x06 0x0000~0xFFFF 0x0000~0xFFFF 0x06 0x0000~0xFFFF 0x0000~0xFFFF

表 4.22 写单个寄存器响应

表 4.23 写单个寄存器错误响应

异常功能码 异常码

1 字节 1 字节

功能码+0x80 01 或 02 或 03 或 04

开始 否

设备接收 Modbus 请求

支持的功能码 异常码=01 否 0x0000<=寄存器值<=0xFFFF 异常码=03 否 寄存器地址=OK 异常码=02 是 是

是 处理请求 否

异常码=04

写单个寄存器=OK 是

设备发送 Modbus 异常响应

退出 图 4.6 写单个寄存器状态图

设备发送 Modbus 响应

33

KJB001-2010 该功能码可写设备中单个保持寄存器的内容。 请求 PDU 指定了被写入保持寄存器的地址。在 PDU 中,从零开始寻址寄存器,因此编 号为 1 的保持寄存器被寻址为 0。 正常的响应是请求的复制,在写入保持寄存器后被返回。 表 4.24 是一个请求将十六进制 00 03 写保持寄存器 2 的示例。
表 4.24 写单个保持寄存器

请求 字段名 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 十六进制 06 00 01 00 03 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 字段名

响应 十六进制 06 00 01 00 03

34

KJB001-2010 4.7 15(0x0F)写多个线圈 写多个线圈 功能码 15(0x0F)用于写多个开关量(继电器)输出状态,如图 4.7 和表 4.25~4.27 所示:
表 4.25 写多个线圈请求

功能码 起始地址 输出数量 字节计数 输出值

1 字节 2 字节 2 字节 1 字节 N*1 字节

0x0F 0x0000~0xFFFF 0x0001~0x07B0 N

N=输出数量/8,如果余数不等于 0,则 N=N+1。
表 4.26 写多个线圈响应

功能码 起始地址 输出数量 异常功能码 异常码
开始

1 字节 2 字节 2 字节 1 字节 1 字节

0x0F 0x0000~0xFFFF 0x0001~0x07B0 功能码+0x80 01 或 02 或 03 或 04
设备接收 Modbus 请求

表 4.27 写多个线圈错误响应

否 支持的功能码 异常码=01 否 是 0x0001<=输出数量<=0x07B0 并且字节计数=N 是 否 异常码=02 是 处理请求 否 异常码=04 写多个线圈=OK 是 设备发送 Modbus 异常响应 退出 图 4.7 写多个线圈状态图 设备发送 Modbus 响应 起始地址=OK 并且 起始地址+输出数量=OK

异常码=03

35

KJB001-2010 该功能码可将设备中的一个线圈状态序列的每一个线圈强制为 ON 或 OFF。 请求 PDU 指定了被强制的线圈引用,且从零开始寻址线圈,因此编号为 1 的线圈被寻址 为 0。 请求数据字段中的内容指定了被请求线圈的 ON/OFF 状态。数据字段中为逻辑为“1”的 位请求相应输出为 ON;为逻辑为“1”的位请求相应输出为 OFF。 正常的响应返回功能码、起始地址以及被强制的线圈数量。 表 4.28 是一个请求从线圈 20 开始写入 10 个线圈的示例。
表 4.28 写单个线圈

请求 字段名 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 字节计数 输出值 Hi 输出值 Lo 十六进制 0F 00 13 00 0A 02 CD 01 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 字段名

响应 十六进制 0F 00 13 00 0A

请求的数据内容为两个字节:十六进制 CD 01(二进制 1100 1101 0000 0001)。二进制位按 如下方式对应输出。
位 输出

1 27

1 26

0 25

0 24

1 23

1 22

0 21

1 20

0 -

0 -

0 -

0 -

0 -

0 -

0 29

1 28

传输的第一字节(十六进制 CD)对应于输出 27~20,最低有效位对应于最低输出(20)。 传输的下一字节(十六进制 01)对应于输出 29~28,最低有效位对应于最低输出(28)。应该 用零填充最后数据字节中的未使用位。

36

KJB001-2010 4.8 16(0x10)写多个保持寄存器 写多个保持寄存器 功能码 16(0x10)用于写多个系统参数、模拟量输出值,如图 4.8 和表 4.29~4.31 所示:
表 4.29 写多个保持寄存器请求

功能码 起始地址 寄存器数量 字节计数 寄存器值 N=寄存器数量

1 字节 2 字节 2 字节 1 字节 N*2 字节

0x10 0x0000~0xFFFF 0x0001~0x007B N*2 值

表 4.30 写多个保持寄存器响应

功能码 起始地址 寄存器数量 异常功能码 异常码
开始

1 字节 2 字节 2 字节 1 字节 1 字节

0x0F 0x0000~0xFFFF 1~123(0x007B) 功能码+0x80 01 或 02 或 03 或 04
设备接收 Modbus 请求

表 4.31 写多个保持寄存器错误响应

否 支持的功能码 异常码=01 否 是 0x0001<=数量<=0x007B 并且字节计数=N*2 是 否 异常码=02 是 处理请求 否 异常码=04 写多个寄存器=OK 是 设备发送 Modbus 异常响应 退出 图 4.8 写多个寄存器状态图 设备发送 Modbus 响应 起始地址=OK 并且 起始地址+数量=OK

异常码=03

37

KJB001-2010 该功能码可写设备中连续保持寄存器块(1~123 个寄存器)的内容。 在请求数据字段中指定了请求写入的值并将数据按每个寄存器两字节打包。 正常的响应返回功能码、起始地址以及被写入寄存器的数量。 表 4.32 是一个请求将十六进制 00 0A 和 01 02 写入以第 2 个寄存器开始的两个寄存器的 示例。
表 4.32 写入连续两个寄存器

请求 字段名 功能 起始地址 Hi 起始地址 Lo 寄存器数量 Hi 寄存器数量 Lo 字节计数 寄存器值 Hi 寄存器值 Lo 寄存器值 Hi 寄存器值 Lo 十六进制 10 00 01 00 02 04 00 0A 01 02 功能 起始地址 Hi 起始地址 Lo 输出数量 Hi 输出数量 Lo 字段名

响应 十六进制 10 00 01 00 02

38

KJB001-2010 读设备标识(只支持单个设备标识的读取 4.9 43/14(0x2B/0x0E)读设备标识 只支持单个设备标识的读取 读设备标识 只支持单个设备标识的读取) 功能码 43/14(0x2B/0x0E)用于读取与设备物理和功能描述相关的标识和附加信息,如图 4.9 和表 4.33~4.36 所示: 读设备标识接口由包含一组可寻址数据元素组成的地址空间构成。 数据元素被称作对象, 有对象 ID 识别它们。 接口由 2 类对象组成: ——基本设备标识。该类别的所有对象都是强制的:厂商名称、产品代码和修订版本号。 ——常规设备标识。除基本数据对象以外,设备提供了附加的和可选的标识以及数据对 象描述。本部分定义了该类别的不分对象,但它们是可选的。
表 4.33 读设备标识

对象 ID 0x00 0x01 0x02 0x03 0x04 0x05

对象名称/描述 厂商名称 产品代码 版本号 厂商网址 产品名称 型号名称

类型 ASII 字符串 ASII 字符串 ASII 字符串 ASII 字符串 ASII 字符串 ASII 字符串

强制的/可选的 强制的 强制的 强制的 可选的 可选的 可选的

类别 基本的

常规的

表 4.34 读设备标识请求

功能码 MEI 类型 读设备 ID 码 对象 ID

1 字节 1 字节 1 字节 1 字节

0x2B 0x0E 04 0x00~0x06

表 4.35 读设备标识响应

功能码 MEI 类型 读设备 ID 码 一致性等级 连续标识 下一个对象 ID 对象数量 列表 对象 ID 对象长度 对象值

1 字节 1 字节 1 字节 1 字节 1 字节 1 字节 1 字节

0x2B 0x0E 04 0x81 或 0x82 00 00 1 0x00/0x01/0x02 或 0x03/0x04/0x05 对象的字节长度 对象值

1 字节 1 字节 对象长度

39

KJB001-2010
表 4.36 读设备标识的错误响应

异常功能码 异常码 请求参数描述:

1 字节 1 字节

功能码+0x80 01 或 02 或 03

Modbus 封装接口指配的的编号 14(0x0E)表示读标识请求。 参数“读设备 ID 码”定义的访问类型: 04:请求获得特定标识对象(单个访问)。 若读设备 ID 码是无效的,则在响应中返回异常码 03。 若对象 ID 不匹配任何已知对象(0x00/0x01/0x02/0x03/0x04/0x05), 那么设备返回一个异常 码=02(非法数据地址)的异常响应。
开始 否 支持的功能码 异常码=01 否 对象 ID=OK 异常码=02 否 异常码=03 是 处理请求 是 读设备 ID 码=04 是 设备接收 Modbus 请求

设备发送 Modbus 异常响应

退出 图 4.8 写多个寄存器状态图

设备发送 Modbus 响应

响应参数描述: 功能码: MEI 类型: 读设备 ID 码: 一致性等级:

功能码 43(0x2B) 为设备标识接口指配的编号 MEI 类型 14(0x0E) 与请求读设备 ID 码相同:04 设备的标识一致性等级和支持的访问类型 0x81:基本标识(流访问和单个访问) 0x82:常规标识(流访问和单个访问)
40

KJB001-2010 接续标识: 下一个对象 ID: 对象数目: 对象 ID: 对象长度: 00:没有后续的对象 00 单个访问,对象数目=1 请求的对象的标识 对象的字节长度

对象值: 对象的值(对象长度字节) 表 4.37 是读取设备中厂商名称的示例。
表 4.37 读取厂商名称

请求 字段名 功能 MEI 类型 读设备 ID 码 对象 ID 值 2B 0E 04 00 功能 MEI 类型 读设备 ID 码 一致性等级 接续标识 字段名

响应 值 2B 0E 04 81 00 00 01 00 09 “ColliHigh”

下一个对象 ID 对象数量 对象 ID 对象长度 对象值 注:产品信息 1.厂商名称:ColliHigh 2.产品代码:共 16 个字符 3.版本号:如“V1.0” 4.厂商网址:www.klha.cn 5.产品名称:英文名称,首字母大写,单词之间用空格隔开 6.型号名称:产品型号 4.10 65(0x41)读标定参数及相关系统参数 读标定参数及相关系统参数

该功能码用于读取设备的标定参数及相关系统参数,其使用方法和读保持寄存器的功能 码 03(0x03)一样,请参照 03(0x03)功能码的使用介绍。 4.11 66(0x42)写多个标定参数及相关系统参数 写多个标定参数及相关系统参数 该功能码用于写设备的标定参数及相关系统参数,其使用方法和写多个保持寄存器的功 能码 16(0x10)一样,请参照 16(0x10)功能码的使用介绍。

41

KJB001-2010

五.Modbus 异常响应
当上位机向设备发送请求后可能导致下列 4 种事件之一: ——若设备接收到无通讯错误的请求,并可以正常的处理询问,则设备将返回一个正常 响应。 ——若由于通讯错误设备没有收到请求,则不能返回响应。上位机程序可按超时处理。 ——若设备接收到请求,但是检测到一个通信错误(奇偶校验、LRC、CRC...),则不能返 回响应。上位机程序将按超时处理。 ——若设备接收到无通信错误的请求,但不能处理这个请求(例如,如果请求读一个不存 在的输出或寄存器),则设备将返回一个异常响应,通知上位机出错原因。 异常响应报文有两个与正常响应不同的字段: 1)功能码字段:正常的响应中,设备在响应的功能码字段复制原始请求的功能码。所有 功能码的 MSB 都为 0(它们的值都低于 0x80)。在一场响应中,设备设置功能码的 MSB 为 1。 这使得异常响应中的功能码值比正常响应中的功能码值高 0x80。 通过设置功能码的 MSB,上位机的应用程序能够识别异常响应,并且能够检测异常码的数据 字段。 2)数据字段:在正常的响应中设备可以在数据字段中返回数据或统计值(请求中要求的任 何信息)。在异常响应中设备在数据字段中返回异常码,表明了设备产生异常的原因。 表 5.1 列出了异常码

表 5.1 异常码
Modbus 异常码 代码 01 02 名称 非法功能 非法数据地址 输长度的组合是无效的。 对于设备来说, 询问数据字段中包含的数不准许的值。 它表示组合请求中剩余部分 结构方面的错误, 例如隐含长度不正确。 它绝不表示寄存器中被提交存储的数据项 03 非法数据值 有一个应用程序之外的值, 因为 Modbus 协议并不知道任何特殊的寄存器的任何特 殊值的具体含义。 04 从站设备故障 当设备正在试图执行所请求的操作时,产生不可恢复的差错。 含义 对于设备来说,询问中接收到的功能码是不准许的 对于设备来说, 询问中接收到的数据地址是不准许的地址。 特别是寄存器编号和传

42

KJB001-2010

六.Modbus 协议在串行链路上的实现规范
本部分描述串行链路上的 Modbus 协议。 Modbus 串行链路协议是一个主-从协议。 该协议 位于 OSI 模型的第 2 层。主——从类型的系统有一个主节点(主站),它向某个从节点(从站) 发出命令并处理响应。从站在没有收到主站的请求时并不主动的传输数据,也不与其他从站 通信。在物理层,串行链路上的 Modbus 系统可以使用不同的物理接口(RS485、RS232)。 6.1 Modbus 主/从协议原理 从协议原理 从协 Modbus 串行链路协议是一个主-从协议。在同一时间,总线上只能有一个主站和一个或 多个(最多 247 个)从站。Modbus 通信总是有主站发起,当从站没有收到来自主站的请求时, 不会发送数据。从站之间不能相互通信。主站同一时间只能启动一个 Modbus 事物处理。 主站用单播模式(暂不支持广播模式)向从站发出 Modbus 请求: ——主站寻址单个从站,从站接收并处理完请求后向主站返回一个报文(应答)。 在这种模式下,一个 Modbus 事务处理包含 2 个报文:一个主站请求;一个从站应答。 每个从站必须有唯一的地址(1~247),这样才能区别于其他站独立被寻址。 6.2 Modbus 寻址规则 如表 6.1 所示, Modbus 寻址空间由 256 个不同的地址组成, 地址 0 为广播地址(暂不支持), 主站没有特定地址,只有从站有唯一的一个地址。
表 6.1 Modbus 寻址范围

0 广播地址 6.3 Modbus 帧描述

1~247 从站地址

248~255 保留

Modbus 应用协议定义了一个与下层通信无关的简单协议数据单元(PDU), 如图 6.1 所示:
功能码 Modbus PDU 图 6.1 Modbus 协议数据单元 数据

通过在协议数据单元(PDU)上增加一些附加字段完成 Modbus 协议到具体总线或网络的 映射,启动 Modbus 事务处理的上位机构造成 Modbus PDU,然后添加附加字段,一般构成相 应的通信 PDU,如图 6.2 所示:
Modbus 串行链路 PDU 地址字段 功能码 数据 Modbus PDU 图 6.2 串行链路上的 Modbus 帧 CRC

43

KJB001-2010 ——在 Modbus 串行链路上地址字段只含有从站地址。 主站将从站地址放置在报文的地址字段中来寻址从站。当从站返回响应时,它将自己的 地址放到响应地址字段中,以便使主站知道那个从站正在响应。 ——功能码指示设备要执行何种操作。 功能码的后面是含有请求或响应参数的数据字段。 ——差错检验字段是根据报文内容执行“冗余校验”计算的结果。 6.4 主站 从站状态图 主站/从站状态图 Modbus 数据链路层由两个独立子层组成: ——主/从协议; ——传输模式(只支持 RTU 模式)。 6.4.1 主站状态图 图 6.3 说明了主站的行为:

按广播模式发 送的请求/启动 回转延迟

空闲
应答处 理结束

等待 回转延时
回转延时 时间到 请求发送到从 站/启动响应 超时定时器

处理应答
差错处 应答接收(期望的从站)/ 停止响应超时定时器 帧差错 理结束

应答接收 (非期望的从站)

等待应答
响应超时达限

差错处理

图 6.3 主站状态图

——状态“空闲”=无挂起请求。这是电源加电后的初始状态。只有在“空闲”状态下才 能发送请求。发送一个请求后,主站离开“空闲”状态,并且不能同时发送第二个请求。 ——当向从站发送单播请求时,主站将进入“等待应答”状态,并且启动一个“响应超 时”定时器。它防止主站无限期地停留在“等待应答”状态下。响应超时的时间与具体应用 有关。 ——当收到一个应答时,主站在处理数据之前检验应答。在某些情况下,检验的结果发 现错误,例如:收到来自非期望从站的应答或在接收到的帧中有错误。当收到来自非期望从 站的应答时,响应超时继续计时。如果在帧上检测到差错,可以进行重试。 ——如果没有接收到应答,响应超时时间到,产生一个错误。然后,主站进入“空闲”
44

KJB001-2010 状态,并发出一个重试请求。重试的最大次数与主站设置有关。 ——当在串行总线上发送广播请求时,从站不返回响应(暂不支持广播模式)。然而,主 站需要考虑延迟,以便再发送信的请求之前准许从站处理当前请求。这个延迟被称作“回转 延迟” 。因此,在返回“空闲”状态并且能够发送另一个请求之前,主站进入“等待回转延迟” 状态。 ——在单播模式下,必须设置足够长的响应超时时间,以便从站处理请求并返回响应; 在广播模式下,必须有足够长的回转延迟,以便从站处理请求并能够接收到新请求。因此, 回转延迟应该比响应超时短。通信速率在 9600bit/s 时,典型的响应超时值为 1s 到几秒,而回 转延迟为 100ms~200ms。 ——帧错误校验包括:每个字符的奇偶校验;整个帧的冗余校验。 6.4.2 从站状态图 图 6.4 说明了从站的行为:

空闲
发送正常应答

生成正 常应答
处理结束 (广播模式)

发送出错应答

接受请求 (来自主站) 校验通过

处理结束(单播模式)

帧校验中出错 或不是对该从 站寻址的帧

处理所要 求的动作
请求数据中的错误

处理时出错

校验请求

生成出 错应答

图 6.4 从站状态图

——状态“空闲”=无提起请求。这是设备上电后的初始状态。 ——当收到一个请求时,在处理报文包中所请求的动作之前,从站校验报文包,可能出 现不同的错误:如请求的格式错误、无效动作等。当检测到错误时,必须向主站发送应答。 ——一旦完成请求的动作,单播报文要求必须生成应答并将其发送给主站。 ——如果从站检测到接收帧中的错误,那么不向主站返回相应。

45

KJB001-2010 6.5 串行传输模式 本标准暂时只支持一种串行传输模式:RTU 模式。 RTU 模式中的每个字符(11 位)的格式为: 编码系统: 8 位二进制 每个字节的位: 1 个起始位 8 个数据位,首先发送最低有效位 1 个奇偶校验位 1 个停止位 要求使用偶校验,也可使用其他模式(奇校验、无校验)。为了保证与其他产品的最大兼 容性,建议还支持无校验模式。默认校验模式是偶校验。 注:使用无校验时要求 2 个停止位。 穿行的传送字符的方法为:发送每个字符或字节的顺序是从左到右,见表 6.2。 最低有效位(LSB)...........最高有效位(MSB)
表 6.2 RTU 模式中的位序列

带奇偶校验 起始 1 2 3 4 5 6 7 8 校验 停止

通过配置,设备可以接受奇校验、偶校验或无校验。如果无校验,那么传送一个附加的 停止位来填充字符帧使其成为完整的 11 位异步字符,见表 6.3
表 6.3 RTU 模式中的位序列(无校验)

带奇偶校验 起始 1 2 3 4 5 6 7 8 停止 停止

帧校验字段:循环冗余校验(CRC) 帧描述: 从站地址 1 字节 功能码 1 字节 数据 0~252 字节 低字节 CRC 2 字节 高字节

Modbus RTU 帧最大长度是 256 个字节。

46

KJB001-2010 6.5.1 Modbus 报文 RTU 帧 在 RTU 模式中,时长至少为 3.5 个字符时间的空闲间隔将报文帧区分开,这个时间间隔 成为 t3.5 ,见图 6.5。
帧1 帧2

至少 3.5 个字符

至少 3.5 个字符

Modbus 报文 起始 地址 8位 功能码 8位 数据 N*8 位 CRC 校验 16 位 结束

>=3.5 个字符

>=3.5 个字符

图 6.5 RTU 报文帧

必须已连续的字符流发送整个报文帧。 如果两个字符之间的空闲间隔大于 1.5 个字符时间( t1.5 ),那么认为报文帧不完整,并且 接收站应该丢弃这个报文帧,见图 6.6。
帧 1 正常 帧 1 不正常

<=1.5 个字符 图 6.6 Modbus 帧内间隔

>1.5 个字符

注:实现了 RTU 接收的驱动程序会隐含着对由 t1.5 和 t3.5 定时器引起的大量中断的管理。在较 高的通信波特率下这将导致 CPU 负担加重,因此当波特率等于或低于 19200bit/s 时,必 须严格遵守这两个定时;波特率大于 19200bit/s 的情况下,两个定时器宜使用固定值, 建议字符间超时时间( t1.5 )为 750us,帧间的延迟时间( t3.5 )为 1.75ms。

47

KJB001-2010 6.5.2 CRC 校验 RTU 模式包含一个差错校验字段,该字段是基于循环冗余校验(CRC)方法对全部报文内 容执行的。 CRC 字段校验整个报文的内容。无论单个字符报文使用何种奇偶校验方式,均应用这种 校验。CRC 校验字段为两个字节,包括一个二进制 16 位值。发送设备计算 CRC 值,并将其 附加到报文中。在接收过程中,接收设备重新计算 CRC 值,并将计算值于收到的 CRC 字段 中实际值相比较,如果两个值不相等,则说明报文有错误。 通过对一个 16 位寄存器预装载全“1”来启动 CRC 计算,然后开始将报文中的后续 8 为 字节与当前寄存器中的内容进行计算,只有每个字符中的 8 个数据位参与生成 CRC 的计算, 起始位、停止位和校验位不参与 CRC 计算。 在生成 CRC 过程中,每个 8 位字符与寄存器中的值异或,然后,向最低有效位(LSB)方 向移动这个结果,而用零填充最高有效位(MSB),提取并检查 LSB,如果 LSB 为 1,则寄存 器中的值与一个固定的预置值异或;如果 LSB 为 0,则不进行异或操作。 这个过程将重复直到执行完 8 次移位,完成最后一次(第 8 次)移位之后,下一个 8 位字 节与寄存器的当前值异或,然后像上述描述的那样重复 8 次这个过程。在已经计算报文中所 有字节之后,寄存器的最终值就是 CRC。 生成一个 CRC 的过程是: a) 将十六机制 FFFF(全 1)装入一个 16 位寄存器。将这个寄存器称作 CRC 寄存器。 b) 将报文的第一个 8 位字节与 16 位 CRC 寄存器的低字节异或, 将结果放置在 CRC 寄存 器中。 c) 将 CRC 寄存器右移 1 位(向 LSB 方向),MSB 填充零。提取并检测 LSB。 d) 若 LSB 为 0 则重复步骤 c);若 LSB 为 1 则将 CRC 寄存器与多项式值 0xA001 异或。 e) 重复步骤 c)和 d),直到完成 8 次移位。在完成这个操作之后,即完成了对一个完整的 8 位字节的处理。 f) 对报文的下一个 8 位字节重复步骤 b)~e)。继续进行这种操作,直到处理报文中的所有 字节为止。 g) CRC 寄存器中的最终内容为 CRC 值。 h) 当将 CRC 值放置到报文中时,必须把低字节放在前面,高字节放在后面,如图 6.7 所 示。 例如:如果 CRC 值为十六进制 1241,见图 6.7。 数据 计数

地址

功能码

数据

数据

数据

数据

CRC 低位
0x41

CRC 高位
0x12

图 6.7 CRC 字节序列

48


相关文章:
Modbus通讯协议标准格式
Modbus通讯协议标准格式_信息与通信_工程科技_专业资料。Modbus RTU模式与ASCI模式I Modbus 主从通讯协议 RTU 数据帧格式 Modbus 报文起 始至少 3.5 个字符的空闲 ...
modicon_MODBUS协议最新中文版
Modbus 协议应用示意图 * MB+为 Modbus PI-MBUS-300 Modbus Protocol 1 Modbus 上的数据传输 Modicon 控制器上的标准 Modbus 端口是使用一个 RS-232 兼容的...
Modbus标准通讯协议格式
Modbus通讯协议下表是Modbus的功能格式: 1、读可读写数字量寄存器(线圈状态): 计算机发送命令:[设备地址] [命令号01] [起始寄存器地址高8位] [低8位] [读取...
MODBUS协议(功能码及报文解析)
MODBUS协议(功能码及报文解析)_信息与通信_工程科技_专业资料。MODBUS协议(功能码及报文解析)MODBUS 协议 Modbus 是一种串行通信协议,是 Modicon 于 1979 年,为使...
标准Modbus通信协议
标准Modbus通信协议_信息与通信_工程科技_专业资料。标准Modbus通信协议 Modbus 通信协议 摘 要:工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业...
Modbus协议规范(修改稿)
Modbus协议规范(修改稿)_计算机软件及应用_IT/计算机_专业资料。前 言 ---串行链路和 TCP/IP 上的 MODBUS 标准介绍 该标准包括两个通信规程中使用的 MODBUS ...
MODBUS协议最简单又是最直白的解释
MODBUS 做为一种标准协议,应用于各种 PLC,控制器,仪表。这些仪表或是控制 器应用中, 元件的通讯地址肯定是不一样了; 各个命令码的各部分组成的意义也许也会...
单独传感器标准MODBUS485通讯协议
单独传感器标准MODBUS485通讯协议_信息与通信_工程科技_专业资料。modbus485协议相关内容 武汉新普惠科技有限公司 A、 读取数据(标准 modbus 协议) 地址默认为 0x01,...
MODBUS TCPIP协议规范详细介绍
MODBUS TCPIP协议规范详细介绍_计算机软件及应用_IT/计算机_专业资料。1.该规范的发展概况 原始版本 1997 年 9 月 3 日作为公共评论的草案。 再版 1999 年 3 ...
串行线路MODBUS协议的规范和实施指南
串行线路 MODBUS 协议规范和实施指南 1.02 版 1.引言 1.1 本文论述的范围 MODBUS 标准定义了应用层通信协议,是位于提供“客户机/服务器“之间 不同类型连接...
更多相关标签:
标准modbus rtu协议 | 标准modbus通讯协议 | 标准modbus协议 | 标准的modbus协议 | modbus通讯协议 | modbus tcp协议 | modbus rtu通讯协议 | modbus协议 |