文档库 最新最全的文档下载
当前位置:文档库 › 华光电气综保Modbus规约V7.0 (1)

华光电气综保Modbus规约V7.0 (1)

华光电气综保Modbus规约V7.0 (1)
华光电气综保Modbus规约V7.0 (1)

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点表

遥信量信息表

相关文档