ModBus通信规约指的是对MODBUS规约的模式和通信速率的一种定义。
基本介绍
- 中文名:ModBus通信规约
- 传输方式:异步串列通信方式
- 最大传输距离:1200米
- 连线主站数目:1个
- 连线从站数目:最多31个
- 通讯介质:推荐採用0.5mm的双绞线
通讯参数和传输特性
MODBUS规约模式:RTU模式。
传输速率:2400 bps,4800bps,9600bps,19200bps。
串列口通讯数据格式:1 个起始位,8 个数据位, 无校验位,1个停止位。
通讯介质:推荐採用0.5mm的双绞线,不带禁止层。(原因是如果使用禁止双绞线,但现场接地处理不好反而影响通讯质量)。
应答时间:小于4.5个byte传输时间(帧间隔最小时间) + 10ms。
通讯连线方式
RS-485网路的匹配电阻选取:双绞线网路两端的匹配电阻选取,以现场通信正常为準,一般地1.2km时取120Ω,600m时取220Ω,300m时取330Ω,如通信误码率较大,观察通信时的波形,匹配电阻做适当改变

支持的MODBUS功能码
功能码02H: 读取开关量输入(读实遥信和虚遥信)。
功能码03H: 读取保持暂存器(读事件记录等)
功能码04H: 读取输入暂存器(读远动遥测)
功能码05H: 强制单点继电器输出(远方复归、单步的遥控跳闸、遥控合闸)。
功能码06H: 向保持暂存器写单个字(遥控跳闸、遥控合闸的选择和执行操作)
功能码10H: 向保持暂存器(记忆体区)写多个16位的字(通讯对时)。
异常回响报文格式
由于软体编程错误,对协定理解错误或通讯干扰等原因,MODBUS通信子站接收到主站的报文后,可以採用异常回响报文给予回答,异常回响报文格式举例如下:
FC 05H 主站=>子站:远方复归
报文 | 内容含义 | 备注 |
1位元组 | MODBUS地址 | 01H 举例 |
1位元组 | 功能码 | 05H |
1位元组 | 线圈地址高位元组 | 01H |
1位元组 | 线圈地址低位元组 | 07H |
1位元组 | 强制线圈数值高位元组 | FFH |
1位元组 | 强制线圈数值低位元组 | 00H |
1位元组 | CRC高位元组 | 3CH |
1位元组 | CRC低位元组 | 07H |
异常回响报文 子站=>主站
报文 | 内容含义 | 备注 |
1位元组 | MODBUS地址 | 01H 举例 |
1位元组 | 功能码 | 85H |
1位元组 | 异常代码 | 02H |
1位元组 | CRC高位元组 | C3H |
1位元组 | CRC低位元组 | 51H |
子站通过校验,发现主站报文有问题,将回响报文将主站的功能码最高位(D7)置
1,如例子中的02H,异常回响报文中有固定的一个位元组作为“异常代码”,表示异常原因。
异常代码 | 含义 |
01 | 非法功能码。子站无法处理主站报文中的功能码。 |
02 | 非法数据地址。子站无法处理主站报文中的数据地址。 |
03 | 非法数据内容。主站报文中的数据不能满足子站的要求格式。 |
04 | 子站设备错误。 |
05 | 确认帧。 |
06 | 子站忙。 |
时间格式
本规约中使用到的对时报文的时间格式,事件记录中的时间格式,参见下面说明。七个八位位组的二进制时间
2 毫秒 2 | |||||
2 毫秒 2 | |||||
IV | (RES1)0 | 2 分 2 | |||
0(SU) | (RES2) 0 0 | 2 时 2 | |||
2 星期 2 | 2 日 2 | ||||
(RES3) 0 0 0 0 | 2 月 2 | ||||
(RES4) 0 | 2 年 2 |
读全遥信
主站传送:
从机地址 | 功能码 | 开始地址H | 开始地址L | 遥信点数H | 遥信点数L | CRC码H | CRC码L |
01 | 02 | 00 | 00 | 00 | 20 | 79 | D2 |
子站回响
地址 | 功能码 | 位元组数 | 遥信数值(LSB-MSB) | CRC码H | CRC码L | |||
01 | 02 | 04 | 01 本位元组的LSB对应遥信点号1 | 02 | 00 | 00 本位元组的MSB对应遥信点号32 | 5B | DE |
注意:
1)MMP-5000D供有32个遥信(实遥信和虚遥信),因此主站从开始地址0读0x20个遥信点。
2)本例应答报文中:数值01的D0位为1代表MMP-5000D的“远方控制”为1;数值02中的D1位为1代表MMP-5000D的跳位信号为1。
3)子站回响中的LSB,MSB指D0位和D7位,通讯点号依次採用升序的方式,比如第一个位元组的D0位为遥信点号1…它的D7位为遥信点号8;第二个节字的D0位就为遥信点号9,它的D7位为遥信点号16,依次类推。
读全遥测
主站传送:
从机地址 | 功能码 | 开始地址H | 开始地址L | 遥测点数H | 遥测点数L | CRC码H | CRC码L |
01 | 04 | 00 | 00 | 00 | 0F | B0 | 0E |
子站回响
地址 | 功能码 | 位元组数 | 设备状态字 H L | 第一个遥测值 H L | 第N个遥测值 | CRC码H | CRC码L | ||
01 | 04 | 1E | 00 | 01 | 6A | A0 | … | B6 | 1B |
“设备状态字”的D0为1,表示请求读全遥信 | MMP-5000D的“频率”遥测值 |
注意:
1)遥测报文第一个测点为“设备状态字”,不用入库,第二个开始才是“频率”,以后依次后推。
2)远动遥测值的数据格式採用带品质描述的被测值(MEA)定义
BIT0 = 溢出位(OV)
BIT1 = 差错位(ER)
BIT2 = 测试位(TEST),该位置1表示本遥测量为综自功能
BIT15~BIT3 = 被测值(MVAL),範围-4096 ~4095
3)“设备状态字”占用两个位元组,它的低位元组的D0位为1表示有实遥信和虚遥信变位,要求主站使用“读全遥信”报文来读取,一旦执行了“读全遥信”,则“设备状态字的D0位变为0;“设备状态字”的D1位为1:表示保护装置有事件记录,要求主站使用连续执行“读单个事件记录”来读取事件记录,子站没有新的事件记录时,D1位自动变为0。通讯管理机可以根据需要选择是否使用“设备状态字”。
4)如果不需要使用“设备状态字”,可以将报文中的开始地址设为0x0001,则第一个读到的遥测值就是“频率”。
5)遥测值计算方法:
电压4095对应1.2倍的额定值1.2*100 = 120V电流4095对应1.2倍的额定值1.2*5 = 6A功率4095对应1.2倍的额定值(1.2*57.77*1.2*5)*3 = 1248W频率4095对应1.2倍的额定值1.2*50 = 60Hz功率因素4095对应1倍的额定值1.000本例中:6AA0为第一个遥测值(频率),它被放大8倍,满量程值为4095,对应60Hz(50Hz的1.2倍)。
因此频率如下计算:0x6AA0/8/4095*60.0Hz = 49.993Hz
例:========MMP-5000D读全遥测========
TX:01 04 00 00 00 0F B0 0E
RX:01 04 1E 00 01 6A A0 00 00 00 00 00 00 36 C0 40 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 C0 B6 1B
读电度值
主站传送:
从机地址 | 功能码 | 电度对象起始地址H | 电度对象起始地址L | 电度对象数目H | 电度对象数目L | CRC码H | CRC码L |
01 | 03 | 00 | 00 | 00 | 01 | 85 | B2 |
子站回响:
地址 | 功能码 | 位元组数 | 正向有功电度 LSB MSB | 反向有功电度 LSB MSB | 正向无功电度 LSB MSB | 反向无功电度 LSB MSB | CRC码H | CRC码L | ||||||||||||
01 | 03 | 10 | E8 | 03 | 00 | 00 | B6 | 07 | 00 | 00 | B8 | 0B | 00 | 00 | A0 | 0F | 00 | 00 | B6 | 1B |
正向有功电度值为: 0x000003E8(1000W/1kW) | 反向有功电度 0x000007D0(2000W/2kW) | 正向无功电度 0x00000BB8(3000Var/3kVar) | 反向无功电度 0x00000FA0(4000Var/4kvar) |
注意:
每个电度值由4个位元组组成一个32位字,它的单位是W(瓦特)或Var(乏)报文中先收到的是电度的低位位元组,后收到的是高位位元组。例:========MMP-5000D读电度值========
TX:01 03 02 00 00 01 85 B2
RX:01 03 10 E8 03 00 00 D0 07 00 00 B8 0B 00 00 A0 0F 00 00 93 CD
广播对时
主站传送:
从机地址 | 功能码 | 开始地址H | 开始地址L | 暂存器数H | 暂存器数L | 位元组总数 | 毫秒L | 毫秒H |
00 | 10 | 04 | 80 | 00 | 04 | 08 | 98 | B7 |
分钟 | 小时 | 日 | 月份 | 年份 | 保留 | CRC码H | CRC码L |
16 | 12 | 17 | 01 | 07 | 00 | 87 | 78 |
说明:
1.对时时间为07年1月23日18时22分47秒000毫秒
2.广播对时的从机地址设为00
广播信号复归
方式一:採用功能码05H向单个线圈264写ON信号(0xFF00),产生远方信号复归功能。
主站传送:
从机地址 | 功能码 | 线圈地址H | 线圈地址L | 强制线圈数值H | 强制线圈数值L | CRC码H | CRC码L |
00 | 05 | 01 | 07 | FF | 00 | 3D | D6 |
方式二:採用功能码06H向单个保持暂存器0x0000写数值0x0000,产生远方复归功能。
主站传送:
从机地址 | 功能码 | 暂存器地址H | 暂存器地址L | 设定数值H | 设定数值L | CRC码H | CRC码L |
00 | 06 | 00 | 00 | 00 | 00 | 89 | CA |
说明:
1)如果需要点对点复归,只要将从机地址从广播地址00改为相应设备地址即可。
2)两种方式通讯管理机可以任意选择。
遥控跳闸的选择命令
採用功能码06H向单个保持暂存器0x0101写数值0xFFFF,产生遥控跳闸的选择功能。
主站传送:
从机地址 | 功能码 | 暂存器地址H | 暂存器地址L | 暂存器数值H | 暂存器数据L | CRC码H | CRC码L |
01 | 06 | 01 | 01 | FF | FF | D8 | 46 |
子站回响:
子站地址 | 功能码 | 暂存器地址H | 暂存器地址L | 暂存器数值H | 暂存器数据L | CRC码H | CRC码L |
01 | 06 | 01 | 01 | FF | FF | D8 | 46 |
遥控跳闸的执行命令
採用功能码06H向单个保持暂存器0x0011写数值0xFFFF,产生遥控跳闸的执行。
主站传送:
从机地址 | 功能码 | 暂存器地址H | 暂存器地址L | 暂存器数值H | 暂存器数据L | CRC码H | CRC码L |
01 | 06 | 00 | 11 | FF | FF | D8 | 7F |
子站回响:
子站地址 | 功能码 | 暂存器地址H | 暂存器地址L | 暂存器数值H | 暂存器数据L | CRC码H | CRC码L |
01 | 06 | 00 | 11 | FF | FF | D8 | 7F |
遥控合闸的选择命令
採用功能码06H向单个保持暂存器0x0100写数值0xFFFF,产生遥控合闸的选择功能。
主站传送:
从机地址 | 功能码 | 暂存器地址H | 暂存器地址L | 暂存器数值H | 暂存器数据L | CRC码H | CRC码L |
01 | 06 | 01 | 00 | FF | FF | 89 | 86 |
子站回响:
子站地址 | 功能码 | 暂存器地址H | 暂存器地址L | 暂存器数值H | 暂存器数据L | CRC码H | CRC码L |
01 | 06 | 01 | 00 | FF | FF | 89 | 86 |
遥控合闸的执行命令
採用功能码06H向单个保持暂存器0x0010写数值0xFFFF,产生遥控合闸的执行。
主站传送:
从机地址 | 功能码 | 暂存器地址H | 暂存器地址L | 暂存器数值H | 暂存器数值L | CRC码H | CRC码L |
01 | 06 | 00 | 10 | FF | FF | 89 | BF |
子站回响:
子站地址 | 功能码 | 暂存器地址H | 暂存器地址L | 暂存器数值H | 暂存器数据L | CRC码H | CRC码L |
01 | 06 | 00 | 10 | FF | FF | 89 | BF |
单报文直接遥控跳闸
採用功能码05H向线圈0x0001写数值0xFF00,产生单报文直接遥控跳闸。慎用本命令!
主站传送:
从机地址 | 功能码 | 线圈地址H | 线圈地址L | 强制线圈数值H | 强制线圈数值L | CRC码H | CRC码L |
01 | 05 | 00 | 01 | FF | 00 | DD | FA |
子站回响:
从机地址 | 功能码 | 线圈地址H | 线圈地址L | 强制线圈数值H | 强制线圈数值L | CRC码H | CRC码L |
01 | 05 | 00 | 01 | FF | 00 | DD | FA |
单报文直接遥控合闸
採用功能码05H向线圈0x0000写数值0xFF00,产生单报文直接遥控合闸。慎用本命令!
主站传送:
从机地址 | 功能码 | 线圈地址H | 线圈地址L | 强制线圈数值H | 强制线圈数值L | CRC码H | CRC码L |
01 | 05 | 00 | 00 | FF | 00 | 8C | 3A |
子站回响:
从机地址 | 功能码 | 线圈地址H | 线圈地址L | 强制线圈数值H | 强制线圈数值L | CRC码H | CRC码L |
01 | 05 | 00 | 00 | FF | 00 | 8C | 3A |
读单个事件记录
採用功能码03H向保持暂存器地址0x0001,读一个字,产生读一个事件记录的作用。
主站传送:
从机地址 | 功能码 | 事件记录地址H | 事件记录地址L | 事件记录个数H | 事件记录个数L | CRC码H | CRC码L |
01 | 03 | 00 | 01 | 00 | 01 | D5 | CA |
子站回响:
从机地址 | 功能码 | 位元组数 | 事件条目数H | 事件条目数L | 事件代码H (事件组号) | 事件代码L (事件代码) | 动作值 02:合; 01:分 |
01 | 03 | 0C | 00 | 01 | 04 | 09 | 02 |
毫秒L | 毫秒H | 分钟 | 小时 | 日 | 月份 | 年份 | CRC码H | CRC码L |
A5 | 4D | 19 | 12 | 17 | 01 | 07 | 2F | EB |