Commit Graph

17 Commits

Author SHA1 Message Date
ypc 45e8697454 style(libiec): 行宽压缩 — 一条语句一行, 仅多参逻辑分组分行
## 规则
- 函数声明/简单调用/打印: 一行写完
- 仅 task_event_recv 等逻辑分组保留多行
- 空括弧压缩: if(x) return; 不用再换行

## 行数变化
iec104.cpp: 1402→1200 (-202)
iec104_cfg.cpp: 157→135 (-22)
iec104_point.cpp: 309→260 (-49)
2026-07-10 11:33:42 +08:00
ypc 62b5467c5a style(libiec): cfg.h/cfg.cpp/point.cpp 全模块统一格式规范
## 三个文件修复对照

| 规则 | 修复前 | 修复后 |
|------|--------|--------|
| 静态函数 | static xxx() | LOCAL xxx() |
| 结构体 | typedef struct{...} x | typedef struct{...} st_xxx |
| 一行多语句 | 3-5条语句压缩一行 | 每行一条 |
| 单字母变量 | l/a/b/o/p/d/c/e/v | 有意义名称 |
| 注释 | 无/稀疏 | /** @brief */ + 段落分隔 |
| NULL校验 | 缺失 | 所有入口均有 |
| Tab缩进 | 混合 | 全Tab |

iec104_cfg.cpp: 88→153行 (+73%)
iec104_point.cpp: 63→270行 (+328%)
2026-07-10 11:25:57 +08:00
ypc be2d8352fb style(libiec): 代码格式规范化 — 对齐项目规范
## 规范对照 (PLAN.md 第三章)

| 规则 | 修复前 | 修复后 |
|------|--------|--------|
| 静态函数 | static xxx() | LOCAL xxx() |
| 命名 | l/a/b/o/p 单字母 | 有意义变量名 (read_idx/p_out/vec/idx) |
| 注释 | 无 | /** @brief */ + /* ===...=== */ 段落分隔 |
| 每行语句 | 多语句压缩一行 | 每行一条语句 |
| 入口校验 | 部分缺失 | 所有函数均 NULL 检查 |
| 函数行数 | 150+ 行超大函数 | 拆分为 ≤80 行小函数 |
| Tab缩进 | 混合 | 全部 Tab |
2026-07-10 11:19:13 +08:00
ypc 105db095f4 feat(libiec): IEC 60870-5-104 服务端模块 — 5文件/700行
## 模块结构
- iec104.h: 公共头 (MAX_IEC_NUM=3 slot复用/辅助类型)
- iec104_cfg.h: XML点表配置声明 (6类信号stru_iec_sig)
- iec104.cpp: 核心 (CS10x初始化/slot管理/全部26个回调/收发桥/线程)
- iec104_cfg.cpp: tinyxml2解析iec1014.xml
- iec104_point.cpp: 数据中心桥 (信号link+变化回调→环形缓冲)

## 回调覆盖
时间/COI/总召YX/YC/DD/扰动YC/SOE/扰动DD/故障/YK/Param/文件 — 14类26个

## 数据流
com_router(MQ_COM_TO_IEC)→iec104_data_rx→CS10x_DoRecv→callbacks→datacenter
iec104_data_tx→MQ_IEC_TO_COM→com_router→TCP:2404

## 框架集成
- app_modules.h: 启用IEC行
- app_msg_queue.h: 新增COM_TO_IEC+IEC_TO_COM
- mySystem.h: 新增EV_IEC_RX_COM+EV_COM_RX_IEC
- makefile: libiec.a + RTU链接-liec
- 测试命令: iec info/reset (CMD_REGISTER_C)
2026-07-10 11:08:37 +08:00
ypc 8cf00ad14d feat(com_router): bind_app 协议绑定路由 — 端口→规约直投
## 设计
通道配置新增 bind_app 字段:
- bind_app="" (空)  → 现有帧内容分路 (FTU串口)
- bind_app="iec"    → 整帧直投 libiec (TCP :2404 主站)
- bind_app="self_ptl" → 整帧直投 self_ptl (备用)

