一、IEC104 协议概述
1.1 协议简介
IEC 60870-5-104 (简称 IEC104) 是国际电工委员会(IEC)制定的用于电力系统调度自动化的远动通信协议。它是在 IEC 60870-5-101 基础上,通过 TCP/IP 网络传输的扩展协议。
┌────────────────────────────────────────────────────────────────────┐ │ IEC 60870-5-104 协议栈 │ ├────────────────────────────────────────────────────────────────────┤ │ 应用层 ASDU (Application Service Data Unit) │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ 类型标识 | VSQ | 传送原因 | 公共地址 | 信息对象地址 | 数据 │ │ │ └──────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────┤ │ APCI (Application Protocol Control Information) │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ 启动字符(0x68) | APDU长度 | 控制域(4字节) │ │ │ └──────────────────────────────────────────────────────────────┘ │ ├────────────────────────────────────────────────────────────────────┤ │ 传输层: TCP (端口 2404) │ ├────────────────────────────────────────────────────────────────────┤ │ 网络层: IP │ ├────────────────────────────────────────────────────────────────────┤ │ 数据链路层 + 物理层: 以太网 │ └────────────────────────────────────────────────────────────────────┘
1.2 帧类型
IEC104 协议定义了三种帧格式:
| 帧类型 | 名称 | 功能 | 控制域特征 |
|---|
| I帧 | 信息帧 | 传输用户数据(ASDU) | 发送序号 + 接收序号 |
| S帧 | 监视帧 | 确认接收、流量控制 | 只有接收序号 |
| U帧 | 无编号帧 | 链路控制(启动/停止/测试) | STARTDT/STOPDT/TESTFR |
I帧格式 (信息传输): ┌────────┬────────┬────────┬────────┬────────┬─────────────┐ │ 0x68 │ 长度 │ 发送序号(低) │ 发送序号(高) │ 接收序号(低) │ 接收序号(高) │ ASDU... │ └────────┴────────┴────────┴────────┴────────┴─────────────┘ S帧格式 (监视确认): ┌────────┬────────┬────────┬────────┬────────┬────────┐ │ 0x68 │ 0x04 │ 0x01 │ 0x00 │ 接收序号(低) │ 接收序号(高) │ └────────┴────────┴────────┴────────┴────────┴────────┘ U帧格式 (链路控制): ┌────────┬────────┬────────┬────────┬────────┬────────┐ │ 0x68 │ 0x04 │ 控制字 │ 0x00 │ 0x00 │ 0x00 │ └────────┴────────┴────────┴────────┴────────┴────────┘
1.3 核心数据类型
根据代码中的实现,主要支持以下数据类型:
| 数据类型 | 类型标识符 | 说明 |
|---|
| 遥信(DI) | M_SP_NA (1), M_DP_NA (3) | 单点/双点状态信息 |
| 遥测(AI) | M_ME_NC (13), M_ME_NA (9) | 浮点/归一化测量值 |
| 遥控(DO) | C_SC_NA (45), C_DC_NA (46) | 单点/双点控制命令 |
| 遥调(AO) | C_SE_NA (48), C_SE_NC (50) | 归一化/浮点设定值 |
| SOE | M_SP_TB (30) | 带时标的单点状态变化 |
| 电能量 | M_IT_NA (15) | 累积电能量 |
| 时钟同步 | C_CS_NA (103) | 时钟同步命令 |
二、应用场景
2.1 典型应用领域
┌────────────────────────────────────────────────────────────────────────────┐ │ IEC104 典型应用架构 │ ├────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 调度中心 / SCADA主站系统 │ │ │ │ (IEC104 Client / 控制站) │ │ │ └──────────────────────────┬──────────────────────────────┘ │ │ │ │ │ ┌──────────┴──────────┐ │ │ │ TCP/IP 网络 │ │ │ │ (端口 2404) │ │ │ └──────────┬──────────┘ │ │ ┌──────────────────┼──────────────────┐ │ │ │ │ │ │ │ ┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐ │ │ │ 变电站RTU │ │ 配电终端DTU │ │ 新能源控制器 │ │ │ │ (Server) │ │ (Server) │ │ (Server) │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ │ ┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐ │ │ │ 保护/测控 │ │ 开关设备 │ │光伏/储能系统│ │ │ │ 装置 │ │ │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ └────────────────────────────────────────────────────────────────────────────┘
2.2 主要应用场景
| 应用场景 | 描述 | 特点 |
|---|
| 电网调度 | 省/地/县调度中心与变电站通信 | 大规模、高可靠性 |
| 配电自动化 | 配电主站与配电终端通信 | 分布式、实时性 |
| 新能源 | 光伏/风电场与集控中心通信 | 海量数据、变化频繁 |
| 储能系统 | BMS与EMS之间的数据交换 | 双向控制 |
| 工业自动化 | 工厂电力监控系统 | 集成性强 |
三、客户端与服务端架构对比
3.1 该程序在控制器侧的角色
┌─────────────────────────────────────────────────────────────────────────────┐ │ 控制器侧 IEC104 通信架构 │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌───────────────────────────────────────────────────────────────────┐ │ │ │ MGC V2 控制器 │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ │ │ pro_iec104 模块 │ │ │ │ │ │ ┌─────────────────────┐ ┌─────────────────────────────┐ │ │ │ │ │ │ │ Sub104 (子站) │ │ TerminalMaster (主站) │ │ │ │ │ │ │ │ ┌───────────────┐ │ │ ┌─────────────────────┐ │ │ │ │ │ │ │ │ │ TCP Server │ │ │ │ TCP Client │ │ │ │ │ │ │ │ │ │ 监听端口2404 │ │ │ │ 主动连接主站 │ │ │ │ │ │ │ │ │ │ 被动等待连接 │ │ │ │ 主动发起请求 │ │ │ │ │ │ │ │ │ └───────────────┘ │ │ └─────────────────────┘ │ │ │ │ │ │ │ │ 功能: │ │ 功能: │ │ │ │ │ │ │ │ - 响应总召 │ │ - 发起总召 │ │ │ │ │ │ │ │ - 数据变化上报 │ │ - 接收数据 │ │ │ │ │ │ │ │ - 接收遥控命令 │ │ - 下发遥控命令 │ │ │ │ │ │ │ │ - 执行本地控制 │ │ - 时钟同步 │ │ │ │ │ │ │ └─────────────────────┘ └─────────────────────────────┘ │ │ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ └───────────────────────────────────────────────────────────────────┘ │ │ ▲ │ │ │ │ TCP/IP │ TCP/IP │ │ │ ▼ │ │ ┌─────────┴─────────┐ ┌─────────┴─────────┐ │ │ │ 上级调度主站 │ │ 下级子设备RTU │ │ │ │ (SCADA Client) │ │ (IEC104 Server) │ │ │ └───────────────────┘ └───────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘
3.2 客户端(Client) vs 服务端(Server) 详细对比
| 特性 | 子站模式 (Sub104/Server) | 主站模式 (TerminalMaster/Client) |
|---|
| TCP角色 | TCP Server (监听端口) | TCP Client (主动连接) |
| 默认端口 | 2404 (可配置) | 连接远端2404 |
| 连接方式 | 被动等待连接 | 主动发起连接 |
| 数据流向 | 上报数据给主站 | 从子站采集数据 |
| 总召处理 | 响应总召,上传数据 | 发起总召,接收数据 |
| 遥控流程 | 接收并执行遥控命令 | 下发遥控命令 |
| 变化上报 | 主动上报(COS/COT) | 被动接收变化数据 |
| 时钟同步 | 接收对时命令 | 发送对时命令 |
| 典型应用 | 作为被采集设备对接上级调度 | 采集下级子设备数据 |
四、IEC104 vs IEC61850 vs Modbus 协议对比
4.1 综合对比表
| 特性 | IEC 60870-5-104 | IEC 61850 | Modbus TCP |
|---|
| 标准组织 | IEC TC57 | IEC TC57 | Modicon (Schneider) |
| 发布时间 | 2000年 | 2003年 | 1979年(RTU)/1999年(TCP) |
| 传输层 | TCP/IP (端口2404) | TCP/IP + 专用协议 | TCP/IP (端口502) |
| 数据模型 | 平面点表 | 面向对象(IED/LD/LN) | 寄存器/线圈 |
| 应用层 | ASDU | MMS/GOOSE/SMV | 简单请求/响应 |
| 语义描述 | 类型标识符 | SCL语言描述 | 无 |
| 变化上报 | 支持(COT机制) | 支持(Report/GOOSE) | 不支持(需轮询) |
| 事件顺序 | SOE(毫秒级) | 支持(纳秒级) | 不支持 |
| 配置方式 | 手动配置点表 | SCL/ICD/SCD自描述 | 手动配置寄存器 |
| 互操作性 | 良好 | 优秀(自描述) | 一般 |
| 复杂度 | 中等 | 高 | 低 |
| 实施成本 | 中等 | 高 | 低 |
| 主要应用 | 电力调度/配电 | 变电站内部 | 工业自动化 |
4.2 协议栈对比图
┌──────────────────────────────────────────────────────────────────────────────┐ │ 协议栈架构对比 │ ├──────────────────────┬──────────────────────┬──────────────────────┐─────────┤ │ IEC 104 │ IEC 61850 │ Modbus TCP │ OSI层 │ ├──────────────────────┼──────────────────────┼──────────────────────┼─────────┤ │ │ SCL 配置语言 │ │ │ │ ASDU 数据单元 ├──────────────────────┤ │ 应用层 │ │ (类型+COT+数据) │ MMS │ GOOSE │ SMV │ Modbus 功能码 │ │ ├──────────────────────┼─────┼───────┼────────┼──────────────────────┼─────────┤ │ APCI │ │ │ │ │ 表示层 │ │ (I/S/U帧控制) │ TCP │ 以太网│ 以太网 │ MBAP Header │ │ ├──────────────────────┼─────┼───────┼────────┼──────────────────────┼─────────┤ │ TCP │ TCP │ IEEE │ IEEE │ TCP │ 传输层 │ │ (端口2404) │ │802.1Q │802.1Q │ (端口502) │ │ ├──────────────────────┼─────┴───────┴────────┼──────────────────────┼─────────┤ │ IP │ IP │ IP │ 网络层 │ ├──────────────────────┼──────────────────────┼──────────────────────┼─────────┤ │ Ethernet │ Ethernet │ Ethernet │数据链路 │ └──────────────────────┴──────────────────────┴──────────────────────┴─────────┘
4.3 数据模型对比
┌─────────────────────────────────────────────────────────────────────────────┐ │ 数据模型对比 │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ IEC 104 (平面点表): │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 公共地址 │ 信息对象地址 │ 数据值 │ 品质描述 │ 时标 │ │ │ │ 1 │ 0x0001 │ 1 │ 0x00 │ CP56Time2a │ │ │ │ 1 │ 0x4001 │ 220.5 │ 0x00 │ - │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ IEC 61850 (面向对象): │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ IED: Bay1_Protection │ │ │ │ └─ LD: Protection │ │ │ │ └─ LN: PTOC1 (过流保护) │ │ │ │ ├─ DO: Str (启动) │ │ │ │ │ └─ DA: stVal = true │ │ │ │ │ └─ DA: q = good │ │ │ │ │ └─ DA: t = 2024-01-15T10:30:00.123Z │ │ │ │ └─ DO: Op (动作) │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ Modbus (寄存器模型): │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 线圈 (Coil): 地址 0-65535, 单bit读写 │ │ │ │ 离散输入 (DI): 地址 0-65535, 单bit只读 │ │ │ │ 保持寄存器 (HR): 地址 0-65535, 16bit读写 │ │ │ │ 输入寄存器 (IR): 地址 0-65535, 16bit只读 │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