-------------------------------------------------------------------------------------------------------------------------------------
以公共地址字节数=2,传输原因字节数=2,信息体地址字节数=3 为例对一些常用的报文进行举例分析:
1)报文中的长度指的是除启动字符与长度字节外的所有字节总数。
2)长帧报文中的“发送序号”与“接收序号”具有抗报文丢失功能。
8.1. 建立网络连接或启动链路
主站发送→激活传输启动: 68(启动符)04(长度)07(控制域)00 00 00 【0x07=0000 0111,0x0B=0000 1011】
从站发送→确认激活传输启动: 68(启动符)04(长度)0B(控制域)00 00 00
8.2. 停止链路
建立网络连接后,可停止链路,只响应 U 帧测试帧。
主站发送→停止链路: 68(启动符)04(长度)13(控制域)00 00 00 【0x13=0001 0011,0x23=0010 0011】
从站发送→确认停止链路: 68(启动符)04(长度)23(控制域)00 00 00
8.3. U 帧测试帧
如果主站超过一定时间没有下发报文或装置也没有上送任何报文,则双方都可以按频率发送 U 帧测试帧:
主站发送→U 帧测试帧: 68(启动符)04(长度)43(控制域)00 00 00 【0x43=0100 0011,0x83=1000 0011】
从站发送→应答 U 帧测试帧: 68(启动符)04(长度)83(控制域)00 00 00
8.4. S 帧测试帧
记录接收到的长帧,主站可以按频率发送 S 帧,比如接收 8 帧 I 帧回答一帧 S 帧,也可以要求接收1 帧 I 帧就应答 1 帧 S 帧。
主站发送→S 帧: 68(启动符)04(长度)01(控制域)00 10 00 【0x01=0000 0001,0x02=0000 0010】
-------------------------------------------------------------------------------------------------------------------------------------------------------
8.5. 总召唤
召唤 YC、YX(可变长 I 帧),初始化后定时发送总召唤,每次总召唤的间隔时间一般设为 15 分钟召唤一次,不同的主站系统设置不同。
主站发送→总召唤:68 0E 00 00 00 00 64 01 06 00 01 00 00 00 00 14,
68(启动符)0E(长度)00 00(I 帧,发送序号)00 00(接收序号)64(类型标示100:总召唤)01(可变结构限定词。sq=0,信息对象地址不连续。)
06 00(传输原因:激活,下行)01 00(公共地址即装置地址)00 00 00(信息体地址)14(区分是总召唤还是分组召唤,2002 年修改后的规约中没有分组召唤)。
从站发送→总召唤确认(发送帧的镜像,除传送原因不同):
68(启动符)0E(长度)00 00(发送序号)00 00(接收序号)64(类型标示100:总召唤)01(可变结构限定词)
07 00(传输原因:激活确认) 01 00(公共地址即装置地址)00 00 00(信息体地址)14(同上).
从站发送→YC 帧(类型标示符 09 带品质描述的遥测,传输原因:14 响应总召唤):
68(启动符)13(长度)06 00(发送序号)02 00(接收序号)09(类型标示:带品质描述的遥测,规一化遥测值,不带时标)82【1000 0010】(可变结构限定词,SQ = 1:信息对象的地址连续,有 2个连续遥测上送,信息对象的个数是2)
14 00(传输原因20 :响应总召唤)01 00(公共地址)01 40 00(信息体地址,从 0X4001 开始第 0 号遥测)A1 10(遥测值 10A1)00(品质描述)89 15(遥测值 1589)
00(品质描述,IV = 0 状态有效,NT=0 刷新成功,SB=0 未被取代,BL=0 未被封锁,RES: 保留位3位,OV=0 未溢出)
从站发送→YX 帧(类型标示符为 01 的单点遥信,传输原因:14 响应总召唤):
68(启动符)1A(长度)02 00(发送序号)02 00(接收序号)01(类型标示:单点遥信,带品质描述,不带时标)04(sq=0,不连续;可变结构限定词,有 4 个遥信上送)14 00(传输原因:响应总召唤)
01 00(公共地址即装置地址)01 00 00(信息体基地址)00(第 1 号遥信,分)01(第 2 号遥信,合)00(第 3 号遥信,分)00(第4 号遥信,分)
从站发送→结束总召唤帧(主站发送总召唤命令,从站才对应发送结束总召唤帧):
68(启动符)0E(长度)08 00(发送序号)02 00(接收序号)64(类型标示:总召唤)01(可变结构限定词)0A 00(传输原因10:激活结束)01 00(公共地址)
00 00 00(信息体地址)14(区分是总召唤还是分组召唤,02 年修改后的规约中没有分组召唤)
主站发送→S 帧:
68 04 01 00 0A 00【S帧,0A=00001010,接收序列号10】 0A 01 02 02 0A 01 0C 02
-------------------------------------------------------------------------------------------------------------------------------------------------------
8.6. 对时
主站发送→对时命令:
68(启动符)14(长度:20)02 00(发送序号,I 帧,C_CS_NA_1)0A 00(接收序号,10)67(类型标示:时钟同步,103)01(可变结构限定词,SQ = 0 :信息对象的地址不连续;信息对象的个数为1)
06 00(传输原因:激活)01 00(公共地址)00 00 00(信息体地址)01(毫秒低位)02(毫秒高位)03(分钟)04(时)81(日与星期)09(月)10(年)
从站发送→对时确认:
68(启动符)14(长度:20)0A 00(发送序号)02 00(接收序号)67(类型标示:时钟同步,103)01(可变结构限定词,SQ = 0 :信息对象的地址不连续;信息对象的个数为1)
07 00(传输原因:激活确认)01 00(公共地址)00 00 00(信息体地址)01(毫秒低位)02(毫秒高位)03(分钟)04(时)81(日与星期)09(月)10(年)
主站发送→S 帧:
68 04 01 00 0E 00
2022-07-29 16:57:12:242 时钟同步命令(激活) 68 14 02 00 0C 00 67 01 06 00 01 00 00 00 00
D2(十进制:210) 2F(47)(1101 0010,0010 1111) 39(0011 1001 分钟) 10(0001 0000 小时) BD(1011 1101 周、日) 07(0000 0111 月) 16(0001 0110 年)
毫秒=0010 1111 1101 0010=12242
分钟=(iv是0,时标有效)111001=57
小时=10000=16
周=101=5
日=11101=29
月=0111=7
年=0010110=22
iv=0,时标有效
8.7. 全遥测
从站发送→YC 帧(以类型标示符 09 为例):68 13 06 00 02 00 09 82 01 00 01 00 01 40 00 A1 10 00 89 15 00
68(启动符)13(长度 19)06 00(发送序号)02 00(接收序号)09(类型标示9:带品质描述的遥测)82(可变结构限定词,有 2 个连续遥测上送)01 00(传输原因:周期、循环)
01 00(公共地址)01 40 00(信息体地址,从 0X4001 开始第 0 号遥测)A1 10(遥测值 10A1)00(品质描述)89 15(遥测值 1589)00(品质描述)
主站发送→S 帧(从站发送周期循环数据时,主站发送 S 帧):
68 04 01 00 04 00
68 13 06 00 02 00 09 82 01 00 01 00 01 40 00 A1 10 00 89 15 00
68 10 52 00 04 00 0B 01 01 00 01 00 6E 00 00 22 00 00
8.8. 全遥信
从站发送→YX 帧(以类型标示符为 01 的单点遥信为例):
68(启动符)1A(长度)02 00(发送序号)02 00(接收序号)01(类型标示1:单点遥信)04(可变结构限定词,有 4 个遥信上送)01 00(传输原因:周期、循环)01 00(公共地址即装置地址)01 00 00(信息体基地址)00(第 1 号遥信,分)01(第 2 号遥信,合)00(第 3 号遥信,分)00(第4 号遥信,分)
主站发送→S 帧(从站发送周期循环数据时,主站发送 S 帧):
68 04 01 00 04 00
从站发送→YX 帧(以类型标示符为 03 的双点遥信为例):
68(启动符)1C(长度)04 00(发送序号)02 00(接收序号)03(类型标示3:双点遥信)04(可变结构限定词,有 4 个遥信上送)01 00(传输原因:周期、循环) 01 00(公共地址)01 00 00(信息体基地址)01(第 1 号遥信,分)02(第 2 号遥信,合)01(第 3 号遥信,分)01(第 4 号遥信,分)
主站发送→S 帧(从站发送周期循环数据时,主站发送 S 帧):
68 04 01 00 04 00
8.9. 变化遥信
如果有变化数据产生,装置会主动上送至主站,主动上送的变位遥信如下:
从站发送→变位遥信(以类型标示符为 01 的单点遥信为例):
68(启动符)0E(长度)16(0001 0110,I帧) 00(发送序号)06 00(接收序号)01(类型标示1:单点遥信,带品质描述,不带时标)01(可变结构限定词,有 1 个变位遥信上送,sq=0表信息对象地址不连续)
03 00(传输原因:表突发事件)01 00(公共地址即装置地址)03 00 00(信息体地址,第 3 号遥信)00(遥信分???应该是3个字节地址编号和一个字节遥信信息体数据??????)
主站发送→S 帧:
68 04 01(s帧) 00 18(0001 1000 接收序列号24) 00
从站发送→变位遥信(以类型标示符为 03 的单点遥信为例):
68(启动符)0E(长度)18 00(发送序号)06 00(接收序号)03(类型标示3:双点遥信)01(可变结构限定词,有 1 个变位遥信上送)03 00(传输原因:表突发事件)
01 00(公共地址即装置地址)03 00 00(信息体地址,第 3 号遥信)01(遥信分)
主站发送→S 帧:
68 04 01 00 1a 00
8.10. SOE.
有 SOE 生成时,装置会主动上送至主站。
从站发送→SOE(以类型标示符为 1e 的单点遥信为例)::
68(启动符)15(长度)1a 00(发送序号)06 00(接收序号)1e(类型标示30:单点遥信的 SOE)01(可变结构限定词,有 1 个 SOE)03 00(传输原因:表突发事件)01 00(公共地址即装置地址)03 00 00(信息体地址,第 3 号遥信)00(遥信分)ad(毫秒低位)39(毫秒高位)1c(分钟)10(时)7a(日与星期)09(月)10(年)
主站发送→S 帧:
68 04 01 00 1c 00
从站发送→SOE(以类型标示符为 1f 的双点遥信为例)::
68(启动符)15(长度)1c 00(发送序号)06 00(接收序号)1f(类型标示31:双点遥信的 SOE)01(可变结构限定词,有 1 个 SOE)03 00(传输原因:表突发事件)01 00(公共地址即装置地址)03 00 00(信息体地址,第 3 遥信)01(遥信分)ad(毫秒低位)39(毫秒高位)1c(分钟)10(时)7a(日与星期)09(月)10(年)
主站发送→S 帧:
68 04 01 00 1c 00
8.11. 遥控
(1)以类型标示为 2d 不带时标的单点遥控为例:
主站发送→遥控选择:68 0E 06 00 0A 00 2D 01 06 00 01 00 02 60 00 81
68(启动符)0e(长度)06 00(发送序号)0a 00(接收序号)2d(类型标示45:不带时标的单点遥控)01(可变结构限定词)06 00(传输原因:激活)01 00(公共地址即装置地址)02 60 00(信息体地址,遥控号=0x0602-0x0601=1)81(控合)
从站发送→遥控返校:
68(启动符)0e(长度)0a 00(发送序号)06 00(接收序号)2d(类型标示45:不带时标的单点遥控)01(可变结构限定词)07 00(传输原因:激活确认)01 00(公共地址即装置地址)02 60 00(信息体地址,遥控号=0x0602-0x0601=1)81(控合)
主站发送→遥控执行:
68(启动符)0e(长度)08 00(发送序号)0c 00(接收序号)2d(类型标示45:不带时标的单点遥控)01(可变结构限定词)06 00(传输原因:激活)01 00(公共地址即装置地址)02 60 00(信息体地址,遥控号=0x0602-0x0601=1)01(控合)
从站发送→执行确认:
68(启动符)0e(长度)0c 00(发送序号)08 00(接收序号)2d(类型标示45:不带时标的单点遥控)01(可变结构限定词)07 00(传输原因:激活确认)01 00(公共地址即装置地址)02 60 00(信息体地址,遥控号=0x0602-0x0601=1)01(控合)
主站发送→遥控撤消:
68(启动符)0e(长度)04 00(发送序号)0e 00(接收序号)2d(类型标示45:不带时标的单点遥控)01(可变结构限定词)08 00(传输原因:停止激活)01 00(公共地址即装置地址)02 60 00(信息体地址,遥控号=0x0602-0x0601=1)01(控合)
从站发送→撤消确认:
68(启动符)0e(长度)0e 00(发送序号)08 00(接收序号)2d(类型标示45:不带时标的单点遥控)01(可变结构限定词)09 00(传输原因:停止激活确认)01 00(公共地址即装置地址)02 60 00(信息体地址,遥控号=0x0602-0x0601=1)01(控合)遥控选择时,如果遥控点号超范围或者遥控命令与类型标示符不符时,装置发送激活结束:
从站发送→激活结束:
68(启动符)0e(长度)0e 00(发送序号)08 00(接收序号)2d(类型标示45:不带时标的单点遥控)01(可变结构限定词)0a 00(传输原因10:激活结束)01 00(公共地址即装置地址)02 60 00(信息体地址,遥控号=0x0602-0x0601=1)81(控合)
(2)以类型标示为 3b 带 7 字节长时标的双点遥控为例:
主站发送→遥控选择:
68(启动符)15(长度)02 00(发送序号)06 00(接收序号)3b(类型标示59:带 7 字节长时标的双点遥控)01(可变结构限定词)06 00(传输原因:激活)01 00(公共地址即装置地址)01 06 00(信息体地址,遥控号=0x06001-0x6001=0)81(控分) f2(ms 低位) 79(ms 高位) 1a(分钟) 0b(小时) 02(星期加日) 09(月) 10(年)
从站发送→遥控返校:
68(启动符)15(长度)06 00(发送序号)02 00(接收序号)3b(类型标示59: 带 7 字节长时标的双点遥控)01(可变结构限定词)07 00(传输原因:激活确认)01 00(公共地址即装置地址)01 06 00(信息体地址,遥控号=0x06001-0x6001=0)81(控分) f2(ms 低位) 79(ms 高位) 1a(分钟) 0b(小时) 02(星期加日) 09(月) 10(年)
主站发送→遥控执行:
68(启动符)15(长度)04 00(发送序号)08 00(接收序号)3b(类型标示59:带 7 字节长时标的双点遥控)01(可变结构限定词)06 00(传输原因:激活)01 00(公共地址即装置地址)01 06 00(信息体地址,遥控号=0x06001-0x6001=0)01(控分) f2(ms 低位) 79(ms 高位) 1a(分钟) 0b(小时) 02(星期加日) 09(月) 10(年)
从站发送→执行确认:
68(启动符)15(长度)08 00(发送序号)04 00(接收序号)3b(类型标示59:带 7 字节长时标的双点遥控)01(可变结构限定词)07 00(传输原因:激活确认)01 00(公共地址即装置地址)01 06 00(信息体地址,遥控号=0x06001-0x6001=0)01(控分) f2(ms 低位) 79(ms 高位) 1a(分钟) 0b(小时) 02(星期加日) 09
主站发送→遥控撤消:
68(启动符)15(长度)06 00(发送序号)0a 00(接收序号)3b(类型标示59:带 7 字节长时标的双点遥控)01(可变结构限定词)08 00(传输原因:停止激活)01 00(公共地址即装置地址)01 06 00(信息体地址,遥控号=0x06001-0x6001=0)01(控分) f2(ms 低位) 79(ms 高位) 1a(分钟) 0b(小时) 02(星期加日) 09(月) 10(年)
从站发送→撤消确认:
68(启动符)15(长度)0a 00(发送序号)06 00(接收序号)3b(类型标示59:带 7 字节长时标的双点遥控)01(可变结构限定词)09 00(传输原因:停止激活确认)01 00(公共地址即装置地址)01 06 00(信息体地址,遥控号=0x06001-0x6001=0)01(控分) f2(ms 低位) 79(ms 高位) 1a(分钟) 0b(小时) 02(星期加日) 09(月) 10(年)遥控选择时,如果遥控点号超范围或者遥控命令与类型标示符不符时,装置发送激活结束:
从站发送→激活结束:
68(启动符)15(长度)0e 00(发送序号)08 00(接收序号)3b(类型标示59:带 7 字节长时标的双点遥控)01(可变结构限定词)0a 00(传输原因10:激活结束)01 00(公共地址即装置地址)01 60 00(信息体地址,遥控号=0x0601-0x0601=0)81(控分)f2(ms 低位) 79(ms 高位) 1a(分钟)0b(小时) 02(星期加日) 09(月) 10(年)
8.12. 电度总召唤
电度可以在对时之前发送。通过设置参数中”全数据扫描间隔”,单位是分钟,一般是 15 分钟召唤一次电度,如果不需要召唤电度一定要将参数中的电度个数设为 0。如果没有电度此步骤可以省略。
主站发送→召唤电度:68 0E 04 00 0c 00 65 01 06 00 01 00 00 00 00 45
68(启动符)0E(长度14)04 00(发送序号I)0c 00(接收序号I,12)65(类型标示101:召唤全电度)01(可变结构限定词)06 00(传输原因:激活)01 00(公共地址即装置地址)00 00 00(信息体地址)45(QCC)
从站发送→召唤确认(发送帧的镜像,除传送原因不同) :
68(启动符)0E(长度) 0c 00(发送序号)04 00(接收序号)65(类型标示101:召唤全电度)01(可变结构限定词)07 00(传输原因:激活确认)01 00(公共地址即装置地址)00 00 00(信息体地址)45(QCC)
主站发送→S 帧:
68 04 01 00 12 00
从站发送→电度数据:
68(启动符)1A(长度)0e 00(发送序号)06 00(接收序号)0F(类型标示15:不带时标的电能量,每个电能量占 5 个字节)02(可变结构限定词,有两个电度量上送)05 00(传输原因:请求或被请求)01 00(公共地址即装置地址)01 64 00(信息体地址,从 0X6401 开始第 0 号电度)00 00 00 00(电度值)00(描述信息)02 64 00(信息体地址,从 0X6402 开始第 1 号电度)00 00 00 00(电度值)01(描述信息)
主站发送→S 帧:
68 04 01 00 14 00
从站发送→结束总召唤帧:
68(启动符)0E(长度)14 00(发送序号)06 00(接收序号)65(类型标示示101:召唤全电度)01(可变结构限定词)0A 00(传输原因10:激活结束)01 00(公共地址即装置地址)00 00 00(信息体地址)45(QCC)
主站发送→S 帧:
68 04 01 00 16 00
8.12. 循环数据的主动上送测试 68 10 52 00 04 00 0B 01 01 00 01 00 6E 00 00 22 00 00
68 10(长度16) 52(发送序号82) 00 04 00(接收序号4) 0B(类型标识11,标度化遥测值) 01(可变结构限定词,sq=0信息对象的地址不连续,信息对象最大个数是1) 01 00(传送原因1,周期循环) 01 00(公共地址1)
6E 00 00(信息题地址) 22 00(循环值) 00(品质描述)
68 13 06 00 02 00 09 82 01 00 01 00 01 40 00 A1 10 00 89 15 00
68 10 52 00 04 00 0B 01 01 00 01 00 6E 00 00 22 00 00
发送报文代码:
//printf("SingleCommand_create ==================\n");
CS101_ASDU newAsdu1 = CS101_ASDU_create(alParameters, false, CS101_COT_PERIODIC, 0, 1, false, false);
InformationObject io1 = (InformationObject)SingleCommand_create(NULL, 5000, true, false, 0);
CS101_ASDU_addInformationObject(newAsdu, io1);
InformationObject_destroy(io1);
CS101_Slave_enqueueUserDataClass2(slave, newAsdu1);
CS101_ASDU_destroy(newAsdu1);
C 打印时间:
#include <time.h>
#pragma warning(disable:4996)
void formatDebugTime() {
time_t t;
time(&t);
struct tm* myt = localtime(&t);
printf("[TIME INFO] %d-%d-%d %d:%d:%d : ", myt->tm_year + 1900, myt->tm_mon + 1, myt->tm_mday, myt->tm_hour, myt->tm_min, myt->tm_sec);
}