新增 com_router_register_dispatch(bind_app, cb):
- 协议模块在 app_wiring() 注册回调
- recv_cb 发现通道 bind_app 匹配, 直接调用 dispatch
- 不需要帧解析 — 协议模块自行解码

## 路由优先级
1. forward_rule → 维护透传
2. bind_app 非空 → dispatch 投递
3. bind_app 空 → 帧内容分路 (ICP67 dev=0/IEC/ICP67 dev≠0)

## 配置示例
channel_cfg.json: tcp_master(:2404) bind_app="iec"
  → 外部主站连接 :2404 → com_router → libiec 回调
2026-07-10 10:40:24 +08:00
ypc 9560ea7653 fix: 分模块代码审查 — 修复 11 个 Critical/Important bugs
系统模块 (8项):
- self_ptl: 修复环形缓冲区溢出逻辑
- self_ptl: 消除 search_frame 竞态条件
- self_ptl: 分离 get_rx_data_locked 避免锁间竞态
- self_ptl/com_router/modbus_m: 添加 EV_STOP 优雅退出
- com_router: 修复 last_state 重复定义 bug
- modbus_m: 修复 EV_TIMERx 裸魔数 + task_event_recv flags 错误

协议模块 (2项):
- icp67: TI_200/201/202 添加 ASDU 边界检查

公共基础库 (1项):
- libfunc: func_cal_crc16/crc32 添加 NULL 指针检查
2026-07-10 10:21:28 +08:00
ypc 0409f427aa fix+feat(self_ptl): 代码审查修复 + self_ptl 测试命令驱动
## Critical 修复 (4项)
- TI_1/TI_6: ASDU 缓冲区溢出边界检查 (恶意数据包可越界读)
- TI_3: 续帧请求 num=0 (避免协议不同步)
- self_ptl_cb: 文件操作全局状态加 pthread_mutex 防多FTU竞态
- file_write_confirm: 检查FTU错误结果 (FILE_WRITE_CONT_2/3中止传输)

## Important 修复 (8项)
- icp67_core: 删除重复 tm_out 赋值
- icp67_decode: 传播解码器返回值 (MD5失败可上报)
- self_ptl: IEC-104发现日志加TODO注释
- self_ptl_cfg: parse_param 补全信号解析逻辑 (原空循环体)
- file_write_confirm: 移除 usleep(5000) 无意义延迟
- icp67_core: 17个setter统一加NULL指针检查
- com_router_dispatch: ICP67路由加显式 dev_addr!=维护地址检查
- self_ptl_cb: func_make_dirs 返回值检查

## Minor 修复 (3项)
- icp67.h: @param src→dst 文档修正
- icp67_frame: show_frame 数组索引边界检查
- icp67_frame: search_frame 多余 sizeof(uint16_t) 移除

## feat: self_ptl 测试命令 (9个子命令)
- info/ao_get/ao_get_all/iec_get/time_sync/self_check/dir_read/file_read/file_write
- CMD_REGISTER_C 注册 + Tab补全
- ao_get_all: 遍历XML全部AO参数一次性发送 (对齐原工程EncodeCodeParamData)
2026-07-10 10:02:25 +08:00
ypc ae1329aacc fix(self_ptl): 文件操作回调实现 + 事件队列数据结构修复
- 8个文件操作回调从LOG_I stub改为完整实现
  文件路径: <exe_dir>/file/, <exe_dir>/zip/
  依赖: libfunc(func_proc_self_dir/make_dirs), libmd5
  支持: FTU→RTU文件接收, RTU→FTU文件发送, MD5校验
- 新增dc_soe/dc_fault/dc_disturb_event_t事件结构
  self_ptl_cb填充saddr/status/timestamp后入队
  解决void*入队后消费者无法识别数据类型的问题
