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年)
原文:http://blog.csdn.net/zhaoming262350/article/details/45875887