RTU/mimo/plan/libiec_IEC104改造计划.md

109 lines
6.1 KiB
Markdown

# 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
└── 编译验证
```