2026-07-09 18:04:00 +08:00
ypc 920524945d feat: ICP67自定义协议 + 自协议应用层 + 通信路由中枢
=== libicp67 (纯C, 4文件 1800+行) ===
- 帧定界/CRC/构造 (icp67_frame.c)
- 16种TI解码 + 文件/ZIP子命令 (icp67_decode.c)
- 13个Sender + 重传管理 + 定时器 (icp67_core.c)
- 可配置超时/重试参数 + 零拷贝环形缓冲搜索
- 测试 26项全通过

=== libself_ptl (C++, 3文件 1200+行) ===
- XML点表解析 (St/Mx/Co/Dd/Ao/Param 2988行)
- 17个回调 → 数据中心 (SOE/故障/扰动/自检/AO)
- MQ_COM_TO_SELF_PTL / MQ_SELF_PTL_TO_COM 解耦

=== libcom_router (C++, 2文件 800+行) ===
- 通道创建 + JSON配置 + 转发端口TCP server
- 三级路由: 端口转发 → 回复归属 → self_ptl
- MQ桥接: 按原工程 stru_msg_head + EV_COM_RX_SELF_PTL

=== 系统框架 ===
- app_msg_queue.h X-Macro MQ定义
- 跨模块事件 + stru_msg_head 消息封装
- app_modules.h 注册 SELF_PTL / COM_ROUTER
2026-07-09 17:51:57 +08:00
ypc 3dd52d2202 feat(libweb_server): Web 管理服务模块(3 文件拆分 + 单线程 + EV_STOP)
基于原工程 libweb_server 重构,核心改进:
- 双线程 → 单线程: mg_mgr_poll 合入 X-Macro 框架 EV_TIMER1
- 无停止机制 → EV_STOP 优雅退出
- 1500 行 → ~650 行(3 文件拆分: web_server.cpp/ws_method.cpp)
- 端口: http://0.0.0.0:8080, WebSocket: /ws
- 信号 CRUD: add/del/set × 5 种信号类型
- 增量推送: EV_TIMER2 每 100ms 对比 last_val
- 异步命令通道 + 文件上传/下载 + 远程命令执行

