1. 为什么电力调度都在聊IEC104
刚入行电力自动化那会儿,跟着师傅去变电站调试,师傅丢给我一份协议文档,封面上印着“IEC 60870-5-104”,说:“把这玩意儿吃透,你就能在这个行业混饭吃了。”我那时候以为他在开玩笑,后来才明白,这玩意儿确实是电力远动通信的硬通货。
先说清楚IEC104是什么。全称是“IEC 60870-5-104”,是国际电工委员会制定的电力系统远动通信协议,简单说就是电网调度中心和变电站、发电厂、新能源场站之间用来传数据的一套“通用语言”。它把IEC 60870-5-101的应用层数据,通过TCP/IP网络来承载,实现了从传统的串口通信到网络化通信的升级。
这套协议能做什么?一句话概括:上送遥测、遥信,下发遥控、遥调。遥测就是电压、电流、有功、无功这些模拟量,遥信就是开关位置、保护动作信号这些状态量,遥控就是调度端下发合闸、分闸指令,遥调就是调整变压器分接头或有功出力。电力系统的“四遥”功能,全部跑在IEC104上。
哪些场景会用到IEC104?举几个最典型的:电网调度自动化系统(SCADA)与变电站综自系统的通信、风电场和光伏电站的AGC/AVC控制、配电自动化终端(DTU/FTU)的数据上报、储能电站的能量管理平台接入。可以说,凡是需要把现场设备数据送到远方调度端的项目,大概率绕不开IEC104。
这篇文章适合谁看?如果你是刚接触电力通信的调试工程师、做电力监控软件开发的技术人员、或者搞新能源场站接入的集成工程师,这篇文章会把IEC104从协议原理到实际调试的完整链路讲透,还会穿插一些我在现场踩过的坑。我尽量用大白话把协议细节讲明白,保证你读完能直接上手干活。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. IEC104协议整体设计与核心思路拆解
2.1 为什么选择TCP/IP作为传输层
IEC104之所以选择TCP/IP,核心逻辑就一个字:省。省什么?省线、省设备、省维护成本。
早期的IEC101走串口,一条通道只能点对点连接,调度中心和每个厂站之间得拉专线或者租用通信通道,一个厂站一个通道,通道多了以后,调度端的通信管理机接口都不够用。而TCP/IP网络是天然的多对多架构,调度端只要开一个IP端口,理论上可以接入无数个厂站,只要网络能通,厂站侧也只需要一个网口,把数据送进调度数据网即可。
另外一个关键原因是传输可靠性。TCP协议自带三次握手、确认重传、拥塞控制机制,解决了串口通信中数据错帧、丢帧后难以恢复的痛点。IEC104把“传输可靠”这件事完全交给了TCP/IP协议栈,自己只管应用层的数据组织和业务逻辑,这让协议设计变得非常清爽。
2.2 协议栈结构:把101的应用层搬上网络
IEC104的协议模型可以用一句话理解:应用层沿用IEC101,传输层换成TCP,中间加一个APCI适配层。
APCI的全称是“应用协议控制信息”,它是IEC104在TCP之上增加的一个薄薄的壳,负责区分不同类型的帧、处理启动/停止/测试等控制功能。APCI加上ASDU(应用服务数据单元)组合在一起,就是一个完整的IEC104报文。
这里要特别强调一点:IEC104不是重新发明了一套应用层协议,而是把IEC101里那套成熟的数据模型、类型标识、传送原因、公共地址、信息对象地址全部保留了。这意味着,如果你之前写过IEC101的设备驱动,迁移到IEC104时,只要修改传输层代码,应用层的解析逻辑可以复用一大半。
2.3 三帧类型:I帧、S帧、U帧的分工
IEC104的帧类型是整个协议的基础设施,哪怕后面ASDU内容再复杂,也是装在这些帧里面跑的。
I帧,全称“信息传输帧”,是真正干活的帧。它的APCI里带发送序号N(S)和接收序号N(R),承载ASDU数据,负责传送遥测、遥信、遥控、时钟同步、总召等所有业务数据。
S帧,全称“监视帧”,不带ASDU,只有接收序号N(R),作用是纯确认。当设备收到一帧I帧但暂时没有数据要回送时,就发一个S帧告诉对方“你的第N帧我收到了,继续发”。
U帧,全称“控制帧”,不带序号,负责连接管理。启动建立连接用STARTDT,停止连接用STOPDT,测试链路用TESTFR,这是通信双方握手的关键帧。
这三个分工非常重要,我遇到过不少开发者在写协议栈时,把S帧当普通报文忽略掉,结果导致对端因为接收序号不连续而不断重传,整个通信链路卡死。
2.4 IEC104与IEC101的关键差异
做了这么多年协议,被问到最多的问题是:“IEC101还能用,为什么还要搞IEC104?”
核心差异有三个。
第一,传输介质不同。101走串口(RS-232/RS-485),速率一般9600bps或19200bps,而104走以太网,百兆千兆随便跑。这个速率差异直接决定了数据的吞吐能力,在数据量大的场站,101传一轮全数据可能要几分钟,104几乎秒级完成。
第二,传输确认机制不同。101的确认机制依赖于链路层的“确认帧”,而104直接依赖TCP的ACK机制加上应用层的S帧/
