通过近两周时间的学习,开始对iec 103 协议有了一定的认识,也能对简单的协议进行分析。
如对下报文的分析:
09:10:19.546 串口2 发送 10 5B 02 5D 16
09:10:19.562 串口2 收到 10 09 02 0B 16 00 00 00 //下面将分析
09:10:22.562 串口2 发送 10 7B 02 7D 16
09:10:24.578 串口2 发送 10 7B 02 7D 16
09:10:24.578 串口2 收到 10 09 02 0B 16 00 00 00
09:10:27.593 串口2 发送 10 5B 02 5D 16
09:10:27.593 串口2 收到 10 09 02 0B 16 00 00 00
09:10:30.609 串口2 发送 10 7B 02 7D 16
09:10:30.609 串口2 收到 10 09 02 0B 16 00 00 00
09:10:32.656 串口2 收到 10 09 01 0A 16 00 00 00
09:10:35.671 串口2 发送 68 0F 0F 68 53 02 06 81 08 01 FF 00 6C DE 05 08 01 01 07 44 16
09:10:35.671 串口2 收到 10 00 02 02 16 00 00 00
09:10:35.875 串口2 发送 10 7B 02 7D 16
09:10:35.890 串口2 收到 10 09 02 0B 16 00 00 00
09:10:36.187 串口2 发送 10 5B 02 5D 16
09:10:36.203 串口2 收到 10 09 02 0B 16 00 00 00
09:10:36.500 串口2 发送 10 7B 02 7D 16
09:10:36.515 串口2 收到 10 09 02 0B 16 00 00 00
09:10:36.828 串口2 发送 10 5B 02 5D 16
09:10:36.843 串口2 收到 10 09 02 0B 16 00 00 00
09:10:39.843 串口2 发送 10 7B 02 7D 16
09:10:39.843 串口2 收到 10 09 02 0B 16 00 00 00
09:10:42.859 串口2 发送 10 5B 02 5D 16
09:10:42.859 串口2 收到 10 09 02 0B 16 00 00 00
那么我已上面具体事例来分别解析一个固定帧长报文和可变帧长报文.
那么以09:10:19.546 串口2 发送 10 5B 02 5D 16 为例来解析固定帧长报文
目的:给地址为02的装置召唤2级数据。
10 //固定帧长 起始字符
5B //控制域
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
备用 |
PRM |
FCB |
FCV |
功能码 |
|||
|
|
|
|
|
02 //
44
16
分析如下:首先对控制域分析5B
5B 二进制 101 1011
由iec103 协议分析可知:主----> 从
功能码 |
帧类型 |
功能描述 |
FCV状态 |
0 |
发送/确认帧 |
复位通信单元 |
0 |
3 |
发送/确认帧 |
传送数据 |
1 |
4 |
发送/无回答帧 |
传送数据 |
0 |
7 |
复位帧计数位 |
传送数据 |
0 |
9 |
请求/响应帧 |
召唤链路状态 |
0 |
10 |
请求/响应帧 |
召唤1级数据 |
1 |
11 |
请求/响应帧 |
召唤2级数据 |
1 |
功能码
由功能码定义可知:
为召唤二级数据.
09:10:19.562 串口2 收到 10 09 02 0B 16 00 00 00 =
“从à 主”报文的控制域:
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
DIR(1) |
PRM(0) |
ACD |
DFC |
功能码 |
ACD(要求访问位):ACD = 1,通知主站,从站有2级数据请求传送。
DFC(数据流控制位):DFC = 0表示从站可以接受数据,DFC =1表示从站缓冲区已满,无法接受新数据。
功能码(从à主方向):
功能码 |
帧类型 |
功 能 |
0 |
确认帧 |
确认 |
1 |
确认帧 |
链路忙,未收到报文 |
8 |
响应帧 |
以数据包响应请求帧 |
9 |
响应帧 |
从站没有所召唤的数据 |
11 |
响应帧 |
从站以链路状态响应主站请求 |
注:功能码等于8的报文为可变帧长报文,其余报文均为固定帧长报文。
同理由上面分析可知:
目的:ACD=0,从站并没有主站需要的数据
l 主站发: 10 7a 04 7e 16
目的:向地址为04的装置发请求1级数据命令(可由2.1分析)。
子站回答:68 15 15 68 28 04 05 81 04 04 b2 03 03 c4 cf c8 f0 bc cc b1 a3 01 00 01 00 9b 16 (ASDU5,CON=28,COT=4)
可变帧长报文
68 H |
———— |
启动字符1(1byte) |
Length |
———— |
长度(1byte) |
Length |
———— |
长度(重复)(1byte) |
68 H |
———— |
启动字符2(重复)(1byte) |
CTRL |
———— |
控制域(1byte) |
ADDR |
———— |
地址域(1byte) |
ASDU |
———— |
链路用户数据[(length-2)byte] |
C S |
———— |
校验和(1byte) |
16 H |
———— |
结束字符(1byte) |
注:(1)校验和 = 控制域 + 地址域 + ASDU代码和(不考虑溢出位,即256模和)
(2)ASDU为“链路用户数据”包,具体格式将在下文介绍
(3)Length = ASDU字节数 + 2
具体分析:
68 //启动字符
15 //报文长度
15 //报文长度
68 //启动字符
//控制域, 地址域, 类型标识, 可变结构限定词, 传送原因, 公共地址
28 04 05 81 04 04
//功能类型,信息序号, 兼容级别,8个ASCII
b2 03 03 c4 cf c8 f0 bc cc b1 a3
//4个自由赋值
01 00 01 00
///
//连路用户数据
9b //校验和
16 //结束字符
(ASDU5,CON=28,COT=4)
80 00
目的:子站以ASDU5(复位通信单元)响应主站的召唤。并ACD位置1,表明子站向主站请求1级数据上送。
可以简单的分析定时:
主站发:68 0f 0f 68 44 ff 06 81 08 ff ff 00 d4 26 0f 09 28 0b 63 78 16
目的:给地址为ff(广播地址)发对时命令。
68 0f 0f 68
44 //控制域
ff //地址
06 //类型标示
81 //可变结构限定词
08 //传送原因
ff //公共地址
ff 00 //信息体地址
d4 26 // 26d4=9940
0f //分
09 //时
28 //低四位表示日 ;高四位表示周日(8号星期二)
0b // 11月
63 // 1900 + 99年
78 //校验和
16//结束字符
时间:1999年11月8日9时15分9.940秒