109 lines
6.1 KiB
Markdown
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
|
|
└── 编译验证
|
|
```
|