IEC 104是基于TCP/IP网络传输的电力自动化核心通信协议,定义了主站与子站之间进行实时数据监控与控制的标准。其报文格式严谨、结构清晰,是理解和实现该协议的基础。
一、 IEC 104报文的总体结构
IEC 104的报文基于应用规约数据单元(APDU)进行组织。一个完整的APDU通常包含两个核心部分:应用规约控制信息(APCI)和应用服务数据单元(ASDU)。
APCI (Application Protocol Control Information) :负责传输控制信息,如报文类型、序列号等。所有类型的APDU都包含APCI。
ASDU (Application Service Data Unit) :承载实际的遥测、遥信、遥控等应用数据。只有信息传输帧(I帧)才会包含ASDU。
APDU的通用封装格式以起始字符 0x68 开头,后跟一个字节的APDU长度域(该长度指从控制域开始到报文结束的字节数),接着是控制域和数据域。
二、 IEC 104的三种报文格式及其控制域详解
IEC 104规约定义了三种报文格式,它们由控制域的第一个字节的低2比特位来区分。这三种格式分别是:I格式(信息传输帧)、S格式(监视帧)和U格式(未编号的控制帧)。
下表对三种格式的关键特性进行了总结:
| 报文格式 | 控制域标识(首字节低2位) | 包含ASDU | 主要用途 | 帧长度 |
|---|---|---|---|---|
| I格式 | 00 | 是 | 传输带编号的遥测、遥信、遥控等应用数据 | 可变(>6字节) |
| S格式 | 01 | 否 | 对接收到的I帧进行编号确认 | 固定(6字节) |
| U格式 | 11 | 否 | 用于建立、维护和终止数据连接的控制命令 | 固定(6字节) |
1. I格式 (Information Transfer Format) 报文
I格式是承载实际数据的核心帧,用于传输遥测、遥信、遥控命令、事件记录等信息。
帧结构:起始字符(0x68) + APDU长度 + 控制域(4字节) + ASDU(可变长度)。
控制域详解:I格式的控制域长度为4个字节,主要用于实现可靠的、按序传输。
发送序列号 N(S) :由控制域的第1、2字节组成(最低位为0),表示当前发送的I帧的序号。用于检测报文丢失或重复。
接收序列号 N(R) :由控制域的第3、4字节组成(最低位为0),表示期望接收的下一个I帧的序号。用于向对端确认已成功接收了序号小于N(R)的所有I帧。
核心作用:这种带编号的机制实现了TCP之上的可靠数据传输,确保主站与子站间的数据交换是完整和有序的。
2. S格式 (Supervisory Format) 报文
S格式不包含任何应用数据,其唯一的功能是进行流量控制和确认。
帧结构:起始字符(0x68) + APDU长度(0x04) + 控制域(4字节)。由于没有ASDU,其APDU长度固定为4.
控制域详解:S格式的控制域也为4个字节。
第1、2字节用于标识S格式(1000 0001 0000 0000),不包含N(S)。
接收序列号 N(R) :由控制域的第3、4字节组成(最低位为0),其功能与I格式中的N(R)完全相同,用于确认已收到的I帧。
典型应用:当设备收到I帧但暂时没有数据需要发送时,会回复S帧,告知对方“我收到了你的第N个包之前的所有数据”。
3. U格式 (Unnumbered Format) 报文
U格式用于在两个通信站之间执行控制功能,而不传输数据或进行顺序确认。
帧结构:起始字符(0x68) + APDU长度(0x04) + 控制域(4字节)。与S帧相同,长度固定为6字节。
控制域详解:U格式的控制域结构相对简单,主要用来标识具体的控制命令。
通过第1、2字节中的特定比特位来区分三种命令,这三种命令互斥,只能同时激活一个:
TESTFR (测试帧) :用于测试链路是否通畅。包含 TESTFR act (激活) 和 TESTFR con (确认)。
STOPDT (停止数据传输) :用于停止对方的数据传输。包含 STOPDT act (激活) 和 STOPDT con (确认)。
STARTDT (启动数据传输) :用于启动对方的数据传输,是建立数据连接的关键步骤。包含 STARTDT act (激活) 和 STARTDT con (确认)。
核心作用:U帧是控制整个通信会话生命周期的关键。
三、 ASDU (应用服务数据单元) 的详细组成
只有I帧才会包含ASDU。ASDU的结构是标准化的,包含了所有需要传输的远动信息。
一个ASDU主要由两部分构成:
数据单元标识符:固定长度为6个字节,提供ASDU的通用描述信息。
一个或多个信息对象:承载实际数据。一个ASDU可以包含一个或多个同类信息对象,最多可达127个。
1. 数据单元标识符结构
| 字节偏移 | 字段名称 | 长度(字节) | 描述 |
|---|---|---|---|
| 0 | 类型标识 (TypeID) | 1 | 标识ASDU的类型,例如单点遥信(0x01)、遥测(0x0D)、SOE事件(0x1E)等。 |
| 1 | 可变结构限定词 (VSQ) | 1 | 指示信息对象的排列方式。最高位(SQ)表示地址是连续的(0)还是单个的(1);低7位表示本ASDU中信息对象的个数。 |
| 2-3 | 传送原因 (COT) | 2 | 说明数据传输的原因,如周期、总召唤、突发、响应站命令等。 |
| 4-5 | 公共地址 (Common Address) | 2 | 标识数据源站的地址。通常一个ASDU对应一个物理设备或逻辑站点。 |
2. 信息对象 (Information Object) 结构
每个信息对象都包含唯一的地址和具体的数据值及品质。
| 字段名称 | 长度(字节) | 描述 |
|---|---|---|
| 信息对象地址 (IOA) | 3 | 在特定站内唯一标识一个数据点。例如,第一个遥测点地址为 0x000001。 |
| 信息元素 (Information Element) | 可变 | 包含实际的数据值。例如,遥测可以是规约值或工程值;遥信可以是单点或双点状态。 |
| 品质描述词 (QDS) | 1 (可选) | 描述数据的品质,如是否有效、是否被取代、是否溢出等。 |
| 时标 (Time Tag) | 3或7 (可选) | 为带时标的事件记录(如SOE)提供精确的时间戳。 |
四、 典型报文实例解析
为了更直观地理解,以下提供一个典型通信流程和报文示例。
场景:主站发起总召唤,子站返回遥测数据。
建立TCP连接:主站作为TCP客户端连接子站的2404端口。
U帧启动数据:
主站 -> 子站:68 04 43 00 00 00 (U格式,STARTDT act)
子站 -> 主站:68 04 43 00 00 00 (U格式,STARTDT con) //链路建立成功
I帧总召唤请求:
主站 -> 子站:68 10 00 00 00 00 64 01 06 00 01 00 00 00 00 14
68 起始字符
10 APDU长度(16字节)
00 00 发送序N(S)=0
00 00 接收序N(R)=0
64 类型标识=100.表示总召唤命令
01 可变结构限定词(SQ=0. 1个对象)
06 00 传送原因=6(激活)
01 00 公共地址=1
00 00 00 信息对象地址=0
14 总召唤限定词(QOI)
S帧确认:
子站 -> 主站:68 04 01 00 02 00 (S格式,N(R)=1.确认收到第0号I帧)
I帧返回遥测数据:
子站 -> 主站:68 0C 02 00 00 00 09 03 01 00 01 00 00 00 10 00 (示例)
… (具体解析需按ASDU结构分析)
总结
IEC 104规约通过精心设计的I、S、U三种报文格式,构建了一个可靠、高效的远动通信系统。I帧承载核心数据并使用序列号保证可靠传输;S帧提供轻量级的确认机制;U帧负责管理通信连接。深入理解这种报文格式是开发、配置和维护基于IEC 104的电力自动化系统的基础。
