PS690UModBus通讯规约201.docx
《PS690UModBus通讯规约201.docx》由会员分享,可在线阅读,更多相关《PS690UModBus通讯规约201.docx(18页珍藏版)》请在冰豆网上搜索。
PS690UModBus通讯规约201
MODBUS_RTU通讯规约(本协议采用主从问答方式)
PS690U系列测控保护装置:
ModBus网络只有一个主机,所有通信都由他发出。
网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所通信设备决定。
采样这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。
PS690U系列测控保护装置提供了标准的RS-485通讯接口及ModBus通讯协议,这个通讯协议已广泛被国内外电力行业及工控行业作为系统集成的标准。
通讯数据的类型及格式:
信息传输为异步方式,并以字节为单位。
在主站和从站之间传递的通讯信息是11位的字格式:
字格式(串行数据)
11位二进制
起始位
1位
数据位
8位
奇偶校验位
1位:
有奇偶校验位/无:
无奇偶校验位
停止位
1位:
有奇偶校验位/2位:
无奇偶校验位
●通讯数据(信息帧)格式
数据格式:
地址码
功能码
数据区
错误校检
数据长度:
1字节
1字节
N字节
16位CRC码(冗余循环码)
★注:
1、1个字节由8位二进制数组成(既8bit)。
2、ModBus是Modicon公司的注册商标。
3、“从机”在本文件中既为PS690U。
一、通讯信息传输过程:
当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。
返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。
如果CRC校验出错就不返回任何信息。
1.1地址码:
地址码是每次通讯信息帧的第一字节(8位),从0到255。
这个字节表明由用户设置地址的从机将接收由主机发送来的信息。
每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。
当从机回送信息时,回送数据均以各自的地址码开始。
主机
发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。
相应的地址码表明该信息来自于何处。
主机广播地址码为0。
1.2功能码:
是每次通讯信息帧传送的第二个字节。
ModBus通讯规约可定义的功能码为1到127。
PS690U系列测控保护装置仅用到其中的一部分功能码。
作为主机请求发送,通过功能码告诉从机应执行什么动作。
作为从机响应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。
表1.1PS690U支持的MODBUS部分功能码
功能码
名称
作用
0x01
读取线圈状态
取得一组逻辑线圈的当前状态(ON/OFF)
0x02
读取输入状态
取得一组开关输入的当前状态(ON/OFF)
0x03
读取保持寄存器
在一个或多个保持寄存器中取得当前的二进制值
0x04
读取输入寄存器
在一个或多个输入寄存器中取得当前的二进制值
0x05
强置单线圈
强置一个逻辑线圈的通断状态
0x06
预置单寄存器
把具体二进制值装入一个保持寄存器
0x10
预置多寄存器
把具体二进制值装入一串连续的保持寄存器
表1.2MODBUS功能码与数据类型对应表
功能码
功能
数据类型
0x01
读
位
0x02
读
位
0x03
读
整型、字符型、状态字、浮点型
0x04
读
整型、状态字、浮点型
0x05
写
位
0x06
写
整型、字符型、状态字、浮点型
0x10
写
整型、字符型、状态字、浮点型
表1.3MODBUS部分功能码与PS690U数据抽象表
功能码
名称
PS690U抽象体
0x01
读取线圈状态
对应装置复归及遥控开关状态
0x02
读取输入状态
对应装置的遥信、告警遥信、保护动作元件
0x03
读取保持寄存器
对应装置的时间、区号、定值、压板
0x04
读取输入寄存器
对应装置的遥测量、电度量
0x05
强置单线圈
对应装置的复归及遥控开关
0x06
预置单寄存器
对应装置的时间、区号、定值、压板
0x10
预置多寄存器
对应装置的时间、区号、定值、压板
1.3数据区:
数据区包括需要由从机返送何种信息或执行什么动作。
这些信息可以是数据(如:
开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。
例如,主机通过功能码04告诉从机返回输入寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度),从机返回的数据包括寄存器的数据长度及数据内容。
对于不同的从机,地址和数据信息都不相同(应给出通讯信息表)。
690U系列测控保护装置采用Modbus通讯规约,主机(PLC、RTU、PC机、DCS等)利用通讯命令(功能码03或04),可以任意读取其数据寄存器(其数据信息表详见附带的Excel文件)。
PS690U系列测控保护装置的数据寄存器存储的量多达上百个(如:
电流、电压、功率、定值、软压板、时间等),并且都是16位(2字节)的二进制数据,并且高位在前。
PS690U响应的命令格式是从机地址、功能码、数据区及CRC码。
数据区的数据都是两个字节,并且高位在前。
二、MODBUS功能码简介
2.1功能码“02”:
读1路或多路开关量状态输入
例如:
主机要读取地址为01,起始地址为0x0000,开关量DI0~DI29的输入状态。
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
01
读开关量输出状态
起始BIT位
2
0000
起始BIT位地址为0000
读数据长度
2
001E
读取30路开关量输入状态位
CRC码
2
BC02
由主机计算得到CRC码
从机(PS690U)响应返回的报文格式:
从机响应
字节数
返回的信息
备注
从机地址
1
01
来自从机01
功能码
1
01
读开关量输入状态
数据长度
1
04
4个字节(32个BIT位)
数据1
1
CD
DI7-DI0
数据2
1
6B
DI15-DI8
数据3
1
B2
DI23-DI16
数据4
1
0E
DI29-DI24(空缺高位补零)
CRC码
2
41C5
由从机计算得到CRC码
2.2功能码“01”:
读1路或多路开关量输出状态
例如:
主机要读取地址为01,起始地址为0x0000,开关量DO0~DO29的输出状态。
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
01
读开关量输出状态
起始BIT位
2
0000
起始BIT位地址为0000
读数据长度
2
001E
读取30路继电器输出状态位
CRC码
2
BC02
由主机计算得到CRC码
从机(PS690U)响应返回的报文格式:
从机响应
字节数
返回的信息
备注
从机地址
1
01
来自从机01
功能码
1
01
读开关量输出状态
数据长度
1
04
4个字节(32个BIT位)
数据1
1
CD
DO7-DO0
数据2
1
6B
DO15-DO8
数据3
1
B2
DO23-DO16
数据4
1
0E
DO29-DO24(空缺高位补零)
CRC码
2
41C5
由从机计算得到CRC码
2.3功能码“03”或“04”:
读保持寄存器或输入寄存器数据
例如:
主机要读取地址为01,起始地址为0000的3个从机输入寄存器数据。
从机(PS690U)数据寄存器的地址和数据为:
寄存器地址
寄存器数据(16进制)
对应PS690U电量
0000
1784
线电压Uab
0001
1780
线电压Ubc
0002
178A
线电压Uca
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
04
读取输入寄存器
起始地址
2
0000
起始地址为0116
读数据长度
2
0003
读取3个寄存器(共6个字节)
CRC码
2
B00B
由主机计算得到CRC码
从机(PS690U)响应返回的报文格式:
从机响应
字节数
返回的信息
备注
从机地址
1
01
来自从机01
功能码
1
04
读取输入寄存器
读取字
1
06
3个寄存器共6个字节
寄存器数据1
2
1784
地址为0116内存的内容
寄存器数据2
2
1780
地址为0117内存的内容
寄存器数据3
2
178A
地址为0118内存的内容
CRC码
2
19A1
由从机计算得到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码
从机(PS690U)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
例2:
开关量输出点DO2,其当前状态为“合”,主机要控制该路继电器“分”。
主机发送的报文格式:
主机发送
字节数
发送的信息
备注
从机地址
1
01
发送至地址为01的从机
功能码
1
05
写开关量输出状态
输出BIT位
2
0001
对应输出继电器BIT位(DO2)
控制命令
2
0000
控制该路继电器输出为“合”状态位
CRC码
2
9C0A
由主机计算得到CRC码
从机(PS690U)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
2.5功能码“06”:
写单路保持寄存器
例如:
主机要把数据07D0,保存到地址为0005的从机寄存器中去(从机地址码为01)。
通讯数据保存结束后,地址为0005的PS690U表原存储信息为:
地址
原来存储数据(16进制)
0005
04B0
主机发送的报文格式:
主机发送
字节数
发送的信息
举例
从机地址
1
01
发送至地址为01的从机
功能码
1
06
写单路寄存器
起始地址
2
0005
要写入的寄存器地址
写入数据
2
07D0
对应的新数据
CRC码
2
9A67
由主机计算得到的CRC码
从机(PS690U)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
2.6功能码“10”:
写多路保持寄存器
主机利用这个功能码把多个数据保存到PS690U表的数据存储器中去。
Modbus通讯规约中的寄存器指的是16位(即2字节),并且高位在前。
这样PS690U的存储器都是二个字节。
由于PS690U的保持寄存器(含时间、区号、定值、压板等)由多种类型的数据组成,因此一次只允许预置同种类型的多路数据寄存器。
例如:
主机要把044C,09C4保存到地址为0005,0006的从机寄存器中去(从机地址码为01)。
通讯数据保存结束后,地址为0005/0006的PS690U表内存储信息为:
地址
原来存储数据(16进制)
0005
04B0
0006
1388
主机发送的报文格式:
主机发送
字节数
发送信息
举例
从机地址
1
01
发送至从机01
功能码
1
10
写多路保持寄存器
起始地址
2
0005
要写入的寄存器的起始地址
保存数据字长度
2
0002
保存数据的字长度(共2字)
保存数据字节长
1
04
保存数据的字节长度(共4字节)
保存数据1
2
044C
数据地址0005
保存数据2
2
09C4
数据地址0006
CRC码
2
F4B4
由主机计算得到的CRC码
从机(PS690U)响应返回的报文格式:
从机响应
字节数
字节数
举例
从机地址
1
01
来自从机01
功能码
1
10
写多路寄存器
起始地址
2
0005
起始地址为0005
保存数据字长度
2
0002
保存2个字长度的数据
CRC码
2
51C9
由从机计算得到的CRC码
三、错误校验码(CRC校验):
主机或从机可用校验码进行判别接收信息是否正确。
由于电子噪声或一些其它干扰,信息在传输过程中有时会发生错误,错误校验码(CRC)可以检验主机或从机在通讯数据传送过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的安全和效率。
MODBUS通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。
CRC码由发送设备(主机)计算,放置于发送信息帧的尾部。
接收信息的设备(从机)再重新计算接收到信息的CRC,比较计算得到的CRC是否与接收到的相符,如果两者不相符,则表明出错。
在进行CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。
四、通讯错误信息及数据的处理:
当PS690U检测到除了CRC码出错以外的错误时,必须向主机回送信息,功能码的最高位置为1,即从机返送给主机的功能码是在主机发送的功能码的基础上加128。
以下的这些代码表明有意外的错误发生。
PS690U从主机接收到的信息如有CRC错误,则将被PS690U测控保护装置忽略。
PS690U返送的错误码的格式如下(CRC码除外):
地址码:
1字节
功能码:
1字节(最高位为1)
错误码:
1字节
CRC码:
2字节。
PS690U响应回送如下错误码:
错误码
内容
备注
1
非法的功能码
2
非法的数据地址
3
非法的数据值
4
从机执行失败
5
确认
需要长时间才能执行完毕,防止主机超时
6
从机设备忙
7
否定确认
8
从机读内存奇偶错
附录A:
PS690U各寄存器的起始地址及分类
A.1PS690U各寄存器的起始地址
PS690U的DI、DO、AI、AO的起始地址均为0x0000。
A.2开关量输入状态DI表分类
序号
名称
读权
写权
备注
1
SOE事件位序列
Y
N
e.g.《速断动作》位,数量因工程而定
2
COS事件位序列
Y
N
e.g.《AD自检》位,数量因工程而定
A.3开关量输出状态DO表分类
序号
名称
读权
写权
备注
1
远方复归
Y
Y
该类开出只有一个数据地址
2
遥控输出
Y
Y
每路开关量输出占一个数据地址
A.4输入寄存器数据AI表分类
序号
名称
读权
写权
备注
1
遥测量
Y
N
e.g.《A相电流Ia》,数量因工程而定
2
电度量
Y
N
e.g.《有功电度》,数量因工程而定
遥测值=寄存器值*工程量程/物理量程=寄存器值*系数
遥测寄存器值必须要用数据类型short截数,e.g.(0xE50x75)=-6795;而非58741。
乘系数后的测量值为:
-6795*1000/30000=-6795*0.0333333334=-226.5
电度值=(有符号电度寄存器值高16位*65535+无符号电度寄存器值低16位)*系数;即电度值是由2个数据寄存器组成。
由两个电度寄存器值组成的电度必须要用数据类型int截数,e.g.(0xE50x75)高16位;(0xE60x75)低16位,合成后(0xE50x750xE60x75)=-6795*65535+58997=-445258123,乘系数0.001后的实际电度值为:
-445258.123
对于PS690U系列测控保护传送的值均为系统二次侧的值,要得到一次侧的值必须要在主站上乘于CT或PT的系数。
A.5保持寄存器数据AO表分类
序号
名称
读权
写权
备注
1
对时
Y
Y
时间寄存器数必须为4个
2
定值区号
Y
Y
只有一个数据地址,区号范围:
[1,10]
3
当前区号对应定值
Y
Y
e.g.《速断定值》,数量因工程而定
4
软压板
Y
Y
e.g.《过负荷压板》,数量因工程而定
A.6时间寄存器的格式
数据地址
名称
举例:
2003、04、1110:
17:
23446ms
0x0000
年高、低字节
0x07D3
0x0001
月、日
0x040B
0x0002
时、分
0x0A11
0x0003
毫秒高、低字节
0x5B96
附录B:
PS690U报文举例
B.1读遥测及电度量的数据帧
e.g.50个寄存器数据其中26个属遥测、24个属电度
TX:
01040000001931C0
RX:
01043200000000000000010003000300000000000000000000000061A8FFFFFFFF00000001FFFFFFFEFFFFFFFF00000001FFFFFFFE3EAD
前26个遥测寄存器数据拼凑成13个遥测量分别为:
0、0、0、1、3、3、0、0、0、0、0、0、25000
前24个电度寄存器数据拼凑成6个电度量分别为:
-1、1、-2、-1、1、-2
B.2读开入量、告警遥信及保护动作元件数据帧
e.g.34个遥测点,其值都为0
TX:
010200000022F813
RX:
0102050000000000A252
B.3读定值区号的数据帧
定值区号的数据地址为0x0004。
TX:
010300040001C5CB
RX:
01030200017984
B.4读当前运行区号对应定值的数据帧
定值的数据地址为0x0005。
TX:
010300050002D40A
RX:
010304044C09C43D17
B.5读压板的数据帧
软压板的起始数据地址与定值个数有关,其起始地址为0x0005+定值个数;若PS690U装置有13个定值,则压板起始数据的种子为:
0x0012
TX:
010300120002640E
RX:
010304000000013BF3
B.6远方复归数据帧
远方复归的数据地址为0x0000。
TX:
01050000FF008C3A
RX:
01050000FF008C3A
B.7遥控数据帧
遥控第一路开关的数据地址为0x0001。
控合第一路开关:
TX:
01050001FF00DDFA
RX:
01050001FF00DDFA
控分第一路开关:
TX:
0105000100009C0A
RX:
0105000100009C0A
B.8对时数据帧
时间的起始数据地址为0x0000,数据寄存器数必须为4
e.g.2003/04/1110:
17:
23446ms
TX:
0110000000040807D3040B0A115B965997
RX:
011000000004C1CA
B.9切换定值区号数据帧
定值区号的数据地址为0x0004。
TX:
01060004000109CB
RX:
01060004000109CB
或
TX:
0110000400010200016614
RX:
0110000400014008
B.10写定值数据帧
定值的起始数据地址为0x0005。
TX:
0106000507D09A67
RX:
0106000507D09A67
或
TX:
01100005000204044C09C4F4B4
RX:
01100005000251C9
B.11写压板数据帧
软压板的起始数据地址与定值个数有关,其起始地址为0x0005+定值个数;若PS690U装置有13个定值,则压板起始数据的种子为:
0x0012
TX:
010600120001E80F
RX:
010600120001E80F
或
TX:
0110001200020400000001B2BA
RX:
011000120002E1CD
备注:
软压板的起始数据地址在每个型号的装置中的值可能会不同。