CSR-03系列综保装置
MODBUS通讯规约V2.0
1.通讯参数和传输特性
传输方式:异步串行通信方式。
MODBUS规约模式:RTU模式。
传输速率:2400 bps,4800bps,9600bps。
串行口通讯数据格式:1 个起始位,8 个数据位, 无校验位,1个停止位。
最大传输距离:1200米。
通讯介质:推荐采用0.5mm的双绞线,不带屏蔽层。(原因是如果使用屏蔽双绞线,但现场接地处理不好反而影响通讯质量)。
网络连接主站数目:1个。
网络连接从站数目:最多31个。
应答时间:小于4.5个byte传输时间(帧间隔最小时间) + 10ms。
2.网络连接
RS-485网络的匹配电阻选取:双绞线网络两端的匹配电阻选取,以现场通信正常为准,一般地1.2km时取120Ω,600m时取220Ω,300m时取330Ω,如通信误码率较大,观察通信时的波形,匹配电阻做适当改变:
末端匹配电阻合适末端匹配电阻偏小末端匹配电阻偏大
3.通信参数选择
通信站号:在通讯参数中修改装置地址,范围1~99,禁止使用0作为装置地址,地址0作为广播地址使用。
通信波特率: 通讯参数中修改装置485口,修改通信波特率:选择范围: 2400bps, 4800bps,9600bps。
4.MODBUS协议通用格式
4.1 支持的MODBUS功能码
功能码02H: 读取开关量输入(读实遥信和虚遥信)。
功能码03H: 读取保持寄存器(读事件记录等)
功能码04H: 读取输入寄存器(读远动遥测)
功能码05H: 强制单点继电器输出(远方复归)。
功能码06H: 向保持寄存器写单个字(遥控跳闸、遥控合闸的选择和执行操作)
功能码10H: 向保持寄存器(内存区)写多个16位的字(通讯对时)。
4.2 异常响应报文格式
由于软件编程错误,对协议理解错误或通讯干扰等原因,MODBUS 通信子站接收到主站的报文后,可以采用异常响应报文给予回答,异常响应报文格式举例如下:
子站通过校验,发现主站报文有问题,将响应报文将主站的功能码最高位(D7)置1,如例
4.3 时间格式
本规约中使用到的对时报文的时间格式,事件记录中的时间格式,参见下面说明。
4.4 MODBUS规约中CRC码的计算
采用RTU通讯方式的MODBUS规约,要将报文中除CRC码外的所有字节进行CRC码校验,校验程序如下:static unsigned char auchCRCHi[] = { /* Table of CRC values for high-order byte */
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
};
static unsigned char auchCRCLo[] = { /* Table of CRC values for low-order byte */
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
0x43, 0x83, 0x41, 0x81, 0x80, 0x40 };
unsigned short Modbus_CRC16(unsigned char *puchMsg, unsigned short usDataLen)
{ unsigned char uchCRCHi = 0xFF ; /* high CRC byte initialized */
unsigned char uchCRCLo = 0xFF ; /* low CRC byte initialized */
unsigned short uIndex ; /* will index into CRC lookup*/
while (usDataLen--) /* pass through message buffer */
{
uIndex = uchCRCHi ^ *puchMsg++ ; /* calculate the CRC */
uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;
uchCRCLo = auchCRCLo[uIndex] ;
}
return (uchCRCHi << 8 | uchCRCLo) ;
}
5 报文格式详解
以下报文以CSR 为例说明,相应通讯信息点表见CSR 点表。 报文中的字节都是以16进制的方式显示。
5.1 读全遥信
注意:
1)CSR 供有32个遥信(实遥信和虚遥信),因此主站从开始地址0读0x20个遥信点。
2)本例应答报文中:数值01的D0位为1代表CSR 的“远方控制”为1;数值02中的D1位为1代表CSR 的跳位信号为1。
3)子站响应中的LSB ,MSB 指D0位和D7位,通讯点号依次采用升序的方式,比如第一个字节的D0位为遥信点号1…它的D7位为遥信点号8;第二个节字的D0位就为遥信点号9,它的
D7位为遥信点号16,依次类推。
5.2 读全遥测(远动遥测)
注意:
1)遥测报文第一个测点为“设备状态字”,不用入库,第二个开始才是“频率”,以后依次后推。 2)远动遥测值的数据格式采用带品质描述的被测值(MEA )定义 BIT0 = 溢出位(OV ) BIT1 = 差错位(ER ) BIT2 = 测试位(TEST ),该位置1表示本遥测量为综自功能 BIT15~BIT3 = 被测值(MV AL ),范围 -4096 ~4095 3)“设备状态字”占用两个字节, D1,D0为01(即低位0x01)表示无保护事件; D1,D0为11(即低位0x03)表示请求读保护事件, 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
例:========CSR读全遥测========
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
5.3 读电度值
子站响应:
1)每个电度值由4个字节组成一个32位字,它的单位是W(瓦特)或Var(乏)
2)报文中先收到的是电度的低位字节,后收到的是高位字节。
例:========CSR读电度值========
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
5.4 广播对时
主站发送:
1)对时时间为07年1月23日18时22分47秒000毫秒
2)广播对时的从机地址设为00
5.5 广播信号复归
方式一:采用功能码05H向单个线圈264写ON信号(0xFF00),产生远方信号复归功能。
方式二:采用功能码06H向单个保持寄存器0x0000写数值0x0000,产生远方复归功能。主站发送:
1)如果需要点对点复归,只要将从机地址从广播地址00改为相应设备地址即可。
2)两种方式通讯管理机可以任意选择。
5.6 遥控跳闸的选择命令
采用功能码06H向单个保持寄存器0x0101写数值0xFFFF,产生遥控跳闸的选择功能。
5.7 遥控跳闸的执行命令
采用功能码06H向单个保持寄存器0x0011写数值0xFFFF,产生遥控跳闸的执行。
5.8 遥控合闸的选择命令
采用功能码06H向单个保持寄存器0x0100写数值0xFFFF,产生遥控合闸的选择功能。
5.9 遥控合闸的执行命令
采用功能码06H向单个保持寄存器0x0010写数值0xFFFF,产生遥控合闸的执行。
主站发送:
子站响应:
5.10 读单个保护事件记录
采用功能码03H向保持寄存器地址0x0001,读一个字,产生读一个事件记录的作用。主站发送:
例:======CSR读单个事件记录========
TX:01 03 00 01 00 01 D5 CA
RX: 01 03 0C 00 01 00 37 02 8F 4D 26 09 13 09 12 68 B2
本例中,控制回路断线18 -09-19 09:38:41:375。
保护动作信息代码一览表
1 杭州华光电气MODBUS规约简化版通讯流程
1.1 巡检流程
对于保护测控装置平时执行"读全遥信" N次后, 执行"读全遥测" 1次, 执行"读全遥信" N+M次后, 执行"读电度值" 1次。
对于纯保护装置,由于没有远动遥测值和电度值,平时只执行"读全遥信" 。
========CSR读全遥信========
TX:01 02 00 00 00 20 79 D2
RX:01 02 04 01 02 00 00 5B DE
========CSR读全遥测========
TX:01 04 00 00 00 0F B0 0E
RX:01 04 1E 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1A 3F
说明: 第一个遥测值为"保护状态字", 不用上传入库
========CSR读电度值========
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
说明:报文中的电度值为: 正向有功电度1000W(1KW); 反向有功电度2000W(2kW);
正向无功电度3000W(3KW); 反向无功电度4000W(4kW).
1.2 远方复归
简单处理方法,采用"广播复归05功能码", 这样只要执行一次, 全站所有预告总信号,事故总信号复归(各装置动作条件消失的情况下)。
问题:如果一次有多个保护装置动作,可能有的保护还没有处理完毕, 所有动作的保护装置的信号灯就都被复归了。
========CSR广播复归05功能码========
TX:00 05 01 07 FF 00 3D D6
说明:
1)复归保护装置的动作灯和告警灯, 复归菜单的弹出画面.
2)采用05功能码, 复归264线圈.
1.3 通讯对时: 采用"广播对时"方式.
========CSR广播对时========
TX:00 10 04 80 00 04 08 98 B7 16 12 17 01 07 00 58 F0
说明:对时时间07年1月23日18时22分47秒000毫秒1.4 遥控跳闸
========CSR遥跳选择========
TX:01 06 01 01 FF FF D8 46
RX:01 06 01 01 FF FF D8 46
========CSR遥跳执行========
TX:01 06 00 11 FF FF D8 7F
RX:01 06 00 11 FF FF D8 7F
1.5 遥控合闸
========CSR遥合选择========
TX:01 06 01 00 FF FF 89 86
RX:01 06 01 00 FF FF 89 86
========CSR遥合执行========
TX:01 06 00 10 FF FF 89 BF
RX:01 06 00 10 FF FF 89 BF
2 增强功能
(可选择)
2.1.需要点对点的"远方复归"
可按以下指令执行:
========CSR点对点复归05功能码========
TX:01 05 01 07 FF 00 3C 07
RX:01 05 01 07 FF 00 3C 07
2.2 支持读事件记录
2.2.1 读事件记录报文解析
========CSR读单个事件记录========
TX:01 03 00 01 00 01 D5 CA
RX: 01 03 0C 00 01 00 37 02 8F 4D 26 09 13 09 12 68 B2
说明: 控制回路断线18 -09-19 09:38:41:375。
2.2.2 支持读事件记录, 推荐的巡检过程
平时执行"读全遥测", 读N轮后, 可执行一次"读全遥信"和"读电度值"。
一旦发现"读全遥测"应答报文中的“设备状态字”的位0为1,就执行“读全遥信”报文,则“设备状态字”的位0自动变为0。
一旦发现“设备状态字”的位1为1, 就可以连续执行“读单个事件记录”来读取事件记录,直到子站应答功能码为0x83的报文来确认已经没有事件记录可以读取。
举例如下:
========CSR读全遥测========
TX:01 04 00 00 00 0F B0 0E
RX:01 04 1E 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9A 3C
========CSR读全遥信========
TX:01 02 00 00 00 20 79 D2
RX:01 02 04 01 02 00 00 5B DE
========CSR读单个事件记录========
TX:01 03 00 01 00 01 D5 CA
RX:01 03 0C 00 01 04 09 02 39 14 34 12 17 01 07 D3 2D
========CSR读单个事件记录========
TX:01 03 00 01 00 01 D5 CA (19:08:05:953)
RX:01 83 02 C0 F1 (19:08:06:015)
主站读到读83异常响应报文,则读事件记录循环结束。
CSR点表
遥信量信息表