RTU/mimo/plan/libiec_文件拆分与文件服务.md

85 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`