1、 中心水电站计算机监控系统 增加开关站关口表数据上传通信方案 9月 中心电站监控系统和关口表通信方案 一、通信要求 中心电站开关站线路电度表底度现在未上传至监控系统,为降低运行人职员作量,提升工作效率,中心电站决定增加开关站关口电度表和监控系统通信。监控系统依据所采集实时数据,增加对应电度量统计报表。 此次和监控系统做通信关键关口表有:220kV中心一线、中心二线、福山线红相表主表、辅表等。 二、通信规约 串口协议:modbus 485;波特率:9600;字节格式:1位起始位,8位数据位位,1位停止位,无奇偶校验
2、 监控系统需要依据厂家提供通信规约,重新编写对应通信程序,相关规约见附件一:YB/DDC-G310A型 多路电能量采集装置 命令代码及报文索引(YB/DDC-G310A 、-1、-2版 )。 三、通信结构图 开关站关口表 转换器232-485 电度采集装置 转换器232-485
3、 扩展串口卡 监控厂内通信机 四、通信数据 采集装置地址:___0001___ 关口表地址: ______ 序号 关口表名 关口表地址 数据描述 0 中心一线 主表(表号) 01 正向有功电度 1 反向有功电度 2 中心一线 辅表((表号) 02 正向无功电度 3 反向无功电度 4 中心二线 主表((表号) 03 正向有功电度 5 反向有功电度 6 中心二线 辅表((表号)
4、04 正向无功电度 7 反向无功电度 8 福山线 主表((表号) 05 正向有功电度 9: 反向有功电度 10 中山线 辅表((表号) 06 正向无功电度 11 反向无功电度 附件一: YB/DDC-G310A型 多路电能量采集装置 命令代码及报文索引 (YB/DDC-G310A 、-1、-2版 ) 一、硬件需求及字节格式: 收发波特率采取9600,字节格式为:1位起始位,8位数据位位,1位停止位,不作奇偶校验。 二、命令基础格式: S(To装置): EB LH LL RU UH UL P
5、H PL DH DL OP (数据区) CR RC 90 R(From装置): EB LH LL RU UH UL PH PL DH DL OP (数据区) CR RC 90 其中:EB为起始符;90为结束符;LHLL为包含EB和90在内总字节数;RU为加密规则,缺省值为00;UHUL为用户名,缺省值为1234;PHPL为用户登录口令,缺省值为4321;DHDL为要访问采集柜编号,缺省值为0001;OP为命令代码;数据区包含字节数及其对应意义随OP而有改变,详见下列各条定义和说明;CRRC为校验码,采取 CCITT-16bit crc 算法,生成多项式为 18005H
6、校验范围从EB 后LH开始到CRC之前全部字节(即除EB CR RC 90 四个字节全部字节)。 搜集目前窗口电量 0D S:EB 00 0F 00 12 34 43 21 00 01 0D TN CR RC 90 R:EB 00 1F 00 12 34 43 21 IDH IDL 0D TN P11 P12 P13 P14 P15 P16 P17 P18 P21 P22 P23 P24 P25 P26 P27 P28 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q21 Q22 Q23
7、Q24 Q25 Q26 Q27 Q28 CR RC 90 ( 其中,IDH IDL 为采集装置号,可变;TN 为表号,可变;对数码式电能表,P11 P12 P13 P14 P15 P16 P17 P18、P21 P22 P23 P24 P25 P26 P27 P28、Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18、Q21 Q22 Q23 Q24 Q25 Q26 Q27 Q28 分别为正向有功、 反向有功、正向无功、反向无功电能窗口总值,是8个字节DOUBLE(双精度浮点数),低位在前(正常次序 little endian)。若P11~Q28全部为0xff,则表示数据无
8、效。 报文样例 查询第一支电表 eb 00 0f 00 12 34 43 21 00 01 0d 01 1e c7 90 装置返回 eb 00 2f 00 12 34 43 21 00 01 0d 01 55 e5 68 65 96 16 32 41 8c e9 67 5c fe 4f e8 3f d0 36 5b 2e 78 99 26 41 00 00 00 00 00 00 00 00 03 b8 90 //返回报文解析 正向有功: 11854
9、30.40
反向有功: 0.76
正向无功: 740540.09
反向无功: 0.00
CRC计算
void CalcCRC(unsigned char* str, DWORD len, unsigned short* crc)
{
unsigned short crctmp=0;
for(int i=0;i 10、 i)
{
unsigned short j;
unsigned short k;
unsigned short crc;
k = i << 8;
crc = 0;
for ( j = 0 ; j < 8 ; j++ ) {
if ( ( crc ^ k ) & 0x8000 )
crc = ( crc << 1 ) ^ 0x8005;
else
crc <<= 1;
k <<= 1;
}
return(crc);
}
unsigned short CalculateCharacterCRC16( unsigned short crc, unsigned char c )
{
return( ( crc << 8 ) ^ gencrc_16( (crc >> 8 ) ^ c ) );
}






