IEC 104规约(全称IEC 60870-5-104)是国际电工委员会制定的电力自动化领域核心通信协议。它基于TCP/IP网络传输,是IEC 60870-5-101规约的网络化扩展,用于实现控制中心(如调度主站)与变电站、远程终端单元(RTU)等子站之间的实时数据监控与控制。由于其基于标准以太网和TCP/IP协议栈,IEC 104具备实时性强、长连接、易于集成现代网络等优势,被广泛应用于变电站自动化、配电自动化、SCADA系统和新能源发电监控等领域。理解其报文结构是进行系统开发、集成、调试和故障排查的基础。
一、报文层次结构:APDU / APCI / ASDU
IEC 104报文遵循清晰的分层结构。其基本传输单元是 应用规约数据单元(APDU,Application Protocol Data Unit) ,作为TCP报文的负载进行传输。APDU本身由两部分组成: 应用规约控制信息(APCI,Application Protocol Control Information) 和 应用服务数据单元(ASDU,Application Service Data Unit) 。
- APCI:位于APDU的头部,负责报文传输的控制和管理,如标识报文起始、长度和类型。
- ASDU:位于APCI之后,是报文的“数据核心”,包含了实际需要传输的应用层信息,如遥测值、遥信状态、遥控命令等。
一个APDU的结构可以示意为 [APDU] = [APCI] + [ASDU]。其中,APCI部分固定为6个字节,而ASDU部分长度可变。
二、三种报文帧格式:I帧、S帧、U帧
根据APCI中控制域的不同,IEC 104报文分为三种类型的信息帧,每种帧服务于不同的通信功能。
I帧(Information Format,信息传输帧)
功能:用于传输包含实际应用数据的报文,如遥测、遥信、遥控、遥调等命令和响应。
结构:I帧是长帧,长度大于6个字节。它必须包含APCI和ASDU两部分。
关键字段:APCI的控制域中包含 发送序列号(N(S)) 和 接收序列号(N(R)) ,用于实现可靠的数据传输和流量控制。
S帧(Supervisory Format,监视/确认帧)
功能:主要用于对接收到的I帧进行确认,告知发送方已正确接收了序号为N(R)之前的I帧。当接收方没有I帧需要发送(即无数据点对点回应)时,会发送S帧来确认接收。
结构:S帧是短帧,长度固定为6个字节。它只包含APCI,不包含ASDU。
关键字段:APCI的控制域中仅包含接收序列号(N(R)),用于确认已接收的I帧。
U帧(Unnumbered Format,无编号控制帧)
功能:用于链路的过程控制,不传输具体的应用数据。主要包括三种命令: 启动数据传输(STARTDT) 、 停止数据传输(STOPDT) 和 测试链路(TESTFR) 。
结构:U帧也是短帧,长度固定为6个字节。它只包含APCI,不包含ASDU。
关键字段:APCI的控制域使用特定的比特位(bit)来标识具体的控制命令,如开始、停止或测试。
三种帧的对比总结:
| 帧类型 | 长度 | 包含ASDU | 核心功能 | 控制域包含 |
|---|---|---|---|---|
| I帧 | >6字节 (长帧) | 是 | 传输实际数据(遥测、遥信、遥控等) | N(S) 和 N(R) |
| S帧 | 6字节 (短帧) | 否 | 确认接收到的I帧 | 仅 N(R) |
| U帧 | 6字节 (短帧) | 否 | 链路控制(启动、停止、测试) | 控制命令标识位 |
三、报文各关键字段详细解析
对一个具体的IEC 104报文进行解析,需要逐步解读从APCI到ASDU的各个字段。
1. 应用协议控制信息(APCI)解析
APCI由以下字段组成,固定6个字节:
启动字符(Start Byte) :1个字节。固定为0x68.用于标识一个IEC 104报文的开始。
APDU长度(Length Field) :1个字节。指示APDU体中剩余字节数,即控制域(4字节)加上ASDU部分的总长度。其值最大为253.
控制域(Control Field) :4个字节。这是解析帧类型和序列号的核心。根据前两个比特(bit)或比特组合,可以判定帧类型:
I帧:第一个字节的bit1 (LSB) = 0.
S帧:第一个字节的bit1 (LSB) = 1. bit2 = 0.
U帧:第一个字节的bit1 (LSB) = 1. bit2 = 1.
具体序列号解析:
I帧:控制域的前两个字节的低7位构成 发送序列号 (N(S)) ;后两个字节的低7位构成 接收序列号 (N(R))。每个序列号均为0-127的循环计数。
S帧:前两个字节固定为特定值(如01 00),后两个字节的低7位构成 接收序列号 (N(R)) 。
U帧:控制域使用高字节的特定比特位来区分命令,如 STARTDT(07 00 00 00)、STOPDT(13 00 00 00)、TESTFR(43 00 00 00)等。
2. 应用服务数据单元(ASDU)解析
只有I帧包含ASDU。ASDU由头部和数据体组成,是报文解析的重点:
类型标识(Type Identifier, TI) :1个字节。定义后续信息对象的类型和结构,是整个ASDU解析的纲领。例如:
0x01 (M_SP_NA_1):单点遥信(不带时标)。
0x0D (M_ME_NB_1):归一化遥测值(不带时标)。
0x2D (C_SC_NA_1):单点遥控命令。
0x64 (C_IC_NA_1):总召唤命令。
可变结构限定词(Variable Structure Qualifier, VSQ) :1个字节。其高比特位(bit8.即SQ位)决定信息对象地址的排列方式:
SQ=0:信息对象地址非连续,每个信息体都携带自己完整的对象地址。
SQ=1:信息对象地址连续,只需给出第一个信息体的地址,后续元素的地址依次加1.这种方式能有效节省报文空间。
该字节的低7位表示ASDU中包含的信息对象个数N。
传送原因(Cause of Transmission, COT) :2个字节。用于解释本次数据传输的起因、目的或结果。例如:
0x03:突发/自发(Spontaneous)。
0x06:激活(Activation)。
0x07:激活确认(Activation Confirmation)。
0x0A:总召唤/站召唤(Station/Cyclic/General Interrogation)。
公共地址(Common Address of ASDU) :2个字节。用于标识数据来源或目标的 站地址(RTU地址)。在同一个TCP连接中,主站和子站通过此地址区分不同的设备或逻辑单元。
信息体:这是ASDU的实际数据负载部分。
信息对象地址(Information Object Address, IOA) :在IEC 104中,IOA固定长度为3个字节。这是唯一的地址,用于在一个站内定位具体的测点或设备,例如遥信的第1个点、遥测的第100个点等。第三个字节通常用于高层次的结构化地址编码,在简单的应用中可设置为0.
信息对象值(Information Object Value) :根据类型标识的定义,包含具体的数值。例如,单点遥信通常占用1个比特,归一化遥测值占用2个字节(16位有符号整数)等。
四、典型通信流程与报文交互示例
理解IEC 104的“握手”和“数据交换”过程,对解析报文至关重要:
TCP连接建立:客户端(主站)主动向服务器端(子站)的TCP端口2404发起连接请求。
STARTDT激活(链路启动) :连接建立后,主站向子站发送一个STARTDT的U帧,请求开始数据传输。子站收到后,回复一个STARTDT CON的U帧进行确认。至此,数据传输通道建立。
总召唤(轮询数据) :主站发送一个类型标识为0x64(总召唤)的I帧。子站收到后,回复一个传送原因为0x07(激活确认)的I帧。随后,子站开始向主站发送全部的点表数据(多个I帧),最后以一个传送原因为0x0A(总召唤结束)的I帧来结束本轮召唤。
周期数据上送:在正常运行过程中,子站会按照配置,周期性地通过I帧上送遥测、遥信等变化数据。
报文确认:无论是主站还是子站,在收到对方的I帧后,都需要回复一个S帧(或者在自己发的下一个I帧中携带接收序列号N(R))来进行确认,以保证数据的可靠传输。
主动上报(突发数据) :当子站检测到事件(如开关变位、遥测越限)时,会主动发送一个传送原因为0x03(突发)的I帧给主站。
链路测试与关闭:当链路空闲时,任一方可以发送TESTFR的U帧来测试链路是否正常。通信结束后,主站可以发送STOPDT U帧停止数据传输。
五、总结与进阶建议
IEC 104规约报文解析是一项结合了标准理解和抓包分析的实践技能。关键点在于:
- 分层理解:明确APCI负责通信控制,ASDU负责携带具体业务数据。
- 状态机思维:理解I、S、U帧在不同通信流程(连接、启动、传数、确认)中扮演的角色。
- 按图索骥:从报文头开始,按照“启动字符 -> 长度 -> 控制域 -> 类型标识 -> 可变结构 -> 传送原因 -> 公共地址 -> 信息对象”的顺序进行逐字节拆解。常用工具如 Wireshark 已经支持对IEC 104协议的深度解析,便于学习。
深入掌握IEC 104解析,不仅仅能读懂二进制流,更能理解整个电力自动化系统的通信逻辑。对于高级应用,可以进一步研究时间同步机制、镜像(Redundancy)连接处理以及根据ASDU类型标识构造通信测试报文,从而在系统集成、调试与安全分析中游刃有余。随着新能源和微电网的普及,IEC 104在复杂拓扑下的扩展应用也将是其未来的重要方向。
