IEC60870-104报文解析 —— 利用Wireshark对报文逐字节进行解析详细解析IEC60870-104附含模拟器以及pcap包

  • 2020 年 5 月 22 日
  • 笔记

前言 —— 

104报文较为繁琐。

共有S帧、I帧、U帧。

简单的说I帧是用来传输数据、S帧是用来信息确认、U帧用来控制。

因为S帧与U帧的报文基本无变化也太过于简短,所以我这边举例子吧就不在截图了。

 

一、U帧

U 格式帧具有不计数的控制功能,长度为 6 个字节的固定帧长。用于控制报文。

 

 

 C:表示确认    V:表示生效 

U 格式帧使用到以下三种命令

1) 启动 U 帧,用于启动应用层传输控制命令

主站发送:680407000000 从站返回:68040B000000

07 0B为控制域

2) 停止 U 帧,用于停止应用层传输控制命令 

主站发送:680413000000  从站返回:680423000000

13 23为控制域

 

3) 测试 U 帧,双方均无发送时,维持链路活动状态控制命令: 

主站发送:680443000000  从站返回:680483000000
43 83为控制域

二、S帧

S 格式具有计数的监视功能, S 格式帧为短帧,长度 6 个字节。接收方接收到 I 帧数据,但本身没有信息要发送的情况下, S 帧用于确认接收到对方的帧。

主站发送 68 04 01 00 0e 00

从站回复 68 04 01 00 1a 00

三、I帧

I 帧的控制域包含发送序列号和接收序列号两个参数

两个序列号在每个 APDU 和每个方向上都应按顺序加一

发送序列号和接受序列号在 0~32767 之间循环

发送方增加发送序列号而接受方增加接收序列号

接收站认可连续正确 接收的一个 APDU 或者多个 APDU,将最后一个正确接收的 APDU 的发送序列号作为接收序列号返回

这个接收序列号是对所有发送序列号小于或等于该号的 APDU 的有效确认

如只在一个方向进行较长的数据传输,就得在另一个方向发送 S 格式认可这些 APDU

这种 方法应该在两个方向上采用。在创建一个 TCP 连接后,发送和接收序列号都被设置成 0

 

顺便附带一下ASDU的格式

以上只是方便与理解这个规约

好了我们进入正题

四、单点遥控

发包

 I帧共有两层、第一层为控制域与序列计数

Byte[0] 68 只要是IEC104规约那么开头规定的即为是68 也就为启动符吧

Byte[1] 0e 为长度 自此往后的长度

Byte[3][4] 1c 00  发送序号,计数

Byte[3][4] 1c 00  接收序号,计数

看下一层

Byte[0] 2d 为控制符 即为功能码

Byte[1] 01 可变结构限定词、若信息对象的地址不连续则为0、若信息对象的地址连续则为1

Byte[2] 06 传输的原因

Byte[3] 00 公共地址 即RTU站址

Byte[4] 01 00 信息体地址

接下来看IOA这个结构体内的

Byte[0][2] IOA 00 00 00 信息体地址,数据点在数据库中的序号,低位在前高位在后

Byte[0][2] SCO 80  代表单点遥控的分合状态

回包

跟发包都是一样 I帧发送了数据 那么会有S或U帧确认或控制这个信息 所以I帧的回应包与发包一致

五、时间同步命令

发包

上一层就不截图了、与之前一样

Byte[0] 2d 为控制符 即为功能码

Byte[1] 01 可变结构限定词、若信息对象毫秒低位的地址不连续则为0、若信息对象的地址连续则为1

Byte[2] 06 传输的原因

Byte[3] 00 公共地址 即RTU站址

Byte[4] 01 00 信息体地址

接下来看IOA这个结构体内的

Byte[0] 00 00 00 信息体地址,数据点在数据库中的序号,低位在前高位在后

Byte[1][7] 09 88 1f 0a 0d 05 14 即为时间

  09 毫秒低位

  88 毫秒高位

  1f 分钟

  0a 时

  0d 日与星期

  05 月

  14 年

回包

 

与发包一致

其实他的I帧的都是发什么就回什么、确认信息以及控制是S帧的U帧

六、举例子

也不多截图了、举几个例子吧。

单点:

68 15 F8 05 DA 00 01 03 03 00 01 0B 72 00 00  01 75 00 00 00 78 00 00 01

双点:

68 15 F8 05 DA 00 03 03 03 00 01 0B 72 00 00  01 75 00 00 02 78 00 00 01

说明:0x01,0x03  ASDU类型:单点遥信数据。0x03  ASDU类型:双点遥信数据

0x03  可变机构限定词:第七位定义该帧应用数据的数目,低位在前高位在后。最高位不为1,表示每个应用数据前带有一个3个字节的信息体地址(inf),可以不是连续的。因为是遥测数据,所以每个信息体地址后都有一个1个字节的开关量数据。若最高位为1,见2总召遥测报文举例

0x0003  传送原因:定义数据上送的原因,低位在前高位在后。3表示变化上送,若20为召唤上送,1为主动上送等

0x0b01 公共地址:主站个子站设定的地址,低位在前高位在后。由主站方确定,子站严格按此地址设定

0x000075每个遥信数据的信息体地址:数据点在数据库中的序号,低位在前高位在后

0x01  信息体地址后的遥信数据值,单点可以为0或1;双点可以为0,1,2,3

总召唤上送遥信或告警报文(单点)举例:

68 15 F8 05 DA 00 01 83 14 00 01 0B 72 00 00  01  00  01

遥信变位或告警报文(双点)举例:

68 15 F8 05 DA 00 03 83 14 00 01 0B 72 00 00  01  02  03

说明:定义同2召唤遥测。不同点在于遥测是3个字节一个量,遥信是一个字节

SOE(双点)报文举例:

68 15 F8 05 DA 00 1F 01 03 00 01 OB 72 00 00 02 78 49 35 0E 01 01 00

SOE(单点)报文举例:

68 15 F8 05 DA 00 1E 01 03 00 01 0B 72 00 00 01 78 49 35 0E 01 01 00

说明:前面定义同遥信。78 49 35 0E 01 01 00为动作时间,从后到前依次为年、月、日、时、分、毫秒(2字节)。时间为00年1月1日14时53分18808毫秒(18秒808毫秒)

 

 

暂时先就这样吧…

想起来再补