IEC102 应用报文分6大类:通讯连接,读时钟,读历史数据,读实时数据,读事件信息,对时。
传输过程的启动仅限于某一固定点,在规约中主站端为启动站,而电能计量数据终端设备位于计数站,始终为从动站。本系统中的1 级用户数据包括较早时段存储起来的电量和读—应用服务数据单元请求的全部信息。本系统中的数据采用低字节在前,高字节在后的传输方式。
102报文的基本格式:
帧长可以变化102报文的基本格式:
102报文的基本说明:
a) 单字符用于子站向主站传输的确认(肯定或否定);
b) 控制域是用来区别不同的帧和数据传输方向的单字节,详见第二节;
c) 地址域是链路地址(一般是RTU编号),2字节,低字节在前,高字节在后;
d) 帧校验是用户数据区的各字节的算术和对256的模;
e) 变长帧中的L为用户数据区的长度,2个L相等;
f) 变长帧中的ASDU为应用服务数据单元,详见第三节;
g) 数据传输方式:是异步传输方式,11位,其中启动位为二进制0,数据位8位,一个偶校验位,一个停止位。
1. 链路层解析—控制域
控制域包含了传输方向、传输状态以及链路功能类型等信息,1字节,各个位定义如下:
1) 主站侧
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
0 | 1 | FCB | FCV | 功能码 |
FCB位:
主站确认子站已收到命令帧并发送下一帧命令帧的时候,要将FCB位取反,表示是一帧新的命令帧;否则,保持FCB位不变,表示要求子站重发上一帧数据。
FCV位:
FCV位取0,表示不需要考虑FCB为是否取反,此时FCB位应该取0;反之,FCV位取1,表示FCB位取反有效,子站通过FCB位的状态判断下一步做什么,重发或者是继续。
功能码:
表示链路功能命令,即子站从链路层判断需要执行什么操作。
code | FT | FUCTION | FCV |
0x00 | 发送/确认帧 | 复位通信单元CU | 0 |
0x03 | 发送/确认帧 | 下发数据命令 | 1 |
0x09 | 请求/响应 | 召唤链路状态 | 0 |
0x0A | 请求/响应 | 召唤I级用户数据 | 1 |
0x0B | 请求/响应 | 召唤II级用户数据 | 1 |
I级用户数据:
历史数据;
II级用户数据;
最近一次采集的电能数据;如果在下一次采集电能数据之前再次召唤II级用户数据,子站应该返回“没有所召唤的数据”,即,II级用户数据上传之后就不再是II级用户数据了。
功能码0x00,0x09,0x0A,0x0B用于定长帧;功能码0x03用于变长帧,下发召唤数据命令。
2) 子站侧
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
0 | 0 | ACD | DFC | 功能码 |
ACD位:
ACD位取1表示子站有I级用户数据等待上传,主站接收数据完成之后应该发送召唤I级用户数据命令;反之,ACD位取0表示子站待传数据已全部上传完成。
DFC位:
DFC位是数据流控制位,取0表示子站可接收数据,取1表示子站缓冲区已满,无法接收数据。
功能码:
code | FT | FUCTION |
0x00 | 确认帧 | 响应链路复位 |
0x01 | 确认帧 | 链路忙,没收到报文 |
0x08 | 响应帧 | 以数据响应请求帧 |
0x09 | 响应帧 | 没有所召唤的数据 |
0x0B | 响应帧 | 响应请求链路状态 |
功能码0x00,0x01,0x09,0x0B用于定长帧;功能码0x08用于变长帧,上传数据。
2. 应用层解析—ASDU
1) ASDU结构
数据单元标识符(6 Bytes) | 类型标识 | |
可变结构限定词(VSQ) | ||
传输原因(COT) | ||
ADDRL | 虚拟设备地址 | |
ADDRH | ||
记录地址(RAD) | ||
数据区 | 信息体地址(IOA) | 信息体1 |
信息元素集 | ||
时间 | ||
信息体地址(IOA) | 信息体n | |
信息体n | ||
时间 |
2) ASDU类型标识
1字节,在主站侧表示的是主站召唤的数据类型,例如子站系统时间、子站单点信息、子站电能数据,等等;在子站测表示的是子站上传的信息元素的类型。ASDU类型标识的详细清单如下。
ASDU类型标识详细定义
主站侧:
标识 | 功能 | 注释 |
100 | 读制造厂和产品规范 | |
101 | 读带时标的单点信息的记录 | |
102 | 读一个选定时间范围的带时标的单点信息的记录 | 常用 |
103 | 读采集器的当前系统时间 | 常用 |
104 | 读最早累计时段的积分电能量—表底值 | 常用 |
120 | 读选定时间范围、选定地址范围的积分电能量—表底值 | 常用 |
121 | 读选定时间范围、选定地址范围的积分电能量—增量值 | |
128 | 时钟同步 | 常用 |
170 | 读指定地址范围和时间范围的复费率积分电能量—表底值 | 常用 |
171 | 读指定地址范围的遥测量当前值 | 常用 |
172 | 读指定累计时段、选定地址范围的遥测量 |
子站侧:
标识 | 功能 | 注释 |
1 | 带时标的单点信息 | 常用 |
2 | 积分电能量—表底值,4字节 | 常用 |
5 | 积分电能量—增量值,4字节 | |
70 | 初始化结束 | 常用 |
71 | 采集器的制造厂和产品规范 | |
72 | 采集器的当前系统时间 | 常用 |
128 | 时钟同步 | 常用 |
160 | 复费率积分电能量—表底值,4字节 | 常用 |
161 | 遥测量当前值 | 常用 |
162 | 遥测量历史值 |
3) 可变结构限定词(VSQ)
1字节,低7位表示信息体数目,最高位是寻址方法位SQ位。SQ取0,表示后面的每个信息体都有信息体地址,VSQ取值0-127;SQ取1,表示只有第一个信息体有信息体地址,后续的信息体是连续的,VSQ取值128-255。
4) 传输原因(COT)
1字节,已使用的COT类型如下:
COT | 解释 | 方向(下面为发出方) |
4 | 初始化 | 子站侧 |
5 | 请求/被请求 | 主站侧/子站侧 |
6 | 激活 | 主站侧 |
7 | 激活确认 | 子站侧 |
8 | 停止激活 | 主站侧 |
9 | 停止激活确认 | 子站侧 |
10 | 激活终止 | 子站侧 |
13 | 无所请求数据 | 子站侧 |
14 | 无所请求的ASDU类型 | 子站侧 |
15 | 记录地址错误 | 子站侧 |
16 | 虚拟设备地址错误 | 子站侧 |
17 | 无所请求的信息体 | 子站侧 |
18 | 无所请求的累计时段 | 子站侧 |
48 | 时钟同步 | 主站侧/子站侧 |
在主站侧,COT表示命令的请求方式,例如,是请求应答(COT=5)还是激活上传数据(COT=6);在子站测,COT表示应答方式,以及是否有数据待传。
5) 虚拟设备地址
2字节,指虚拟RTU设备地址,一般在终端的采集量超过255个才使用。可以将采集量分组,每组即是一个虚拟RTU设备。采用虚拟RTU设备,可以针对不同需求的主站上传不同的数据,做到数据隔离,节省信道资源,并且起到数据保密功能。
在没有设置虚拟RTU设备的情况下,虚拟设备地址一般取0。
6) 记录地址(RAD)
1字节,用来表示同类数据的不同缓冲区类型,已使用的RAD类型如下:
RAD | 解释 |
0 | 缺省 |
11 | 电能累计量累计时段1 |
12 | 电能累计量累计时段2 |
13 | 电能累计量累计时段3 |
51 | 全部单点信息 |
52 | 单点信息记录区段1(一般指终端设备的单点信息) |
53 | 单点信息记录区段2(一般指电能表的单点信息) |
7) 信息体
在不同的主站命令帧和子站上传数据帧中,信息体有不同的结构,具体解释在第4、5两节。
8) 时间表示
a) 时间信息a
5字节,表示年、月、日、时、分,以及周,具体定义如下:
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | ||
分 | 0 | 0 | 分(0-59) | ||||||
时 | 0 | 备用(0) | 时(0-23) | ||||||
周/日 | 周(1-7) | 日(1-31) | |||||||
月 | (未使用) | (未使用) | 月(1-12) | ||||||
年 | (0) | 年(0-99) |
用于电能数据、分时电量和遥测量历史数据的时标。
b) 时间信息b
7字节,表示年、月、日、时、分、秒、毫秒,以及周,具体定义如下:
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | ||
毫秒 | 毫秒(包括秒字节低两位,共10位)(0-999) | ||||||||
秒 | 秒(0-59) | 毫秒 | |||||||
分 | 0 | 0 | 分(0-59) | ||||||
时 | 0 | 备用(0) | 时(0-23) | ||||||
周/日 | 周(1-7) | 日(1-31) | |||||||
月 | (未使用) | (未使用) | 月(1-12) | ||||||
年 | (0) | 年(0-99) |
用于单点信息的时标,以及子站系统时间。
3. 主站命令结构
只选取包含信息体元素或者常用的ASDU类型。
ASDU类型 | VSQ | COT | RAD | 信息体 |
102-单点信息 | 1 | 6 | 0/51/52/53 | 起始和结束时间,时间信息a |
103-子站时钟 | 0 | 5 | 0 | 无 |
120-电能量 | 1 | 6 | 0/11/12/13 | 起始和结束地址(取值1-255); 起始和结束时间,时间信息a |
128-时钟同步 | 1 | 48 | 0 | 主站系统时间,时间信息b |
4. 子站数据结构
1) 单点信息
每条单点信息的信息体包含9字节,定义如下:
信息体地址(SPA),1字节 详见单点信息地址表 | 单点信息限定词(SPQ),高7位 单点信息状态(SPI),低1位 详见单点信息地址表 | 时间信息b |
单点信息地址表
终端事件:
事件 | SPA | SPQ | SPI |
退出系统 | 180 | 3 | 0 |
启动系统 | 1 | 3 | 0 |
时钟同步 | 7 | 5 | 0 |
修改参数 | 15 | 1 | 0 |
电源故障 | 3 | 1 | 0 |
电池故障 | 4 | 1 | 0 |
硬件故障 | 8 | 1 | 0 |
打印机故障 | 8 | 33 | 0 |
通讯模块故障 | 8 | 49 | 0 |
电能表事件:
事件 | SPA | SPQ | SPI |
通讯失败 | 128 | 电能表序号 | 1 |
通讯恢复 | 128 | 电能表序号 | 0 |
PT失压(发生) | A: 135 | 电能表序号 | 未使用 |
B: 136 | |||
C: 137 | |||
断相(发生) | A: 129 | 电能表序号 | 未使用 |
B: 130 | |||
C: 131 | |||
过压(发生) | A: 132 | 电能表序号 | 未使用 |
B: 133 | |||
C: 134 |
2) 电能数据
信息体1 |
…… |
信息体n |
公共时标 |
每个累计时段的电能数据分别组帧,公共时标用时间信息a表示,位于全部信息体的后面;每个电能数据信息体包含7字节,定义如下:
信息体地址 1字节 | 电能数据 4字节 | 帧计数 1字节 | 电能数据校验 1字节 |
信息体地址对应在子站注册的采集量的编号,取值1-255。
帧计数字节定义如下:
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
数据状态 | 0 | 0 | 帧计数 |
数据状态位表示信息体中的电能数据是否为有效数据,0为有效,1为无效。
帧计数在上传电能数据、分时电量、遥测量时使用,每上传完成一个累计时段的数据,帧计数加1;如果同一累计时段的数据需要分帧上传,帧计数不变。
电能数据校验是保护电能数据有效的另一个标志,是计算ASDU类型标识、虚拟设备地址、记录地址、信息体地址、电能累计量、帧计数、以及公共时标个字节的算术和取256的模。
3) 分时电量
帧结构与电能数据基本相同,差别在于信息体的结构不同;信息体共包含27字节,具体定义如下:
信息体地址 1字节 | 分时电量数据 24字节 | 帧计数 1字节 | 电能数据校验 1字节 |
除了分时电量数据之外,定义与电能数据信息体中一致;分时电量数据定义如下:
总电量(4字节) |
费率1 (4字节) — 尖 |
费率2 (4字节) — 峰 |
费率3 (4字节) — 平 |
费率4 (4字节) — 谷 |
费率5 (4字节) — 暂未使用 |
4) 遥测量
信息体1 |
…… |
信息体n |
公共时标 |
历史数据帧包含公共时标,瞬时数据帧中没有。
每个遥测量信息体包含6字节,定义如下:
信息体地址 1字节 | 遥测量数据 4字节 | 数据状态 1字节 |
信息体地址的定义请参考附录C,取值1-255。
数据状态字节定义如下:
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
数据状态 | 保留(0) |
数据状态位表示信息体中的遥测量数据是否为有效数据,0为有效,1为无效。
报文示例:
68 15 15 68 53 01 00 78 01 06 01 00 0B 01 0A 0F 00 12 03 0F 15 00 12 03 0F 56 16
15H:指的是从控制域开始到校验码之前的字节个数,共计15H=21个字节
报文分析
68 15 15 68 //帧头
53 //控制域
01 00 //RTU地址
78
01
06 //激活
01 00 //RTU地址
0B
01 //起始点01,第1个点
0A //结束点0A,第10个点
0F 00 12 03 0F //起始时间0F(15分) 00(0时) 12(18日) 03(3月) 0F(15年)
15 00 12 03 0F //结束时间15(21分) 00(0时) 12(18日) 03(3月) 0F(15年)
56 //校验和
16 //帧尾
10 5A 01 00 5B 16
10
5A //召唤I级数据
01 00 //RTU地址
5B //校验和
16 //帧尾
68 15 15 68 28 01 00 78 01 07 01 00 0B 01 08 0F 00 92 03 0F 14 00 92 03 0F 29 16
68 15 15 68 //帧头
28 //控制域
01 00 //RTU地址
78
01
07 //激活确认
01 00 //RTU地址
0B
01 //起始点01,第1个点
08 //结束点08,第8个点(此时采集器实际就只有前8个点)
0F 00 92 03 0F
//起始时间0F(15分)00(0时)92(1001 0010高3位星期4,低5位18日) 03(3月) 0F(15年)
14 00 92 03 0F
//结束时间14(20分)00(0时)92(1001 0010高3位星期4,低5位18日) 03(3月) 0F(15年)