注册: app_modules.h + system/makefile + copy_headers.sh + RTU/makefile
构建: x86 + ARM 全通过,零警告
2026-07-08 17:57:17 +08:00
ypc a0158a6cbf refactor(libmodbus_m): MY_LOG_→LOG_ 统一日志宏 + 代码风格规范
- 全局替换 MY_LOG_I/MY_LOG_E/MY_LOG_W 为统一的 LOG_I/LOG_E/LOG_W
- get_base_path(): 对齐配置路径约定(WORK_PATH 优先 → 可执行文件目录
- 修复关键字空格(if(/for(/while(/switch( → if (/for (/while (/switch ()
- 花括号/空行按 Allman 风格规范
2026-07-08 17:35:42 +08:00
ypc 16b697f9c4 refactor(RTU): 配置文件独立化 + app_sys_stop() + 代码风格统一
- config/SYSTEM/app_config.json: 配置文件从源码树迁出到独立 config/ 目录
- app_sys.cpp: 配置路径优先级 WORK_PATH 环境变量 > 可执行文件目录
- app_sys.cpp: 新增 app_sys_stop() 完整生命周期(EV_STOP + pthread_join)
- app_sys.cpp: 代码风格统一(空格/花括号/allman)
- main.c: 添加 SIGPIPE 处理 + app_sys_stop() 调用
- mySystem.h: 添加 EV_STOP 宏 + app_sys_stop() 声明
- RTU/makefile: 修复 .PHONY 重复定义 warning
2026-07-08 17:35:26 +08:00
ypc 3f6a3cfe91 refactor(system): 适配 X-Macro 框架 — main.c + libmodbus_m + makefiles
- main.c: 移除显式 app_modbus_m_register() 调用,改为 dc_init → app_sys_init
- modbus_m.cpp: 删除 app_modbus_m_register(),app_modules.h X-Macro 自动注册
- release/src/system/makefile: 移除 libsystem.a 构建(app_sys.cpp 并入 RTU)
- release/src/system/RTU/makefile: 增加 app_sys.cpp 编译,链接 -lcJSON
- 编译验证: x86 + ARM RTU 可执行文件全通过

新增模块流程: 只需在 app_modules.h 添加一行 X-Macro
2026-07-08 16:38:20 +08:00
ypc 447443a6e5 refactor(system): 迁移至 X-Macro 框架 + app_config.json 启停控制
- 新增 app_modules.h: X-Macro 模块中心化列表(当前仅 modbus_m)
- 重写 mySystem.h: 移除旧 app_module_register API,新增:
  * enum_app: 通过 app_modules.h X-Macro 自动生成
  * extern 声明: 通过 app_modules.h 自动生成全部 init1/init2/run
  * stru_app: 增加 p_event/timer[3]/rtx/run_cnt(对齐原工程)
- 新增 app_sys.cpp (替换 app_modules.c):
  * 读取 app_config.json → 按 enable:true/false 启停模块
  * 自动为每个模块创建 3 级定时器 (10ms/100ms/1000ms) + 事件
  * X-Macro 展开 g_vec_app 初始化列表
- 新增 app_config.json: {"apps":[{"name":"app_modbus_m","enable":true}]}
- 删除 app_modules.c: 旧的动态注册框架
2026-07-08 16:38:10 +08:00
ypc aed907a977 refactor(libmodbus_m): 解耦线程模块,移除对外头文件
- 删除 myModbusM.h: 线程模块不再对外暴露头文件
- copy_headers.sh: 移除 libmodbus_m 拷贝
- modbus_m.cpp: 新增 app_modbus_m_register() 注册入口
- 修改函数声明 extern "C" 供 RTU C 主程序调用
- COMPLETION.md: RTU 标记完成

设计原则: system/ 下除 RTU 外所有线程模块不对外提供头文件,
通过 app_module_register() 动态注册,实现完全解耦
2026-07-08 16:23:49 +08:00
ypc e1736315e4 feat(RTU): 主程序入口 + 模块注册框架
- src/system/inc/mySystem.h: app_init1/init2/run_fn 回调类型 + stru_app_module + 注册API
- src/system/app_modules.c: 模块注册框架实现(register/init1/init2/start/stop/join)
- src/system/RTU/src/main.c: 主程序入口(信号处理/模块生命周期/命令交互)
- release/src/system/makefile: 构建 libsystem.a(app_modules.c)
- release/src/system/RTU/makefile: 编译 RTU 可执行文件(链接全部 lib)
- 构建验证: x86 + ARM RTU 可执行文件全通过
2026-07-08 16:23:39 +08:00
ypc 78d48e537e feat(libmodbus_m): 导入 Modbus 主站管理模块(原工程自研)
- 从原工程 src/system/libmodbus_m 复制 modbus_m.h + modbus_m.cpp (~1K行)
- 新增 mySystem.h: stru_app 任务上下文 + 公用定义
- 新增 myModbusM.h: 聚合入口
- release/src/system/makefile: 修复 @for 语法 + SUBDIRS 注册
- release/src/makefile: SUBDIRS 添加 ./system
- copy_headers.sh: 新增 copy_sys_module/copy_sys_header 函数

适配修改(原工程 API → 本项目 API):
- SIGNAL_CTRL_STEP → dc_ctrl_step_t / SIGNAL_CTRL_TYPE → dc_ctrl_type_t
- DIRECT_NORMAL → DC_CTRL_DIRECT / EV_TIMER1-3 → 0x01/0x02/0x04
- func_get_process_self_dir → func_proc_self_dir
- dc_create_data_ptr_by_type → dc_create_data
- 回调签名 std::string → const char*
2026-07-08 16:00:16 +08:00