85 lines
3.9 KiB
Markdown
85 lines
3.9 KiB
Markdown
# iec_method.cpp 功能拆分 + 文件服务 — ✅ 完成
|
||
|
||
> **日期**: 2026-06-30 | **编译**: ✅ 通过
|
||
> **删除**: iec_method.cpp (1014行) | **新增**: 11 个功能子文件
|
||
|
||
---
|
||
|
||
## 最终文件结构
|
||
|
||
```
|
||
src/system/libiec/
|
||
├── inc/
|
||
│ ├── iec.h # CS10x 封装 (44行)
|
||
│ ├── iec_method.h # 全部类型定义 + 全部回调声明 (230行)
|
||
│ ├── iec_cfg_parse.h # XML配置解析接口
|
||
│ └── iec_point.h # 信号点表入口
|
||
└── src/
|
||
├── iec.cpp # 初始化/参数配置/回调注册/线程驱动 (552行)
|
||
├── iec_cfg_parse.cpp # XML解析 (136行)
|
||
├── iec_point.cpp # datacenter链接+队列注册 (246行)
|
||
├── iec_common.cpp # ★ 全局队列+辅助函数 (80行)
|
||
├── iec_time.cpp # ★ 对时(GetTimeItfs/SetTimeItfs) (38行)
|
||
├── iec_yc.cpp # ★ 遥测+扰动遥测 (78行)
|
||
├── iec_yx.cpp # ★ 遥信 (43行)
|
||
├── iec_soe.cpp # ★ SOE (72行)
|
||
├── iec_dd.cpp # ★ 电度+时标电度 (95行)
|
||
├── iec_fault.cpp # ★ 故障事件 (75行)
|
||
├── iec_yk.cpp # ★ 遥控 (31行)
|
||
├── iec_param.cpp # ★ 参数/定值 (97行)
|
||
└── iec_file.cpp # ★ 文件服务 (176行)
|
||
```
|
||
|
||
## 文件服务实现
|
||
|
||
参照 DCU_HOST `FileParamItfs.c`,适配 RTU Linux:
|
||
|
||
| 回调 | CBB类型 | 功能 |
|
||
|------|---------|------|
|
||
| `Fm_GetDirFile` | `CS10x_GetProDirFile` | POSIX opendir/readdir 返回文件信息 |
|
||
| `Fm_SearchDirFileNum` | `CS10x_GetNumDirFile` | 统计目录下文件数 |
|
||
| `Fm_ReadFile` | `CS10x_ReadFile` | 按偏移读文件片段 (fseek+fread) |
|
||
| `Cs10xWriteItfs` | `CS10x_Write` | 按偏移写文件片段 (fseek+fwrite) |
|
||
| `Cs10xWriteFileCheckItfs` | `CS10x_WriteFileCheck` | 创建待写入文件 |
|
||
| `Cs10xWriteFinishItfs` | `CS10x_WriteFinish` | MD5校验+关闭文件 |
|
||
|
||
文件根目录: `./test/file/` | 注册: `CS10x_S_FileReadOprtHandler` / `CS10x_S_FileWriteOprtHandler`
|
||
|
||
---
|
||
|
||
## 拆分方案
|
||
|
||
```
|
||
src/system/libiec/
|
||
├── inc/
|
||
│ ├── iec_common.h ← 新增: 公共声明(全局队列 + GetInforOut/StampToCp56/local_sem_init)
|
||
│ └── iec_method.h ← 现有: 所有类型定义 + 全部回调声明(含新增文件服务)
|
||
└── src/
|
||
├── iec_common.cpp ← 新增: 全局队列定义 + 公共辅助函数
|
||
├── iec_time.cpp ← 新增: GetTimeItfs, SetTimeItfs, reset COI
|
||
├── iec_yc.cpp ← 新增: GetYc*, GetDiturbYc*, UserWriteDisturbYc
|
||
├── iec_yx.cpp ← 新增: GetYxCountByGroup, GetYxStatusByGroup
|
||
├── iec_soe.cpp ← 新增: UserWriteSoeEvent, GetSOE*, UpdateSoePtrOut
|
||
├── iec_dd.cpp ← 新增: GetDd*, GetTimeDdu*, UserWriteDisturbDd
|
||
├── iec_fault.cpp ← 新增: UserWriteFaultEvent, GetFaultEvent*
|
||
├── iec_yk.cpp ← 新增: Cs10xYkVerifyItfs, SetYkInfor
|
||
├── iec_param.cpp ← 新增: GbParam* 全部参数回调
|
||
├── iec_file.cpp ← ★ 新增: 文件服务全功能(读/写/目录)
|
||
└── iec_method.cpp ← 删除
|
||
```
|
||
|
||
## 文件服务实现
|
||
|
||
参照 DCU_HOST `FileParamItfs.c` 模式,适配 RTU Linux 环境:
|
||
|
||
| 回调 | 签名 | 实现 |
|
||
|------|------|------|
|
||
| `Fm_GetDirFile` | `CS10x_GetProDirFile` | 遍历目录返回文件信息 |
|
||
| `Fm_SearchDirFileNum` | `CS10x_GetNumDirFile` | 统计目录文件数 |
|
||
| `Fm_ReadFile` | `CS10x_ReadFile` | 按偏移读取文件片段 |
|
||
| `Cs10xWriteItfs` | `CS10x_Write` | 按偏移写入文件片段 |
|
||
| `Cs10xWriteFileCheckItfs` | `CS10x_WriteFileCheck` | 查询/创建待写入文件 |
|
||
| `Cs10xWriteFinishItfs` | `CS10x_WriteFinish` | MD5校验+文件最终化 |
|
||
|
||
注册: `CS10x_S_FileReadOprtHandler` / `CS10x_S_FileWriteOprtHandler`
|