MODBUSRTU通讯规约重点讲义资料.docx
《MODBUSRTU通讯规约重点讲义资料.docx》由会员分享,可在线阅读,更多相关《MODBUSRTU通讯规约重点讲义资料.docx(23页珍藏版)》请在冰豆网上搜索。
![MODBUSRTU通讯规约重点讲义资料.docx](https://file1.bdocx.com/fileroot1/2023-1/14/ca791133-d8d8-43a5-b5d0-c117df395640/ca791133-d8d8-43a5-b5d0-c117df3956401.gif)
MODBUSRTU通讯规约重点讲义资料
附录一:
MODBUS_RTU通讯规约(本协议采用主从问答方式)
PDM系列仪表/变送器:
PDM系列仪表/变送器采用全新的设计,革命性地改变了传统电表的概念;具有多功能、高精度、数字式、可编程、结构紧凑、多画面显示的特点,它可以满足电力工业未来对电表的需求。
MODBUS通讯协议:
ModBus通讯规约允许PDM系列仪表/变送器与施耐德、西门子、AB、GE等多个国际著名品牌的可编程顺序控制器(PLC)、RTU、SCADA系统、DCS或与第三方具有ModBus兼容的监控系统之间进行信息交换和数据传送。
PDM系列仪表/变送器只要简单地增加一套基于计算机(或工控机)的监控软件(如:
组态王、Intouch、FIX、synall等)就可以构成一套电力监控系统。
广泛的系统集成:
PDM系列仪表/变送器提供了标准的RS-485/422通讯接口及ModBus通讯协议,这个通讯协议已广泛被国内外电力行业及工控行业作为系统集成的标准。
通讯数据的类型及格式:
信息传输为异步方式,并以字节为单位。
在主站和从站之间传递的通讯信息是11位的字格式:
字格式(串行数据)
11位二进制
起始位
1位
数据位
8位
奇偶校验位
1位:
有奇偶校验位/无:
无奇偶校验位
停止位
1位:
有奇偶校验位/2位:
无奇偶校验位
●通讯数据(信息帧)格式
数据格式:
地址码
功能码
数据区
错误校检
数据长度:
1字节
1字节
N字节
16位CRC码(冗余循环码)
★注:
1、1个字节由8位二进制数组成(既8bit)。
2、ModBus是Modicon公司的注册商标。
3、“从机”在本文件中既为PDM。
一、通讯信息传输过程:
当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。
返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。
如果CRC校验出错就不返回任何信息。
1.1地址码:
地址码是每次通讯信息帧的第一字节(8位),从0到255。
这个字节表明由用户设置地址的从机将接收由主机发送来的信息。
每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。
当从机回送信息时,回送数据均以各自的地址码开始。
主机
发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。
相应的地址码表明该信息来自于何处。
1.2功能码:
是每次通讯信息帧传送的第二个字节。
ModBus通讯规约可定义的功能码为1到127。
PDM系列仪表/变送器仅用到其中的一部分功能码。
作为主机请求发送,通过功能码告诉从机应执行什么动作。
作为从机响应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。
表8.1MODBUS部分功能码
功能码
定义
操作(二进制)
02
读开关量输入
读取一路或多路开关量状态输入数据
01
读开关量输出
读取一路或多路开关量输出状态数据
03
读寄存器数据
读取一个或多个寄存器的数据
05
写开关量输出
控制一路继电器“合/分”输出
06
写单路寄存器
把一组二进制数据写入单个寄存器
10
写多路寄存器
把多组二进制数据写入多个寄存器
1.3数据区:
数据区包括需要由从机返送何种信息或执行什么动作。
这些信息可以是数据(如:
开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。
例如,主机通过功能码03告诉从机返回寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度),则返回的数据包括寄存器的数据长度及数据内容。
对于不同的从机,地址和数据信息都不相同(应给出通讯信息表)。
PDM系列仪表/变送器采用Modbus通讯规约,主机(PLC、RTU、PC机、DCS等)利用通讯命令(功能码03),可以任意读取其数据寄存器(其数据信息表详见附录)。
PDM系列仪表/变送器的数据寄存器存储的电量多达几百个(如:
电流、电压、功率、0~31次谐波分量等),并且都是16位(2字节)的二进制数据,并且高位在前;一次最多可读取寄存器数(既各种电量的数量)是50个。
PDM响应的命令格式是从机地址、功能码、数据区及CRC码。
数据区的数据都是两个字节,并且高位在前(电能量除外)。
注:
1、PDM-820AC/ACM/ACR、PDM-800AC/ACM具有“03”、“06”、“10”功能码;
2、如果PDM采用MODBUSASCII通讯协议,其通讯数据格式为;7个数据位,1个
停止位,偶校验。
二、MODBUS功能码简介
2.1功能码“02”:
读1路或多路开关量状态输入
例如:
主机要读取地址为01,开关量DI1—DI4的输入状态。
从机(PDM)数据寄存器的地址和数据为:
起始位地址
DI寄存器数据(16进制)
备注
0000
0B
DI1/DI2/DI4状态为“1”,DI3状态为“0”
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
02
读开关量输入状态
起始BIT位
2
0000
起始BIT位地址为0000
读数据长度
2
0004
读取4路开关量输入状态位
CRC码
2
79C9
由主机计算得到CRC码
从机(PDM)响应返回的报文格式:
从机响应
字节数
返回的信息
备注
从机地址
1
01
来自从机01
功能码
1
02
读开关量输入状态
数据长度
1
01
1个字节(8个BIT位)
DI状态数据
1
0B
DI寄存器内容
CRC码
2
E04F
由从机计算得到CRC码
2.2功能码“01”:
读1路或多路开关量输出状态
例如:
主机要读取地址为01,开关量DO1,DO2的输出状态。
从机(PDM)数据寄存器的地址和数据为:
起始位地址
DO寄存器数据(16进制)
备注
0000
02
DO2输出状态为“1”,DO1输出状态为“0”
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
01
读开关量输出状态
起始BIT位
2
0000
起始BIT位地址为0000
读数据长度
2
0002
读取2路继电器输出状态位
CRC码
2
BDCB
由主机计算得到CRC码
从机(PDM)响应返回的报文格式:
从机响应
字节数
返回的信息
备注
从机地址
1
01
来自从机01
功能码
1
01
读开关量输出状态
数据长度
1
01
1个字节(8个BIT位)
DO状态数据
1
02
DO寄存器内容
CRC码
2
D049
由从机计算得到CRC码
2.3功能码“03”:
读多路寄存器输入
例如:
主机要读取地址为01,起始地址为0116的3个从机寄存器数据。
从机(PDM)数据寄存器的地址和数据为:
寄存器地址
寄存器数据(16进制)
对应PDM电量
0116
1784
UA
0117
1780
UB
0118
178A
UC
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
03
读取寄存器
起始地址
2
0116
起始地址为0116
数据长度
3
0003
读取3个寄存器(共6个字节)
CRC码
2
E5F3
由主机计算得到CRC码
从机(PDM)响应返回的报文格式:
从机响应
字节数
返回的信息
备注
从机地址
1
01
来自从机01
功能码
1
03
读取寄存器
读取字
1
06
3个寄存器共6个字节
寄存器数据1
2
1784
地址为0116内存的内容
寄存器数据2
2
1780
地址为0117内存的内容
寄存器数据3
2
178A
地址为0118内存的内容
CRC码
2
5847
由从机计算得到CRC码
2.4功能码“05”:
写1路开关量输出(“遥控”)
例1:
开关量输出点DO1,其当前状态为“分”,主机要控制该路继电器“合”。
控制命令为:
“FF00”为控制继电器“合”;
“0000”为控制继电器“分”;
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
05
写开关量输出状态
输出BIT位
2
0000
对应输出继电器BIT位(DO1)
控制命令
2
FF00
控制该路继电器输出为“合”状态位
CRC码
2
8C3A
由主机计算得到CRC码
从机(PDM)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
例2:
开关量输出点DO2,其当前状态为“合”,主机要控制该路继电器“分”。
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
05
写开关量输出状态
输出BIT位
2
0001
对应输出继电器BIT位(DO2)
控制命令
2
0000
控制该路继电器输出为“合”状态位
CRC码
2
9C0A
由主机计算得到CRC码
从机(PDM)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
2.5功能码“06”:
写单路寄存器
例如:
主机要把数据07D0,保存到地址为002C的从机寄存器中去(从机地址码为01)。
通讯数据保存结束后,地址为002C的PDM表原存储信息为:
地址
原来存储数据(16进制)
002C
04B0
主机发送的报文格式:
主机发送
字节数
发送的信息
举例
从机地址
1
01
发送至地址为01的从机
功能码
1
06
写单路寄存器
起始地址
2
002C
要写入的寄存器地址
写入数据
2
07D0
对应的新数据
CRC码
2
4BAF
由主机计算得到的CRC码
从机(PDM)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
2.6功能码“10”:
写多路寄存器
主机利用这个功能码把多个数据保存到PDM表的数据存储器中去。
Modbus通讯规约中的寄存器指的是16位(即2字节),并且高位在前。
这样PDM的存储器都是二个字节。
由于Modbus通讯规约允许每次最多保存60个寄存器,因此PDM一次也最多允许保存60个数据寄存器。
例如:
主机要把0064,0010保存到地址为002C,002D的从机寄存器中去(从机地址码为01)。
通讯数据保存结束后,地址为002C/002D的PDM表内存储信息为:
地址
原来存储数据(16进制)
002C
04B0
002D
1388
主机发送的报文格式:
主机发送
字节数
发送信息
举例
从机地址
1
01
发送至从机01
功能码
1
10
写多路寄存器
起始地址
2
002C
要写入的寄存器的起始地址
保存数据字长度
2
0002
保存数据的字长度(共2字)
保存数据字节长
1
04
保存数据的字节长度(共4字节)
保存数据1
2
04B0
数据地址002C
保存数据2
2
1388
数据地址002D
CRC码
2
FC63
由主机计算得到的CRC码
从机(PDM)响应返回的报文格式:
从机响应
字节数
字节数
举例
从机地址
1
01
来自从机01
功能码
1
10
写多路寄存器
起始地址
2
002C
起始地址为002C
保存数据字长度
2
0002
保存2个字长度的数据
CRC码
2
8001
由从机计算得到的CRC码
三、错误校验码(CRC校验):
主机或从机可用校验码进行判别接收信息是否正确。
由于电子噪声或一些其它干扰,信息在传输过程中有时会发生错误,错误校验码(CRC)可以检验主机或从机在通讯数据传送过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的安全和效率。
MODBUS通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。
CRC码由发送设备(主机)计算,放置于发送信息帧的尾部。
接收信息的设备(从机)再重新计算接收到信息的CRC,比较计算得到的CRC是否与接收到的相符,如果两者不相符,则表明出错。
在进行CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。
●CRC码的计算方法是:
1.预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器;
2.把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低
8位相异或,把结果放于CRC寄存器;
3.把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;
4.如果移出位为0:
重复第3步(再次右移一位);
如果移出位为1:
CRC寄存器与多项式A001(1010000000000001)进行异或;
5.重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
6.重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;
7.将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低
字节进行交换;
8.最后得到的CRC寄存器内容即为:
CRC码。
四、通讯错误信息及数据的处理:
当PDM表检测到除了CRC码出错以外的错误时,必须向主机回送信息,功能码的最高位置为1,即从机返送给主机的功能码是在主机发送的功能码的基础上加128。
以下的这些代码表明有意外的错误发生。
PDM从主机接收到的信息如有CRC错误,则将被PDM表忽略。
PDM返送的错误码的格式如下(CRC码除外):
地址码:
1字节
功能码:
1字节(最高位为1)
错误码:
1字节
CRC码:
2字节。
PDM响应回送如下错误码:
81.非法的功能码。
接收到的功能码PDM表不支持。
82.非法的数据位置。
指定的数据位置超出PDM表的范围。
83.非法的数据值。
接收到主机发送的数据值超出PDM相应地址的数据范围。
附录二:
PDM-820/800AC系列通讯数据表(遥测部分)
说明:
PDM-8X0AC代表PDM-820AC及PDM-800AC两种产品;
820AC系列包括AC/ACM/ACR三种产品,800AC系列包括AC/ACM两种产品。
常规电量寄存器地址和通讯数据表(***PDM-800AC仅有瞬时值测量功能)
电量
瞬时值地址
平均值地址
最大值地址
最小值地址
备注
Uan
0116H
013DH
0164H
018BH
A相相电压
Ubn
0117H
013EH
0165H
018CH
B相相电压
Ucn
0118H
013FH
0166H
018DH
C相相电压
Uab
0119H
0140H
0167H
018EH
AB相线电压
Ubc
011AH
0141H
0168H
018FH
BC相线电压
Uca
011BH
0142H
0169H
0190H
CA相线电压
Ia
011CH
0143H
016AH
0191H
A相电流
Ib
011DH
0144H
016BH
0192H
B相电流
Ic
011EH
0145H
016CH
0193H
C相电流
In
011FH
0146H
016DH
0194H
不平衡电流
W
0120H
0147H
016EH
0195H
有功功率
VAR
0121H
0148H
016FH
0196H
无功功率
VA
0122H
0149H
0170H
0197H
视在功率
PF
0123H
014AH
0171H
0198H
功率因数
FREQ
0124H
014BH
0172H
0199H
频率
WA
0125H
014CH
0173H
019AH
A相有功功率
WB
0126H
014DH
0174H
019BH
B相有功功率
WC
0127H
014EH
0175H
019CH
C相有功功率
VARA
0128H
014FH
0176H
019DH
A相无功功率
VARB
0129H
0150H
0177H
019EH
B相无功功率
VARC
012AH
0151H
0178H
019FH
C相无功功率
VAA
012BH
0152H
0179H
01A0H
A相视在功率
VAB
012CH
0153H
017AH
01A1H
B相视在功率
VAC
012DH
0154H
017BH
01A2H
C相视在功率
PFA
012EH
0155H
017CH
01A3H
A相功率因数
PFB
012FH
0156H
017DH
01A4H
B相功率因数
PFC
0130H
0157H
017EH
01A5H
C相功率因数
KFVa
0131H
0158H
017FH
01A6H
A相电压K值
KFVb
0132H
0159H
0180H
01A7H
B相电压K值
KFVc
0133H
015AH
0181H
01A8H
C相电压K值
KFIa
0134H
015BH
0182H
01A9H
A相电流K值
KFIb
0135H
015CH
0183H
01AAH
B相电流K值
KFIc
0136H
015DH
0184H
01ABH
C相电流K值
保留
0137H
015EH
0185H
01ACH
保留
0138H
015FH
0186H
01ADH
保留
0139H
0160H
0187H
01AEH
电量越上限检测标志位(*除PDM-8X0AC外适用)
地址
字节位
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
电压谐波分量
电流谐波分量
REV
IMB
01CAH
/
/
/
/
/
/
/
/
A
B
C
A
B
C
电压
电流
电量
01CBH
AN
BN
CN
AB
BC
CA
A
B
C
N
W
VAR
VA
PF
FQ
/
01CCH
保留
电量越下限检测标志位(*除PDM-8X0AC外适用)
地址
字节位
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
电压谐波分量
电流谐波分量
REV
IMB
01CEH
/
/
/
/
/
/
/
/
A
B
C
A
B
C
电压
电流
电量
01CFH
AN
BN
CN
AB
BC
CA
A
B
C
N
W
VAR
VA
PF
FQ
/
01D0H
保留
注:
地址01CAH-01CFH寄存器内为上、下限标志位,位为1表示超过(上限)
或低于(下限),位为0表示没有超限。
继电器1状态输出标志位(*除PDM-8X0AC外适用)
地址
字节位
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
状态
电压谐波分量
电流谐波分量
REV
IMB
01DAH
/
/
/
/
/
/
ON
LK
A
B
C
A
B
C
电压
电流
电量
01DBH
AN
BN
CN
AB
BC
CA
A
B
C
N
W
VAR
VA
PF
FQ
/
01DCH
保留
继电器2状态输出标志位(*除PDM-8X0AC外适用)
地址
字节位
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
状态
电压谐波分量
电流谐波分量
REV
IMB
01DEH
/
/
/
/
/
/
ON
LK
A
B
C
A
B
C
电压
电流
电量
01DFH
AN
BN
CN
AB
BC
CA
A
B
C
N
W
VAR
VA
PF
FQ
/
01E0H
保留
注:
地址01DAH-01E0H寄存器内为继电器1和2的状态位,状态位ON位为1表
示继电器动作,为0没有触发,状态位LK:
为1表示继电器闭锁,为0没有闭锁。
其他位:
为1表示相关电量值触发继电器动作,为0则没有触发继电器动作。
电能量寄存器地址和通讯数据表
电能量是以ASCII码的方