发表时间: 2022-03-30 14:24:23
作者: 北京科瑞兴业科技有限公司
浏览:
ModBus 协议定义了一个控制器能认识使用的消息结构,而不管它们是通过何种网络进行通信的,它制定了消息域的格局和内容的公共格式,描述了一个控制器请求访问其它设备的过程,回应来自其它设备的请求,以及如何侦测并记录错误信息。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备 之间可以完成信息和数据的交换与传送,使各种不同的公司和厂家的可编程顺序控制器(PLC)、RTU、SCADA 系统、DCS或与兼容ModBus协议的第三方设备之间可以连成工业网络,构建各种复杂的监控系统,并利于系统的维护和扩展,这个通讯协议已广泛被国内外电力行业及工控行业作为系统集成的一种通用工业标准协议。
K85系列模块采用ModBus通信规约,支持多种流行软件,多种设备及系统之间实现数据通信,特别适用于电力系统综合自动化,智能电力电子设备,智能楼宇,工业自动化等领域,是构建、扩建DCS系统或制造智能电力电子设备的理想功能产品。
图 4 Modbus 帧结构
K85 系列模块Modbus-RTU协议
K85系列模块实现Modbus通信协议时,遵循Modbus通信过程,采用了Modbus-RTU协议的命令子集。
1 数据传输方式:
异步10 位——1位起始位,8 位数据位,1 位停止位,无校验位。
2 数据传输速率:
1200、2400、4800 、9600 、19200、28800 、38400 、57600 BPS(缺省波 特率为9600BPS,可修改,用户希望使用其他波特率时,请使用我公司提供的 相关软件进行自行修改)。
3 站址:
K85 系列模块地址范围1~32,(各型号出厂都设置缺省地址为 1,可修改, 用户希望使用其它地址时,请使用我公司提供的相关软件进行自行修改)。
4 功能码:
K85系列模块Modbus功能码定义:
(1) 01(0x01) --- 按字节回读多个开关量输出状态
(2) 02(0x02) --- 按字节回读多个开关量输入点状态
(3) 03(0x03) --- 回读多个输出寄存器数值
(4) 04(0x04) --- 回读多个输入寄存器数值
(5) 05(0x05) --- 设置单一开关量输出状态
(6) 06(0x06) --- 设置单一输出寄存器数值
(7) 15(0x0F) --- 按字节设置多个开关量输出状态
(8) 16(0x10) --- 设置多个输出寄存器数值
(8) 22(0x16) --- 定义功能,用户不可用
(8) 23(0x17) --- 定义功能,用户不可用
(8) 24(0x18) --- 定义功能, 设置多个输入寄存器初始数值
K85系列模块Modbus功能异常代码定义:
(1) 01(0x01) --- 无效功能码
(2) 02(0x02) --- 无效寄存器地址
(3) 03(0x03) --- 无效数据,即数据超过上限或下限
(4) 04(0x04) --- 从机操作失败
5 校验:
主机或从机用 CRC 校验码判别接收信息是否正确。由于总线上的电子噪声 或一些其它干扰,信息在传输过程中可能会发生错误,接收一方可以使用 CRC 校验码判断接收到的信息帧是否正确, 并放弃错误的信息帧, 提高了通信系统的 安全性和可靠性。
Modbus通信协议的CRC(冗余循环码)包含2个字节,即16 位二进制数。发送设备计算CRC 码,放置于发送信息帧的尾部。接收信息的设备将接收到的所有信息(含CRC 码)重新计算 CRC 码,并判断该CRC码是否为0,如果为0,表示接收的信息帧正确无误,否则,则表明接收的信息帧有误,在进行CRC计算时只用8个数据位,起始位及停止位都不参与CRC计算。
6 K85系列模块Modbus通信协议支持功能码
功能 码 | 模块型号 | ||||||||||||
8510 | 8511 | 8512 | 8513 | 8514 | 8514P | 8516 | 8518 | 8520 | 8521 | 8522 | 8523 | ||
01 | ● | ● | ● | ● | ● | ● | |||||||
02 | ● | ● | ● | ||||||||||
03 | ● | ● | |||||||||||
04 | ● | ● | ● | ● | ● | ● | |||||||
05 | ● | ● | ● | ● | ● | ● | |||||||
06 | ● | ● | |||||||||||
15 | ● | ● | ● | ● | ● | ● | |||||||
16 | ● | ● |
K85 系列模块 Modbus-RTU 功能码详解
1按字节回读多个开关量输出的状态功能码-- 01(0x01)
查询帧格式(总长8个字节)
站址 XXH | |
功能码 01(0x01) | |
回读开始地址(地址低四位) | 地址高字节 |
地址低字节 | |
回读bit数量 | 数量高字节 |
数量低字节 | |
CRC校验 | 校验低字节 |
校验高字节 |
响应帧格式(总长6-8个字节,视回读字节长度而定)
站址 XXH | |
功能码 01(0x01) | |
回读字节长度 | 1字节 |
回读的bit状态(按字节) | 符合回读长度的字节个数 |
CRC校验 | 校验低字节 |
校验高字节 |
异常响应帧格式
2 按字节回读多个开关量输入点状态 功能码 -- 02(0x02)
查询帧格式(总长8个字节)
站址 XXH | |
功能码 02(0x02) | |
回读开始地址(地址低四 位)取0或8的整数倍 | 地址高字节 |
地址低字节 | |
回读bit数量 | 00H |
bit数量 | |
CRC校验 | 校验低字节 |
校验高字节 |
响应帧格式(总长6-8个字节,视回读字节长度而定)
站址 XXH | |
功能码 02(0x02) | |
回读字节个数 | 1字节 |
回读的bit状态(按字节) | 符合回读个数的各字节数据 |
CRC校验 | 校验低字节 |
校验高字节 |
异常响应帧格式
5.3 回读多个输出寄存器数值 功能码 -- 03(0x03)
查询帧格式(总长8个字节)
站址 XXH | |
功能码 03(0x03) | |
回读输出寄存器的开始 地址 (地址低四位) | 地址高字节 |
地址低字节 | |
回读寄存器数量 | 数量高字节 |
数量低字节 | |
CRC校验 | 校验低字节 |
校验高字节 |
响应帧格式(总长7-21个字节,视回读字节长度而定)
站址 XXH | |
功能码 03(0x03) | |
回读寄存器字节长度 | 1字节 |
回读的寄存器内容(按字 节) 这段数据长度与回读 的字节数有关(从2到16) | 寄存器1高字节数据 |
寄存器1低字节数据 | |
寄存器2高字节数据 | |
寄存器2低字节数据 |
┋ | |
寄存器n高字节数据 | |
寄存器n低字节数据 | |
CRC校验 | 校验低字节 |
校验高字节 |
异常响应帧格式
5.4 回读多个输入寄存器数值功能码 -- 04(0x04)
查询帧格式(总长8个字节)
站址 XXH | |
功能码 04(0x04) | |
回读输入寄存器的开始 地址 (地址低四位) | 地址高字节 |
地址低字节 | |
回读输入寄存器的数量 | 数量高字节 |
数量低字节 | |
CRC校验 | 校验低字节 |
校验高字节 |
响应帧格式(总长7-21个字节,视回读字节长度而定)
站址 XXH | |
功能码 04(0x04) | |
回读寄存器字节长度 | 1字节 |
回读的寄存器内容(按字 节) 这段数据长度与回读 的字节数有关(从2到16) | 寄存器1高字节数据 |
寄存器1低字节数据 | |
寄存器2高字节数据 | |
寄存器2低字节数据 | |
┋ | |
寄存器n高字节数据 | |
寄存器n低字节数据 | |
CRC校验 | 校验低字节 |
校验高字节 |
5.5 设置单一开关量输出状态 功能码 -- 05(0x05)
设置的数据为FF00H,为置高输出,数据为0000H为置低输出
查询帧格式(总长8个字节)
站址 XXH | |
功能码 05(0x05) | |
设置开关量地址 (地址低四位) | 地址高字节 |
地址低字节 | |
设置数据 | 数据高字节 |
数据低字节 | |
CRC校验 | 校验低字节 |
校验高字节 |
响应帧格式(总长8个字节)
站址 XXH | |
功能码 05(0x05) | |
设置开关量地址 (地址低四位) | 地址高字节 |
地址低字节 | |
返回的设置数据 | 数据高字节 |
数据低字节 | |
CRC校验 | 校验低字节 |
校验高字节 |
异常响应帧格式
5.6 设置单一输出寄存器数值 功能码 -- 06(0x06)
查询帧格式(总长8个字节)
站址 XXH | |
功能码 06(0x06) | |
设置寄存器地址 (地址低四位) | 地址高字节 |
地址低字节 | |
设置寄存器的内容 | 数据高字节 |
数据低字节 | |
CRC校验 | 校验低字节 |
校验高字节 |
响应帧格式(总长8个字节)
站址 XXH | |
功能码 06(0x06) | |
设置寄存器地址 (地址低四位) | 地址高字节 |
地址低字节 | |
返回的设置寄存器内容 | 数据高字节 |
数据低字节 | |
CRC校验 | 校验低字节 |
校验高字节 |
异常响应帧格式
5.7 按字节设置多个开关量输出状态 功能码 — 15(0x0F)
查询帧格式(总长10-12个字节)
站址 XXH | |
功能码 15(0x0F) | |
设置开关量开始地址 地 址低四位 | 地址高字节 |
地址低字节 | |
设置开关量数量 | 数量高字节 |
数量低字节 | |
发送数据长度 | 1字节 |
发送给开关量的数据内 容(字节数由发送数据长 度决定 | 开关量8-1的设置值 |
┋ | |
开关量24-17的设置值 | |
CRC校验 | 校验低字节 |
校验高字节 |
响应帧格式(总长8个字节)
站址 XXH | |
功能码 15(0x0F) | |
设 置 开 关 量 开 始 地 址 (地址低四位) | 地址高字节 |
地址低字节 | |
设置开关量数量 | 数量高字节 |
数量低字节 | |
CRC校验 | 校验低字节 |
校验高字节 |
异常响应帧格式
5.8 设置多个输出寄存器数值 功能码 -- 16(0x10)
查询帧格式(总长11-17个字节,视回读字节长度而定)
站址 XXH | |
功能码 16(0x10) | |
设置输出寄存器开始地 址 | 地址高字节 |
地址低字节 | |
设置的输出寄存器数量 | 数量高字节 |
数量低字节 | |
设置的数据长度 | 占用1字节 |
设置的数据内容 | 首通道数据高字节 |
首通道数据低字节 | |
┋ | |
末通道数据高字节 | |
末通道数据低字节 |
CRC校验 | 校验低字节 |
校验高字节 |
响应帧格式(总长8个字节)
站址 XXH | |
功能码 16(0x10) | |
设置的首通道地址 | 首地址高字节 |
首地址低字节 | |
设置的通道数量 | 通道数量高字节 |
通道数量低字节 | |
CRC校验 | 校验低字节 |
校验高字节 |
异常响应帧格式
站址 XXH | |
功能码 0x98(0x18+0x80) | |
异常代码 | 0x01或0x02 或0x03 或0x04 |
CRC校验 | 校验低字节 |
校验高字节 |
5.9 设置多个输入寄存器初始数值(定义功能) 功能码 -- 24(0x18)
查询帧格式(总长11-17个字节,视回读字节长度而定)
站址 XXH | |
功能码 24(0x18) | |
设置输出寄存器开始地 址 | 地址高字节 |
地址低字节 | |
设置的输出寄存器数量 | 数量高字节 |
数量低字节 | |
设置的数据长度 | 占用1字节 |
设置的数据内容 | 首通道数据高字节 |
首通道数据低字节 | |
┋ | |
末通道数据高字节 | |
末通道数据低字节 | |
CRC校验 | 校验低字节 |
校验高字节 |
响应帧格式(总长8个字节)
站址 XXH | |
功能码 16(0x10) | |
设置的首通道地址 | 首地址高字节 |
首地址低字节 | |
设置的通道数量 | 通道数量高字节 |
通道数量低字节 | |
CRC校验 | 校验低字节 |
校验高字节 |
异常响应帧格式