
JYC03 电力电源监控模块外观示意图
1 概述
本文所叙述的通信协议仅适用于本公司所生产的电力电源监控系统SMC03系列版本的产品。
物理接口:SMC03系列监控同时提供RS232和RS485通信接口,用户可任意选择其中之一与后台设备联机,注意,若选用RS485接口连接到电脑串行通信口,则需外加一个RS485-RS232转换头转接。
通信波特率支持1200bps、2400bps、4800bps和9600bps四种速率。每一帧由10位(1位起始位,8位数据位,1位停止位,无校验位)组成。
在开始通信前,请先设定好监控系统的通信参数,如通信地址、通信速率和通信协议,SMC03系列监控只兼容ModBus规约。通信地址从1到99可选。若用户选用ModBus规约,建议远程终端下发命令的时间间隔在5秒钟以上,波特率越低时间应适当延长。
在今后的产品升级过程中,本通信协议若有修改,恕本公司不另行通知,请及时垂询本公司或访问本公司网站。
2 ModBus协议
2.1 遥测
遥测1下传:
定义 | 地址 | 功能码 | STAR ADDR | 数据长度 | CRC校验 |
数据 | ADDR | 03H | 0000H | LEN | CRC 16 |
字节数 | 1 | 1 | 2 | 2 | 2 |
Ø ADDR:监控设备地址。
Ø START ADDR为一特定值,不可随便更改。
Ø 数据长度:指请求设备返回的遥测数据长度。发送时高位在前,低位在后,不可超过指定长度(0x20)。
Ø CRC校验:采用CRC16校验法,发送时低位在前,高位在后,计算方法请参阅下面章节
遥测返回:
定义 | 地址 | 功能码 | 长度 | 返回数据 | CRC校验 |
数据 | ADDR | 03H | “数据长度” | DATA | CRC 16 |
字节数 | 1 | 1 | 1 | LEN * 2 | 2 |
遥测1返回DATA定义:
寄存器地址 | 定义 | 传输方式 | 放大系数 | 单位 |
0000 | 交流线电压Uab | H—L | 10 | V |
0001 | 交流线电压Ubc | H—L | 10 | V |
0002 | 交流线电压Uac | H—L | 10 | V |
0003 | 合母电压 | H—L | 10 | V |
0004 | 控母电压 | H—L | 10 | V |
0005 | 控母电流 | H—L | 10 | A |
0006 | 电池电压 | H—L | 10 | V |
0007 | 电池电流 | H—L | 10 | A |
0008 | 环境温度 | H—L | 10 | ℃ |
0009 | 第01节单体电池电压 | H—L | 100 | V |
000A | 第02节单体电池电压 | H—L | 100 | V |
000B | 第03节单体电池电压 | H—L | 100 | V |
| …… |
|
|
|
0020 | 第24节单体电池电压 | H—L | 100 | V |
2.2 遥信
遥信下传:
定义 | 地址 | 功能码 | STAR ADDR | 数据长度 | CRC校验 |
数据 | ADDR | 02H | 7000H | LEN | CRC 16 |
字节数 | 1 | 1 | 2 | 2 | 2 |
数据长度指遥信量长度,1个字节包含8个遥信量。
遥信返回:
定义 | 地址 | 功能码 | 数据长度 | 返回数据 | CRC校验 |
数据 | ADDR | 02H | (LEN+7)/8 | DATA | CRC 16 |
字节数 | 1 | 1 | 1 |
| 2 |
注:0为备用,1为工作;0为浮充,1为均充;0为正常,1为故障;0为开机,1为关机。
寄存器地址 | 字节 | Bits | 定义 |
7000 | H | Bit0 | 系统总故障 |
Bit1 | 电池充电方式 |
Bit2~Bit7 | 未定义 |
L | Bit0-Bit7 | 1~8号充电模块开关机 |
7001 | H | Bit0-Bit7 | 1~8号充电模块通信故障 |
L | Bit0-Bit7 | 1~8号充电模块故障 |
7002 | H | Bit0 | 交流停电 |
Bit1 | 交流缺相 |
Bit2 | 交流欠压 |
Bit3 | 交流过压 |
Bit4- Bit7 | 未定义 |
L | Bit0 | 合母电压过高 |
Bit1 | 合母电压过低 |
Bit2 | 控母电压过高 |
Bit3 | 控母电压过低 |
Bit4 | 电池组欠压 |
Bit5 | 电池组过流 |
Bit6-Bit7 | 未定义 |
7003 | H | Bit0 | 防雷器故障 |
Bit1 | 熔断器故障 |
Bit2 | 母线绝缘超差 |
Bit3 | 支路开关跳闸 |
Bit4 | 母线绝缘下降 |
Bit5- Bit7 | 未定义 |
L | Bit0-Bit7 | 未定义 |
7004 | H | Bit0-Bit7 | 未定义 |
L | Bit0-Bit7 | 未定义 |
7005 | H | Bit0 | 巡检仪通信故障 |
Bit1 | 绝缘仪通信故障 |
Bit2-Bit7 | 未定义 |
L | Bit0-Bit7 | 1-8号单体电池过压 |
7006 | H | Bit0-Bit7 | 9-16号单体电池过压 |
L | Bit0-Bit7 | 17-24号单体电池过压 |
7007 | H | Bit0-Bit7 | 1-8号单体电池欠压 |
L | Bit0-Bit7 | 9-16号单体电池欠压 |
7008 | H | Bit0-Bit7 | 17-24号单体电池欠压 |
L | Bit0-Bit7 | 1-8号单体电池差压 |
7009 | H | Bit0-Bit7 | 9-16号单体电池差压 |
L | Bit0-Bit7 | 17-24号单体电池差压 |
700A | H | Bit0-Bit7 | 绝缘支路1~8故障 |
L | Bit0-Bit7 | 绝缘支路9~16故障 |
700B | H | Bit0-Bit7 | 绝缘支路17~24故障 |
L | Bit0-Bit7 | 绝缘支路25~32故障 |
700C | H | Bit0 | 未定义 |
Bit1-Bit7 | 未定义 |
L | Bit0-Bit7 | 未定义 |
2.3 遥调
遥调下传:
定义 | 地址 | 功能码 | DATA REG | VALUE | CRC校验 |
数据 | ADDR | 06H |
| DATA | CRC 16 |
字节数 | 1 | 1 | 2 | 2 | 2 |
DATA REG定义:(高位在前,低位在后)
DATA REG | 遥调内容 | 单位 | 系数 | 设定范围 |
7100H | 浮充电压, (低位在前,高位在后) | V | 10 | 100~320 |
7200H | 均充电压, (低位在前,高位在后) | V | 10 | 110~320 |
遥调返回:
定义 | 地址 | 功能码 | DATA REG | VALUE | CRC校验 |
数据 | ADDR | 06H |
| DATA | CRC 16 |
字节数 | 1 | 1 | 2 | 2 | 2 |
2.4 遥控
遥控下传:
定义 | 地址 | 功能码 | 遥控编号 | VALUE | CRC校验 |
数据 | ADDR | 0FH | 78XXH | DATA | CRC 16 |
字节数 | 1 | 1 | 2 | 2 | 2 |
遥控编号 | 遥控内容 | DATA |
7800H~7807H | 01~8号模块开关机控制 | 0=开机,1=关机 |
7808H | 电池均浮充控制 | 0=浮充,1=均充 |
举例:
控制#2号模块关机: 发送命令: 01 0f 78 01 00 01
控制#2号模块开机: 发送命令: 01 0f 78 00 00 00
遥控返回:
定义 | 地址 | 功能码 | 遥控编号 | VALUE | CRC校验 |
数据 | ADDR | 0FH | 78XXH | DATA | CRC 16 |
字节数 | 1 | 1 | 2 | 2 | 2 |
2.5 错误返回:
定义 | 地址 | 功能码 | CODE | CRC校验 |
数据 | ADDR | COM+80H | 1 | CRC 16 |
字节数 | 1 | 1 | 1 | 2 |
2.6 CRC16校验码计算方法
CRC添加到消息中时,低字节先加入,然后高字节。
CRC简单函数如下:
unsigned short CRC16(puchMsg, usDataLen)
unsigned char *puchMsg ; /* 要进行CRC校验的消息 */
unsigned short usDataLen ; /* 消息中字节数 */
{
unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */
unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */
unsigned uIndex ; /* CRC循环中的索引 */
while (usDataLen--) /* 传输消息缓冲区 */
{
uIndex = uchCRCHi ^ *puchMsgg++ ; /* 计算CRC */
uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex} ;
uchCRCLo = auchCRCLo[uIndex] ;
}
return (uchCRCHi << 8 | uchCRCLo) ;
}
/* CRC 高位字节值表 */
static unsigned char auchCRCHi[] = {
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
} ;
/* CRC低位字节值表*/
static char auchCRCLo[] = {
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
} ;\
3 CDT通信规约
3.1 帧定义
帧结构:
同步字:EBH 90H EBH 90H EBH 90H,共6个字节
序号 | 控制字 |
1 | 控制字节 |
2 | 帧类别码 |
3 | 每帧中信息字数量 |
4 | 源站地址 |
5 | 目的站地址 |
6 | 校验码 |
控制字:由6字节组成。
控制字节固定为71H;
源站地址:下行时指上位机地址,固定为01H,上行时指监控设备地址;
目的站地址:下行时指监控设备地址,上行时指上位机地址,固定为01H;
信息字数量,信息字数n表示该帧中所含信息字数量;n=0表示本帧无信息。
校验码,本协议采用CRC校验,校验多项式为107H,为信息字前5字节构成码流,后面加8个0,得到48位码流,用校验多项式作为除数除以码流,相除时做异或;最后得到8位余数取反后既为校验码。
例如:信息字为;43h E8h 7DH 33H 56H 计算余数为2FH,取反后为D0H,发送序列为:43h E8h 7DH 33H 56H D0H。
帧类别码定义
帧类别码 | 定义 |
上行 E=0 | 下行 E=0 |
61H | 重要遥测 | 遥控选择 |
C2H |
| 遥控执行 |
B3H |
| 遥控撤销 |
F4H | 遥信状态 |
|
57H |
| 设定命令 |
信息字:每个信息字由6个字节构成,即功能码1字节,信息4字节,校验码1字节。
功能码定义:
功能码 | 用途 |
00H – 7FH | 遥测 |
E0H | 遥控选择 |
E1H | 遥控返校 |
E2H | 遥控执行 |
E3H | 遥控撤销 |
E8H | 遥调 |
F0H - FFH | 遥信 |
3.2 重要遥测
每个信息字传送2路遥测量,每个遥测量包含2字节,先送低字节,后送高字节。最高位为符号位。(所有数据放大系数都为10)
功能码 | 信息1 | 信息2 |
00H | 交流线电压Uab | 交流线电压Ubc |
01H | 交流线电压Uac | 合母电压 |
02H | 控母电压 | 控母电流 |
03H | 电池电压 | 电池电流 |
04H | 环境温度 |
|
05H | 第01节单体电池电压 | 第02节单体电池电压 |
06H | 第03节单体电池电压 | 第04节单体电池电压 |
07H | 第05节单体电池电压 | 第06节单体电池电压 |
08H | 第07节单体电池电压 | 第08节单体电池电压 |
09H | 第09节单体电池电压 | 第10节单体电池电压 |
0AH | 第11节单体电池电压 | 第12节单体电池电压 |
0BH | 第13节单体电池电压 | 第14节单体电池电压 |
0CH | 第15节单体电池电压 | 第16节单体电池电压 |
0DH | 第17节单体电池电压 | 第18节单体电池电压 |
0EH | 第19节单体电池电压 | 第20节单体电池电压 |
0FH | 第21节单体电池电压 | 第22节单体电池电压 |
10H | 第23节单体电池电压 | 第24节单体电池电压 |
3.3 遥信
功能码 | 字节序号 | Bit0 | Bit1 | Bit2 | Bit3 | Bit4 | Bit5 | Bit6 | Bit7 |
F0H | 000 | 系统总故障 | 电池充电方式 | × | × | × | × | × | × |
001 | 充电模块01开关机 | 充电模块02开关机 | 充电模块03开关机 | 充电模块04开关机 | 充电模块05开关机 | 充电模块06开关机 | 充电模块07开关机 | 充电模块08开关机 |
F1H | 004 | 充电模块01通信故障 | 充电模块02通信故障 | 充电模块03通信故障 | 充电模块04通信故障 | 充电模块05通信故障 | 充电模块06通信故障 | 充电模块07通信故障 | 充电模块08通信故障 |
005 | 充电模块01故障 | 充电模块02故障 | 充电模块03故障 | 充电模块04故障 | 充电模块05故障 | 充电模块06故障 | 充电模块07故障 | 充电模块08故障 |
006 | 交流停电 | 交流缺相 | 交流欠压 | 交流过压 | × | × | × | × |
007 | 合母电压过高 | 合母电压过低 | 控母电压过高 | 控母电压过低 | 电池组欠压 | 电池组过流 | × | × |
F2H | 008 | 防雷器故障 | 熔断器故障 | 母线绝缘超差 | 支路开关跳闸 | 母线绝缘下降 |
|
|
|
009 | × | × | × | × | × | × | × | × |
010 | × | × | × | × | × | × | × | × |
011 | × | × | × | × | × | × | × | × |
F3H | 012 | 巡检仪通信故障 | 绝缘仪通信故障 | × | × | × | × | × | × |
013 | 1-8号单体电池过压 |
014 | 9-16号单体电池过压 |
015 | 17-24号单体电池过压 |
F4H |
| 1-8号单体电池欠压 |
| 9-16号单体电池欠压 |
| 17-24号单体电池欠压 |
| 1-8号单体电池差压 |
F5H |
| 9-16号单体电池差压 |
| 17-24号单体电池差压 |
| 绝缘支路1~8故障 |
| 绝缘支路9~16故障 |
|
| 绝缘支路17~24故障 |
|
| 绝缘支路25~32故障 |
3.4 设定
设定命令控制字格式同遥控命令,但设定命令只有一个下行帧,无返校、执行和撤销命令帧;控制字的帧类别改为57H。信息字格式如下:
功能码(E8H) |
设定(C3H) |
设定对象号 |
设定值(低8位) |
设定值(高8位) |
校验码 |
对象号 | 设定内容 | 单位 | 系数 | 设定范围 |
00 | 浮充电压 | V | 10 | 100~320 |
01 | 均充电压 | V | 10 | 110~320 |
3.5 遥控
遥控过程:
遥控过程信息字字格式
| 遥控选择(下行) | 遥控返校(上行) | 遥控执行(下行) | 遥控撤销(下行) |
0 | 功能码(E0H) | 功能码(E1H) | 功能码(E2H) | 功能码(E3H) |
1 | 合/分(CCH/33H) | 合/分/错(CCH/33H/FFH) | 执行(AAH) | 撤销(55H) |
2 | 开关序号 | 开关序号 | 开关序号 | 开关序号 |
3 | 合/分(重复) | 合/分/错(重复) | 执行(重复) | 撤销(重复) |
4 | 开关序号(重复) | 开关序号(重复) | 开关序号(重复) | 开关序号(重复) |
5 | 校验码 | 校验码 | 校验码 | 校验码 |
l 开关序号为二进值码
l 遥控返校随机插在上行信息中不跨帧地连送三遍。
l 遥控返校后超时30秒未收到执行命令,本次命令自动撤销。
遥控开关定义
序号 | 定义 | 含义 |
00H | 1#模块开关机 | 合:开机,分:关机 |
01H | 2#模块开关机 | 合:开机,分:关机 |
… | … | … |
1FH | 32#模块开关机 | 合:开机,分:关机 |
40H | 一组电池充电状态 | 合:浮充,分:均充 |
41H | 二组电池充电状态 | 合:浮充,分:均充 |
建议:根据本协议开发上位机软件时,若需用RS485往下发送数据,必须在完整地接收到一帧上行数据后进行。
4 通信测试举例
CDT:
设定浮充电压235.0V:eb 90 eb 90 eb 90 71 57 01 01 01 e4 e8 c3 00 2e 0a 09;
ModBus:
遥测1:01 03 00 00 00 1D 85 C3
遥信:01 02 70 00 00 05 A2 C9
遥调:01 06 71 00 09 2E 14 BA
遥控:01 0F 78 40 00 01 8D 7F
若用户采用ModBus规约,建议先用CDT规约在电脑上测试一下硬件电路是否连接完好