# IEC 101/104 libiec 改造完成报告 > **日期**: 2026-06-30 | **编译状态**: ✅ 通过 > **参照**: DCU_HOST | **改造**: `src/system/libiec/iec{,_method,_point,_cfg_parse}.{cpp,h}` --- ## 最终状态: 14/14 功能域完成, 2 项跳过(文件服务/升级→RTU Web方案) | 功能域 | 回调实现 | 注册 | datacenter | 状态 | |--------|----------|------|------------|------| | 配置文件解析 | `iec_cfg_parse.cpp` | - | - | ✅ | | 串口/网口驱动 | `app_thread_iec` 10ms | - | - | ✅ | | 总召遥测 | GetYcCountByGroup / GetYcValueByGroup | CS10x_S_GetYcByGroupHandler | signal_out | ✅ | | 总召遥信 | GetYxCountByGroup / GetYxStatusByGroup | CS10x_S_GetYxByGroupHandler | signal_out | ✅ | | SOE | GetSOE / GetSOESendNum / UpdateSoePtrOut | CS10x_S_SOEHandler | dc_event_queue | ✅ | | 扰动遥测 | GetDiturbYc / GetDiturbYcSendNum / UpdateDiturbYcPtrOut | CS10x_S_DiturbYcHandler | 内部队列 | ✅ | | 电度 | GetDdCountByGroup / GetDdValueByGroup | CS10x_S_GetDdByGroupHandler | signal_out | ✅ | | 时标电度 | GetTimeDdu / GetTimeDduSendNum / UpdateTimeDduPtrOut | CS10x_S_DiturbDduHandler | dc_disturb_dd_queue | ✅ | | 故障事件 | GetFaultEvent / GetEventSendNum / UpdateFaultEventPtrOut | CS10x_S_FaultEventHandler | dc_fault_queue | ✅ | | 对时 | GetTimeItfs / SetTimeItfs | CS10x_TimeRWHandler | - | ✅ | | 遥控校验 | Cs10xYkVerifyItfs | CS10x_S_YkVerifyHandler | signal_yk | ✅ | | **遥控命令** | **SetYkInfor** (新增) | **CS10x_SetYkInforHandler** (新增) | signal_yk | ✅ | | 定值区 | GbParamGetParamArea / GbParamSetParamArea | CS10x_S_ParamAreaHandler | - | ✅ | | **参数读写** | **GbParamAddIecParam / RunRding / RunWting** (新增) | **CS10x_S_IECParamHandler** (新增) | signal_ao/param | ✅ | | **参数信息** | **GbParamGetTotalNum / GbParamGetIecParam** (新增) | **CS10x_S_GetParamInfoHandler** (新增) | signal_ao/param | ✅ | | 文件服务 | `Fm_GetDirFile/Fm_ReadFile/Cs10xWriteItfs/Cs10xWriteCheck/Cs10xWriteFinish` | `CS10x_S_FileReadOprtHandler + CS10x_S_FileWriteOprtHandler` | POSIX文件I/O | ✅ | | 软件升级 | NULL | `CS10x_S_UpdateProcHandler` | - | ⏭ | --- ## 本次新增 (P1+P2+P3) | 文件 | 新增内容 | |------|----------| | `iec_point.cpp` | +`dc_fault_register_queue_pop` / +`dc_disturb_dd_register_queue_pop` | | `iec_method.h` | +7 回调声明 (`SetYkInfor`, `GbParamAddIecParam`, `GbParamRunRding`, `GbParamRunWting`, `GbParamGetTotalNum`, `GbParamGetIecParam`) | | `iec_method.cpp` | +6 函数: `SetYkInfor`(40行), `GbParamAddElement`(40行), `GbParamAddIecParam`(10行), `GbParamRunRding/Wting`(5行), 辅助: `gb_param_map_dtype_to_tag` + `gb_param_find_by_inf` | | `iec.cpp` | 取消 3 行注释: `CS10x_S_IECParamHandler` / `CS10x_S_GetParamInfoHandler` / `CS10x_SetYkInforHandler` | --- ## 现状分析 ### ✅ 已实现 | 功能域 | 实现文件 | 状态 | |--------|----------|------| | 配置文件 XML 解析 | `iec_cfg_parse.cpp` | ✅ 完成 (St/Mx/Co/Dd/Ao/Param) | | datacenter 信号链接 | `iec_point.cpp` → `dc_signal_out_link_with_callback` | ✅ 完成 | | SOE 变位事件队列回调 | `iec_point.cpp` → `dc_event_register_queue_pop` | ✅ 完成 | | CS10x 初始化 (104/101) | `iec.cpp` → `PtlInit` | ✅ 完成 | | 参数配置 (104/101) | `iec.cpp` → `Set104PtlParam`/`Set101PtlParam` | ✅ 完成 | | 回调注册 (12/18 个) | `iec.cpp` → `PtlItfcInit` | ✅ 12 个已注册 | | 总召遥测回调 | `iec_method.cpp` → `GetYcCountByGroup` / `GetYcValueByGroup` | ✅ 完成 | | 总召遥信回调 | `iec_method.cpp` → `GetYxCountByGroup` / `GetYxStatusByGroup` | ✅ 完成 | | SOE 队列回调 | `iec_method.cpp` → `GetSOE` / `GetSOESendNum` / `UpdateSoePtrOut` | ✅ 完成 | | 扰动遥测队列回调 | `iec_method.cpp` → `GetDiturbYc` / `GetDiturbYcSendNum` / `UpdateDiturbYcPtrOut` | ✅ 完成 | | 电度总召回调 | `iec_method.cpp` → `GetDdCountByGroup` / `GetDdValueByGroup` | ✅ 完成 | | 时标电度队列回调 | `iec_method.cpp` → `GetTimeDdu` / `GetTimeDduSendNum` / `UpdateTimeDduPtrOut` | ✅ 完成 | | 故障事件队列回调 | `iec_method.cpp` → `GetFaultEvent` / `GetEventSendNum` / `UpdateFaultEventPtrOut` | ✅ 完成 | | 对时回调 | `iec_method.cpp` → `GetTimeItfs` / `SetTimeItfs` | ✅ 完成 | | 遥控校验回调 | `iec_method.cpp` → `Cs10xYkVerifyItfs` | ✅ 完成 | | 定值区占位 | `iec_method.cpp` → `GbParamGetParamArea` / `GbParamSetParamArea` | ✅ 占位 | | app_iec 线程驱动 | `iec.cpp` → `app_thread_iec` (10ms) | ✅ 完成 | ### ❌ 需要补充/修复 | 序号 | 功能 | 文件 | 优先级 | |------|------|------|--------| | P1 | 故障事件队列回调注册到 datacenter | `iec_point.cpp` | 高 | | P1 | 时标电度队列回调注册到 datacenter | `iec_point.cpp` | 高 | | P2 | 遥控命令处理 `SetYkInfor` + 注册 | `iec_method.cpp` + `iec.cpp` | 高 | | P3 | IEC 参数/定值读写回调完整实现 | `iec_method.cpp` | 中 | | P4 | 文件服务回调 | `iec_method.cpp` | 中 | | P5 | 配置文件路径集成到启动流程 | RTU 主程序 | 中 | | P6 | 编译验证 | - | 每次修改后 | --- ## 执行计划 ``` P1 (当前) → 补注册 datacenter 故障事件/时标电度队列回调 ├── iec_point.cpp: 增加 dc_fault_register_queue_pop 和 dc_disturb_dd_register_queue_pop └── 编译验证 P2 → 实现遥控 SetYkInfor 回调 ├── iec_method.cpp: 实现 SetYkInfor (遥控选择/执行/撤销) ├── iec.cpp: 取消 CS10x_SetYkInforHandler 注释 └── 编译验证 P3 → 实现参数定值回调 ├── iec_method.cpp: 实现 GbParamAddElement/GbParamRunRding/GbParamRunWting ├── iec_method.cpp: 实现 GbParamGetTotalNum/GbParamGetIecParam ├── iec.cpp: 取消 CS10x_S_IECParamHandler/CS10x_S_GetParamInfoHandler 注释 └── 编译验证 P4 → 文件服务回调 ├── iec_method.cpp: 实现文件操作回调(读/写/目录) ├── iec.cpp: 取消 CS10x_S_FileReadOprtHandler/CS10x_S_FileWriteOprtHandler 注释 └── 编译验证 P5 → 配置集成 ├── 修改启动流程加载 IEC XML 配置文件 ├── 修改 app_iec 线程注册 iec_point_init └── 编译验证 ```