PND系列485通信规约ModBus0321分析.docx
《PND系列485通信规约ModBus0321分析.docx》由会员分享,可在线阅读,更多相关《PND系列485通信规约ModBus0321分析.docx(19页珍藏版)》请在冰豆网上搜索。
![PND系列485通信规约ModBus0321分析.docx](https://file1.bdocx.com/fileroot1/2023-5/23/b1031f79-3240-40c4-9ce5-b142e07a7e1e/b1031f79-3240-40c4-9ce5-b142e07a7e1e1.gif)
PND系列485通信规约ModBus0321分析
PND系列保护测控装置
通信规约
南京禾东电力科技有限公司
2012-8
*南京禾东电力科技有限公司对该说明书有可能修改,请注意版本更新!
版权所有,未经本公司之书面许可,本手册中任何段落、章节内容均不得被摘抄、拷贝或以任何形式复制与传播,否则一切后果由违者承担。
本公司保留一切法律权利。
注意CAUTION:
◆该装置必须有专业人员进行安装与检修
◆在对该装置进行任何内部或外部操作前、必须切断输入信号和电源;
◆始终使用合适的电压检测装置来确定仪表各部位无电压
◆提供给该装置的电参数需在额定范围内
下述情况会导致装置损坏或装置工作的异常:
◆辅助电源电压超范围
◆配电系统频率超范围
◆电流或电压输入极性不正确
◆带电拨通信插头
◆未按要求连接端子连线
目录
5.通讯规约1
5.1.规约简述1
5.2.通讯举例说明2
5.3.通讯地址表7
5.4数据转换13
5.通讯规约
5.1.规约简述
Modbus通讯规约被广泛的作为系统集成的标准。
当通讯命令发送至仪器时,符合相应地址码的设备接收通讯命令,读取信息,如果没有出错则执行相应的任务,然后把执行结果返送给发送者;如果出错则返送错误报告信息(CRC16校验码出错则不返送任何信息)或者不返送任何信息。
其通讯数据帧格式如下:
地址码
功能码
数据区
校验码
8位
8位
N×8位
16位CRC
地址码:
地址码是信息帧的第一个字节(8位),从0到255。
这个字节表明由用户设置地址的从机将接收由主机发送来的信息。
每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能相应回送。
当从机回送信息时,相应的地址码表明该信息来自于相应地址的从机。
功能码:
主机发送的功能码告诉从机执行怎么样的任务,从机的功能码则表明从机响应主机相应任务进行了操作。
Modbus通讯规约定义的功能码为01H到7FH,多功能电力仪表使用了其中一部分功能码。
下表列出了所用到的功能码的具体含义及操作。
代码(Hex)
含义
操作
01H
读状态量输出
读取一路或多路开关量输出状态数据(遥控)
02H
读开关量输入
读取一路或多路开关量状态输入数(遥信)
03H
读取数据
读取指定寄存器开始的一个或多个数据
05H
写开关量输出
控制一路继电器“合/分”输出,遥控
06H
写单个寄存器
把设置的单个数值写入指定的寄存器
10H
写多个寄存器
把设置的多个数值写入指定的寄存器
22H
时钟对时广播
把设置的时间值写入网络内的从机
注:
如果从机发送的功能码的最高位是1(功能码>127),则表明从机没有响应操作或发送出错。
数据区:
数据区是根据不同的功能码而不同。
数据区可以是实际数值,设置点,主机发送给从机或从机发送给主机的地址。
数据区包含需要从机执行什么动作或由从机采集的返送信息,这些信息可以是数值、参考地址等等。
例如,功能码告诉从机读取寄存器的值,则数据区必须包含要读取的寄存器的起始地址及读取长度。
如果功能码告诉从机设置某些连续寄存器的值,则数据区还要包含这些数值。
对于不同的从机,地址和数据信息可能都不相同。
校验码:
校验码可用于主机或从机判断接受信息是否出错。
有时由于电子噪音或其它一些干扰,信息在传输过程中会发生细微的变化,这时自己根据信息计算所得的检验码与信息中包含的校验码就会不一致,从而判断接受信息出错。
校验码保证了主机或从机对在传送中出错的信息不起作用,增加了系统的安全和效率。
校验码采用CRC-16校验方法。
计算CRC码的步骤为:
(1).预置16位寄存器为FFFFH。
称此寄存器为CRC寄存器;
(2).把第一个8位数据与CRC寄存器的低位相异或,把结果放于CRC寄存器;
(3).把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;
(4).如果最低位为0:
重复第3步(再次移位)如果最低位为1:
CRC寄存器与多项式A001(1010000000000001)进行异或;
(5).重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
(6).重复步骤2到步骤5,进行下一个8位数据的处理;
(7).最后得到的CRC寄存器即为CRC码。
(CRC码=CRC_L+CRC_H)
出错返送:
从主机接收到的信息如有CRC错误,则将被忽略。
从机返送的错误码的格式如下:
地址码:
1字节
功能码:
1字节(最高位为1)
错误码:
1字节
CRC码:
2字节
响应回送如下出错命令。
81–非法的数据
5.2.通讯举例说明
5.2.1功能码“01”:
读1路或多路开关量输出状态
例如:
主机要读取地址为01,输出状态量OUT1,OUT2的输出状态。
从机(XXX1)数据寄存器的地址和数据为:
起始位地址
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码
从机(XXX1)响应返回的报文格式:
从机响应
字节数
返回的信息
备注
从机地址
1
01
来自从机01
功能码
1
01
读开关量输出状态
数据长度
1
01
1个字节(8个BIT位)
OUT状态数据
1
02
OUT寄存器内容bit0对应OUT1
DO2输出状态为“1”,DO1输出状态为“0”
CRC码
2
D049
由XXX1仪表计算得到CRC码
5.2.2功能码“02”:
读1路或多路开关量输入状态
例如:
主机要读取地址为01,开关量IN1—IN4的输入状态。
从机(XXX1)数据寄存器的地址和数据为:
起始DI地址
DI寄存器数据(16进制)
备注
0000
0B
IN1/IN2/IN4状态为“1”,DI3状态为“0”
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
02
读开关量输入状态
起始BIT位
2
0000
起始BIT位地址为0000
读数据长度
2
0004
读取4路开关量输入状态位
CRC码
2
79C9
由主机计算得到CRC码
从机(XXX1)响应返回的报文格式:
从机响应
字节数
返回的信息
备注
从机地址
1
01
来自从机01
功能码
1
02
读开关量输入状态
数据长度
1
05
1个字节(8个BIT位)
DI状态数据
1
DI0
1个字节(8个BIT位)
BIT0~BIT7:
分别对应外部开入1至外部开入8
DI状态数据
1
DI1
BIT0~BIT3:
分别对应外部开入9至外部开入12
BIT4:
控制回路断线;BIT5:
PT断线
EVT状态数据
1
EVT0
对应保护事件表,按顺序排列(见下表)
EVT状态数据
1
EVT1
对应保护事件表,按顺序排列(见下表)
EVT状态数据
1
EVT2
对应保护事件表,按顺序排列(见下表)
CRC码
2
E04F
由XXX1保护计算得到CRC码
PND3204遥信回码报文举例
0102050030000000AD52:
控制回路断线,PT断线
保护事件表(PND3101线路保护测控装置)
事件代码
名称
事件代码
名称
EVT0BIT0
电流Ⅰ段动作
EVT1BIT6
保护启动
EVT0BIT1
电流Ⅱ段动作
EVT1BIT7
低压解列
EVT0BIT2
电流Ⅲ段动作
EVT2BIT0
准同期合闸动作
EVT0BIT3
零流Ⅰ段动作
EVT2BIT1
二次重合闸动作
EVT0BIT4
零流Ⅱ段动作
EVT2BIT2
事件结束号
EVT0BIT5
零流Ⅲ段动作
20
EVT0BIT6
重合闸动作
21
EVT0BIT7
低周动作
22
EVT1BIT0
过负荷动作
23
EVT1BIT1
开关不跳闸
24
EVT1BIT2
电流反时限动作
25
EVT1BIT3
零序反时限动作
26
EVT1BIT4
电流加速段动作
27
EVT1BIT5
零流加速段动作
28
保护事件表(PND3204厂用变压器)
事件代码
名称
事件代码
名称
EVT0BIT0
电流Ⅰ段动作
EVT1BIT6
保护启动
EVT0BIT1
电流Ⅱ段动作
EVT1BIT7
低电压动作
EVT0BIT2
电流Ⅲ段动作
EVT2BIT0
准同期合闸动作
EVT0BIT3
零流Ⅰ段动作
EVT2BIT1
二次重合闸动作
EVT0BIT4
零流Ⅱ段动作
EVT2BIT2
低侧零流Ⅰ段动作
EVT0BIT5
零流Ⅲ段动作
EVT2BIT3
低侧零流Ⅱ段动作
EVT0BIT6
重合闸动作
EVT2BIT4
低侧零流Ⅲ段动作
EVT0BIT7
低周动作
EVT2BIT5
低侧零序反时限动作
EVT1BIT0
过负荷动作
EVT2zBIT6
事件结束号
EVT1BIT1
开关不跳闸
24
EVT1BIT2
电流反时限动作
25
EVT1BIT3
零序反时限动作
26
EVT1BIT4
电流加速段动作
27
EVT1BIT5
零流加速段动作
28
保护事件表(PND3904PT保护装置)
事件代码
名称
事件代码
名称
EVT0BIT0
IPT过压I段
EVT1BIT6
保护启动
EVT0BIT1
IPT过压II段
EVT1BIT7
低压解列
EVT0BIT2
IPT低压I段
EVT2BIT0
准同期合闸动作
EVT0BIT3
IIPT低压II段
EVT2BIT1
二次重合闸动作
EVT0BIT4
IIPT零序过压
EVT2BIT2
事件结束号
EVT0BIT5
零流Ⅲ段动作
20
EVT0BIT6
IIPT过压I段
21
EVT0BIT7
低周动作
22
EVT1BIT0
IPT零序过压
23
EVT1BIT1
开关不跳闸
24
EVT1BIT2
IPT低压I段
25
EVT1BIT3
零序反时限动作
26
EVT1BIT4
IIPT过压II段
27
EVT1BIT5
IIPT低压I段
28
5.2.3功能码“03”:
读多路寄存器输入
XXX1一次最多允许读取64个数据寄存器.
例如:
主机要读取地址为01,起始地址为0116的3个从机寄存器数据。
从机(XXX1)数据寄存器的地址和数据为:
寄存器地址
寄存器数据(16进制)
对应XXX1电量
000H
03E9
UAA相电压
001H
03E8
UBB相电压
002H
03E7
UCC相电压
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
03
读取寄存器
起始地址
2
0000
起始地址为0000
数据长度
3
000A
读取10个寄存器(共20个字节)
CRC码
2
C5CD
由主机计算得到CRC码
从机(XXX1)响应返回的报文格式:
从机响应
字节数
返回的信息
备注
从机地址
1
01
来自从机01
功能码
1
03
读取寄存器
返回字节数
1
0X14
10个寄存器共20个字节
寄存器数据1
2
03E9
测量A相电流(系数4096/6=682.67)
寄存器数据2
2
03E8
测量B相电流(系数4096/6=682.67)
寄存器数据3
2
03E7
测量C相电流(系数4096/6=682.67)
寄存器数据4
2
03E7
测量A相电压(系数4096/120=34.13)
寄存器数据5
2
03E7
测量B相电压(系数4096/120=34.13)
寄存器数据6
2
03E7
测量C相电压(系数4096/120=34.13)
寄存器数据7
2
03E7
有功P(系数4096/(120*6*3)=1.896)
寄存器数据8
2
03E7
无功Q(系数4096/(120*6*3)=1.896)
寄存器数据9
2
03E7
功率因数Cos(系数4096/
(1)=4096)
寄存器数据10
2
03E7
频率FCos(4096/(64)=64)
CRC码
2
BC5B
由XXX1仪表计算得到CRC码
注:
测量数据最高位为符号位
PND31012204遥测回码报文举例,电压50V,电流5A
010314540D0000550DA906A906AB06C612D004FD17800C43C300
PND3904遥测回码报文举例电压50V
01031CAA06AA06AA06D60ADA0ADD0A0100AA06AA06AA06D70AD40AE30A0000D700007E22,
5.2.4功能码“05”:
写1路开关量输出(“遥控”)
例1:
开关量输出点OUT1,其当前状态为“分”,主机要控制该路继电器“合”。
控制命令为:
“FF00”为控制继电器“合”;
“0000”为控制继电器“分”;
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
05
写开关量输出状态
输出BIT位
2
0000
对应输出继电器BIT0位(OUT1)
控制命令
2
FF00
控制该路继电器输出为“合”状态位
CRC码
2
8C3A
由主机计算得到CRC码
从机(XXX1)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
例2:
开关量输出点OUT2,其当前状态为“合”,主机要控制该路继电器“分”。
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
05
写开关量输出状态
输出BIT1位
2
0001
对应输出继电器BIT1位(OUT2)
控制命令
2
0000
控制该路继电器输出为“分”状态位
CRC码
2
9C0A
由主机计算得到CRC码
从机(XXX1)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
5.2.5功能码“06”:
写单路寄存器
例如:
主机要把数据0x0064,保存到地址为CCH的从机寄存器中去(从机地址码为01)。
通讯数据保存结束后,寄存器地址为CCH的XXX1表原存储信息为:
寄存器地址
原来存储数据(16进制)
CCH
0x0064
主机发送的报文格式:
主机发送
字节数
发送的信息
举例
从机地址
1
01
发送至地址为01的从机
功能码
1
06
写单路寄存器
起始地址
2
00CC
要写入的寄存器地址
写入数据
2
0064
对应的新数据
CRC码
2
481E
由主机计算得到的CRC码
从机(XXX1)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
5.2.6功能码“10”:
写多路寄存器
主机利用这个功能码把多个数据保存到从机的数据存储器中去。
Modbus通讯规约中的寄存器指的是16位(即2字节)。
这样从机存储器都是二个字节。
XXX1一次最多允许保存25个数据寄存器。
例如:
主机要把3344,1122保存到地址为0020,0021的从机寄存器中去(从机地址码为01)。
通讯数据保存结束后,地址为0020/0021的表内存储信息为:
地址
原来存储数据(16进制)
0020
3344
0021
1122
主机发送的报文格式:
主机发送
字节数
发送信息
举例
从机地址
1
01
发送至从机01
功能码
1
10
写多路寄存器
起始地址
2
0020
要写入的寄存器的起始地址
保存数据字长度
2
0002
保存数据的字长度(共2字)
保存数据字节长
1
04
保存数据的字节长度(共4字节)
保存数据1
2
3344
数据地址0020
保存数据2
2
1122
数据地址0021
CRC码
2
32AF
由主机计算得到的CRC码
从机响应返回的报文格式:
从机响应
字节数
字节数
举例
从机地址
1
01
来自从机01
功能码
1
10
写多路寄存器
起始地址
2
0020
起始地址为001C
保存数据字长度
2
0002
保存2个字长度的数据
CRC码
2
4002
由从机计算得到的CRC码
5.2.7功能码“16”:
时钟对时
例如:
主机要把时间数据2008年10月31日星期513时54分30秒对从机网络进行对时。
主机发送的报文格式:
主机发送
字节数
发送的信息
举例
广播地址
1
01
地址01
功能码
1
0X16
时钟对时
数据长度
2
0007
广播数据的长度字节
广播数据1
2
2008
年
广播数据2
2
0010
月
广播数据3
2
0031
日
广播数据4
2
0005
星期(1~7)
广播数据5
2
0013
时
广播数据6
2
0054
分
广播数据7
2
0030
秒
CRC码
2
2B80
由主机计算得到的CRC码
注:
时间数据为BCD码
从机(XXX1)不返回报文。
5.3.通讯地址表
5.3.101功能码读取1路或多路开关量输出状态:
05功能码执行1路开关量输出:
系统参数
地址
项目
00H
YK1
01H
YK2
5.3.202功能码读取1路或多路开关量输入状态:
系统参数
地址
项目
00H
IN1
01H
IN2
02H
IN3
03H
IN4
5.3.303功能码读取遥测量
基本电量
地址
项目3201
项目3204
项目3904
000H(00)
测量A相电流
测量A相电流
1Ua
001H(01)
测量B相电流
测量B相电流
1Ub
002H(02)
测量C相电流
测量C相电流
1Uc
003H(03)
测量A相电压
测量A相电压
1Uab
004H(04)
测量B相电压
测量B相电压
1Ubc
005H(05)
测量C相电压
测量C相电压
1Uca
006H(06)
P有功
P有功
1Uo
007H(07)
Q无功
Q无功
2Ua
008H(08)
Cos功率因数
Cos功率因数
2Ub
009H(09)
F频率
F频率
2Uc
00AH(10)
2Uab
00BH(11)
2Ubc
00CH(12)
2Uca
00DH(13)
2Uo
00EH(14)
00FH(15)
010H(16)
011H(17)
012H(18)
013H(19)
014H(20)
1、Rx:
通过通讯读取的寄存器内容(读值);
2、PT:
电压互感器一次/二次值;
CT:
电流互感器一次/二次值;
三相总功率,电能数据采用32位,即四字节(2个字)格式;
其余电量数据采用16位,即二字节(1个字)格式;
所有读值均为16进制码,按上表计算后才能得到相应的工程量;
电压、电流、频率、视在功率、电能、为无符号数;
功率因数、有功功率、无功功率为有符号数,读值(Rx)的最高位(Bit)为1时为负数,应取补码(所有位取反加1)。