RTU_ALL_AI/PLAN.md

20 KiB
Raw Blame History

RTU_ALL_AI 项目 — 纯 C AI 开发工作计划

版本: v1.1
日期: 2026-07-07
远程仓库: http://127.0.0.1:3000/admin/RTU_ALL_AI.git
分支策略: master主分支所有开发在 master 上直接进行)


一、项目定位

RTU_ALL_AI 是一个纯 C 编写的嵌入式通讯装置示例工程100% 由 AI 编写。项目采用与 RTU 一致的模块化架构,使用 Linux 内核侵入式链表(list.h)作为核心数据结构。工程既是 AI 编程能力的验证,也是后续 RTU 实际模块开发的参考模板。


二、项目架构(对齐 RTU 结构)

RTU_ALL_AI/
├── .gitignore
├── README.md
├── src/
│   ├── public/                        # 公共基础库(对齐 RTU 全部 11 个模块)
│   │   ├── liblist/                   # [P0★] Linux 内核侵入式链表纯C纯头文件
│   │   │   └── inc/list.h
│   │   ├── libfunc/                   # [P0★] 基础工具函数CRC、校验、文件操作
│   │   │   ├── inc/myFunc.h
│   │   │   └── src/myFunc.c
│   │   ├── liblog/                    # [P0★] 日志系统(控制台+文件,异步队列)
│   │   │   ├── inc/myLog.h
│   │   │   └── src/myLog.c
│   │   ├── libtask/                   # [P1★] 任务调度(定时器、事件循环)
│   │   │   ├── inc/myTask.h
│   │   │   └── src/myTask.c
│   │   ├── libdatacenter/             # [P1★] 数据中心(信号点 CRUD侵入式链表
│   │   │   ├── inc/myDatacenter.h
│   │   │   └── src/myDatacenter.c
│   │   ├── libcJSON/                  # [P1★] JSON 解析纯CcJSON 裁剪版)
│   │   │   ├── inc/cJSON.h
│   │   │   └── src/cJSON.c
│   │   ├── libxml/                    # [P2★] XML 解析纯Ctinyxml2 裁剪版)
│   │   │   ├── inc/tinyxml2.h
│   │   │   └── src/tinyxml2.c
│   │   ├── libmd5/                    # [P1★] MD5 摘要算法
│   │   │   ├── inc/myMd5.h
│   │   │   └── src/myMd5.c
│   │   ├── libmy_xxhash/              # [P1★] xxHash 快速哈希纯C
│   │   │   ├── inc/xxhash.h
│   │   │   └── src/xxhash.c
│   │   ├── libcomm/                   # [P2★] 通讯抽象层(串口/TCP 统一接口)
│   │   │   ├── inc/myComm.h
│   │   │   └── src/myComm.c
│   │   ├── libcmd/                    # [P2★] 命令处理框架(注册/分发/回传)
│   │   │   ├── inc/myCmd.h
│   │   │   └── src/myCmd.c
│   │   └── libmy_mosquitto/           # [P3○] MQTT 客户端mosquitto C 封装)
│   │       ├── inc/myMosquitto.h
│   │       └── src/myMosquitto.c
│   ├── protocol/                      # 协议实现层(对齐 RTU 全部 6 个模块)
│   │   ├── libmodbus/                 # [P1★] Modbus RTU/TCP 从站协议栈
│   │   │   ├── inc/myModbus.h
│   │   │   └── src/myModbus.c
│   │   ├── lib60870/                  # [P2★] IEC 60870-5-101/103/104 协议栈
│   │   │   ├── inc/lib60870_common.h
│   │   │   ├── inc/lib60870_public.h
│   │   │   ├── inc/gb101.h / gb103.h / gb104.h
│   │   │   └── src/*.c
│   │   ├── libicp67/                  # [P2○] ICP67 专有协议
│   │   │   ├── inc/icp67.h
│   │   │   └── src/icp67.c
│   │   ├── libmms_m/                  # [P3○] IEC 61850 MMS 主站(客户端)
│   │   │   ├── inc/myMms_m.h
│   │   │   └── src/myMms_m.c
│   │   ├── libmms_s/                  # [P3○] IEC 61850 MMS 从站(服务端)
│   │   │   ├── inc/myMms_s.h
│   │   │   └── src/myMms_s.c
│   │   └── libmongoose/               # [P3○] 嵌入式 HTTP/WebSocket 服务
│   │       ├── inc/mongoose.h
│   │       └── src/mongoose.c
│   ├── system/                        # 系统管理层(对齐 RTU 全部 9 个模块)
│   │   ├── RTU/                       # [P2★] 主程序入口(初始化、主循环)
│   │   │   ├── inc/app_sys.h
│   │   │   ├── inc/app_cmd.h
│   │   │   └── src/main.c
│   │   ├── libiec/                    # [P2★] IEC 规约点表定义与解析
│   │   │   ├── inc/iec.h
│   │   │   ├── inc/iec_point.h
│   │   │   ├── inc/iec_method.h
│   │   │   └── src/iec_cfg_parse.c
│   │   ├── libcom_decode/             # [P2★] 通讯通道解码与分发
│   │   │   ├── inc/com_decode.h
│   │   │   ├── inc/com_channel_def.h
│   │   │   └── src/com_decode.c
│   │   ├── libmodbus_m/               # [P2★] Modbus 主站管理(轮询/采集)
│   │   │   ├── inc/modbus_m.h
│   │   │   └── src/modbus_m.c
│   │   ├── libiec61850m/              # [P3○] IEC 61850 MMS 主站管理
│   │   │   ├── inc/iec61850m.h
│   │   │   ├── inc/parse_xml.h
│   │   │   └── src/iec61850m.c
│   │   ├── libiec61850s/              # [P3○] IEC 61850 MMS 从站管理
│   │   │   ├── inc/iec61850s.h
│   │   │   ├── inc/parse_xml.h
│   │   │   └── src/iec61850s.c
│   │   ├── libplc/                    # [P3○] PLC 逻辑引擎
│   │   │   ├── inc/plc.h
│   │   │   └── src/plc.c
│   │   ├── libself_ptl/               # [P3○] 内部自定义协议
│   │   │   ├── inc/self_ptl.h
│   │   │   ├── inc/method.h
│   │   │   └── src/self_ptl.c
│   │   └── libweb_server/             # [P2★] Web 管理服务REST + WebSocket
│   │       ├── inc/web_server.h
│   │       ├── inc/ws_method.h
│   │       └── src/web_server.c
│   └── test/                          # 单元测试(每个模块一个 test_xxx.c
│       ├── test_list.c                # [P0★] 链表操作全量测试
│       ├── test_log.c                 # [P0★] 日志队列测试
│       ├── test_datacenter.c          # [P1★] 数据中心 CRUD 测试
│       ├── test_cjson.c               # [P1★] JSON 解析测试
│       ├── test_modbus.c              # [P1★] Modbus 协议测试
│       └── test_60870.c               # [P2★] IEC104 协议测试
└── release/                           # 构建系统(与 RTU 结构完全一致)
    ├── build.sh                       # 编译脚本x86 / arm 一键切换)
    ├── linux.mk                       # 公共编译选项CROSS_COMPILE、路径
    ├── makefile                       # 顶层 Makefile递归 src/
    ├── pack_web.sh                    # Web 资源打包脚本P3 阶段)
    ├── inc/                           # 对外暴露的公共头文件
    └── src/                           # 每个模块的 makefile
        ├── makefile                   # 第二层(递归 public/protocol/system
        ├── public/
        │   ├── makefile               # 第三层
        │   ├── liblist/makefile
        │   ├── libfunc/makefile
        │   ├── liblog/makefile
        │   ├── libtask/makefile
        │   ├── libdatacenter/makefile
        │   ├── libcJSON/makefile
        │   ├── libxml/makefile
        │   ├── libmd5/makefile
        │   ├── libmy_xxhash/makefile
        │   ├── libcomm/makefile
        │   ├── libcmd/makefile
        │   └── libmy_mosquitto/makefile
        ├── protocol/
        │   ├── makefile
        │   ├── libmodbus/makefile
        │   ├── lib60870/makefile
        │   ├── libicp67/makefile
        │   ├── libmms_m/makefile
        │   ├── libmms_s/makefile
        │   └── libmongoose/makefile
        └── system/
            ├── makefile
            ├── RTU/makefile
            ├── libiec/makefile
            ├── libcom_decode/makefile
            ├── libmodbus_m/makefile
            ├── libiec61850m/makefile
            ├── libiec61850s/makefile
            ├── libplc/makefile
            ├── libself_ptl/makefile
            └── libweb_server/makefile

图例: [P0★] 本期实现 | [P2★] 本期实现 | [P3○] 后续扩展(预留目录+stub


三、代码规范(严格对齐 RTU 风格)

3.1 命名规范

类型 规范 示例
文件名 驼峰/下划线混合 myFunc.c, myLog.h, app_sys.h
函数名 小写+下划线 func_cal_crc16(), dc_signal_set()
结构体 小写+_t 后缀 log_message_t, dc_signal_t
宏/常量 全大写+下划线 LOG_LEVEL_INFO, SHORT_STR_LEN
全局变量 g_ 前缀 g_log_path, g_tableCRC16
静态函数 LOCAL 宏修饰 LOCAL void helper_func()

3.2 头文件规范

#ifndef _MY_MODULE_H_          // 全大写+下划线
#define _MY_MODULE_H_

#include <stdint.h>             // 系统头文件在前

#ifdef __cplusplus
extern "C" {                    // 兼容 C++ 调用
#endif

// 宏定义
// 结构体
// 函数声明

#ifdef __cplusplus
}
#endif

#endif // _MY_MODULE_H_

3.3 注释规范

  • 函数头部:/** 功能简述 */// 功能描述
  • 复杂逻辑:行间注释 // 步骤1: xxx
  • 段落分隔:/******...******/ 分隔不同功能区域

3.4 编码规范

  • 缩进Tab4 空格宽度)
  • 所有函数入口参数必须校验NULL、越界检查
  • 函数行数控制在 80 行以内
  • 复杂逻辑拆分为独立静态函数
  • 错误路径必须打 LOG_E

四、模块优先级说明

标记 含义
P0 基础模块,无外部依赖,最先实现
P1 核心模块,依赖 P0 模块,第二批次
P2 业务模块,依赖 P0/P1第三批次
○ P3 预留模块,仅创建目录+stub后续扩展

五、分阶段开发计划

阶段 0基础设施搭建预计 1-2 天)

序号 任务 模块 产出 状态
0.1 搭建构建系统 release/linux.mk, release/makefile, release/build.sh
0.2 创建 myBase.h 基础定义 release/inc/myBase.h(宏、类型、大小端转换)
0.3 实现侵入式链表 liblist src/public/liblist/inc/list.h
0.4 实现日志系统 liblog src/public/liblog/inc/myLog.h, src/myLog.c
0.5 实现基础工具函数 libfunc src/public/libfunc/inc/myFunc.h, src/myFunc.c
0.6 创建全部预留模块的目录+stub 所有 P3 26 个模块的 inc/ + stub src/ 骨架
0.7 链表 + 日志单元测试 src/test/test_list.c, test_log.c
0.8 编译验证 + 代码审查 全量编译通过、测试通过

阶段 1数据基础设施预计 2-3 天)

序号 任务 模块 产出 状态
1.1 实现 MD5 摘要算法 libmd5 src/public/libmd5/
1.2 实现 xxHash 快速哈希 libmy_xxhash src/public/libmy_xxhash/
1.3 实现 cJSON 解析 libcJSON src/public/libcJSON/(从 RTU 裁剪)
1.4 设计信号数据模型 dc_signal_t 等结构体设计文档
1.5 实现数据中心 libdatacenter CRUD 接口,侵入式链表管理信号点
1.6 实现任务调度 libtask 任务注册、定时触发、事件驱动
1.7 编写单元测试 test_cjson.c, test_datacenter.c
1.8 编译验证 + 代码审查 全量编译通过、测试通过

阶段 2通讯与协议预计 3-4 天)

序号 任务 模块 产出 状态
2.1 实现通讯抽象层 libcomm 串口/TCP 统一接口(打开/发送/接收/关闭)
2.2 实现命令处理框架 libcmd 命令注册、分发、回调执行
2.3 实现 XML 解析 libxml src/public/libxml/tinyxml2 裁剪版)
2.4 实现 Modbus 协议栈 libmodbus RTU/TCP 从站,线圈/寄存器读写
2.5 实现 IEC 60870-5-104 lib60870 总召、遥测、遥信、遥控、对时
2.6 实现 IEC 点表解析 libiec src/system/libiec/iec_cfg_parse
2.7 实现 Modbus 主站管理 libmodbus_m 轮询、采集、数据分发
2.8 编写单元测试 test_modbus.c, test_60870.c
2.9 编译验证 + 代码审查 全量编译通过、测试通过

阶段 3系统集成预计 2-3 天)

序号 任务 模块 产出 状态
3.1 实现通讯通道解码 libcom_decode 多通道帧解析、分发到各协议栈
3.2 实现 Web 管理服务 libweb_server REST API + WebSocket 实时推送
3.3 实现主程序入口 RTU 模块初始化、主循环、信号处理
3.4 端到端集成测试 多模块联调、协议互通验证
3.5 编译验证 + 代码审查 x86 本地 + ARM 交叉编译全通过
3.6 编写 README 文档 项目说明、编译指南、模块架构图

阶段 4后续扩展预留模块实现

序号 任务 模块 优先级 状态
4.1 ICP67 专有协议 libicp67 P3 ○
4.2 IEC 61850 MMS 主站 libmms_m + libiec61850m P3 ○
4.3 IEC 61850 MMS 从站 libmms_s + libiec61850s P3 ○
4.4 嵌入式 HTTP 服务 libmongoose P3 ○
4.5 MQTT 客户端 libmy_mosquitto P3 ○
4.6 PLC 逻辑引擎 libplc P3 ○
4.7 内部自定义协议 libself_ptl P3 ○

五、AI 开发工作流

┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│ 1. 制定  │───▶│ 2. AI    │───▶│ 3. 编译  │───▶│ 4. 代码  │
│   计划   │    │   编码   │    │   验证   │    │   审查   │
└──────────┘    └──────────┘    └──────────┘    └──────────┘
      ▲                                               │
      └───────────────────────────────────────────────┘
                     5. 修复 + 迭代

工作流规则

  1. 计划先行每个模块编写前先输出设计计划数据结构、API、依赖关系经审查后再编码
  2. 增量迭代:每个函数编写后立即编译,消除编译错误再继续
  3. 测试驱动:先写单元测试框架,再实现功能代码
  4. 审查门禁:每个模块完成后必须进行代码审查(检查风格、注释、边界处理)
  5. 单文件提交:每个模块或逻辑单元完成后单独 git commitcommit message 使用中文描述

六、Git 推送规则(对齐 RTU

  • 分支: 所有开发在 master 分支
  • Commit 格式: [模块名] 功能描述
    • 例: [liblist] 实现 Linux 内核侵入式双向链表
    • 例: [libdatacenter] 添加信号点 CRUD 接口
  • 推送频率: 每个模块完成后推送一次
  • 远程: originhttp://admin:admin123@127.0.0.1:3000/admin/RTU_ALL_AI.git

七、关键技术点

7.1 Linux 内核侵入式链表list.h

  • 使用标准的 struct list_head 双向循环链表(/usr/include/linux/list.h 精简版)
  • 实现 list_add, list_add_tail, list_del, list_del_init, list_for_each_entry 等宏
  • 实现 list_empty, list_entry, list_first_entry 辅助宏
  • 所有模块的数据结构使用侵入式链表管理

7.2 编译系统

  • 支持 x86(本地调试)和 armRK3568 交叉编译)两种模式
  • 每个模块编译为 .a 静态库,顶层递归构建
  • build.sh x86build.sh arm 一键编译
  • 公共头文件统一复制到 release/inc/

7.3 日志系统

  • 支持控制台 + 文件双输出,异步日志队列(侵入式链表实现)
  • 级别INFO / ERRORLOG_I / LOG_E
  • 文件日志支持按大小轮转(LOG_FILE_MAX_SIZE / LOG_FILE_MAX_COUNT

7.4 基础公共库public/

模块 来源 核心功能
liblist Linux 内核 侵入式双向循环链表,纯头文件
libfunc 自研 CRC16/32、校验和、文件操作、环境变量、字节序
liblog 自研 异步日志(控制台+文件)、按大小轮转
libtask 自研 任务注册/调度、定时器、线程池
libdatacenter 自研 信号点 CRUD、侵入式链表索引、xxHash 查找
libcJSON cJSON 裁剪 JSON 解析/生成,纯 C无动态内存溢出风险
libxml tinyxml2 裁剪 XML 解析(用于 IEC 61850 SCL 文件)
libmd5 RFC 1321 MD5 摘要,用于文件校验和协议认证
libmy_xxhash xxHash 极速哈希,用于数据中心信号点快速查找
libcomm 自研 串口/TCP 统一抽象open/send/recv/close
libcmd 自研 命令注册表、分发执行、异步回调
libmy_mosquitto mosquitto 封装 MQTT 客户端,发布/订阅(预留 P3

7.5 协议层protocol/

模块 来源 核心功能
libmodbus libmodbus 裁剪 Modbus RTU/TCP 从站01/03/05/06/15/16 功能码
lib60870 lib60870 裁剪 IEC 101/103/104 从站,总召/对时/遥控
libicp67 自研 ICP67 专有协议(预留 P3
libmms_m libiec61850 封装 MMS 客户端(预留 P3
libmms_s libiec61850 封装 MMS 服务端(预留 P3
libmongoose mongoose 嵌入式 HTTP/WebSocket预留 P3

7.6 系统管理层system/

模块 来源 核心功能
RTU 自研 主入口:模块初始化、主循环、信号周期处理
libiec 自研 IEC 规约点表定义、解析、映射到数据中心
libcom_decode 自研 通讯通道帧解析、协议识别、分发
libmodbus_m 自研 Modbus 主站:轮询队列、采集调度
libiec61850m 自研 61850 主站管理(预留 P3
libiec61850s 自研 61850 从站管理(预留 P3
libplc 自研 PLC 逻辑引擎(预留 P3
libself_ptl 自研 内部自定义协议(预留 P3
libweb_server 自研 REST API + WebSocket嵌入式 Web 管理

八、风险与对策

风险 对策
AI 编码风格不一致 严格对照 RTU 已有代码(myFunc.c, myLog.c 等),代码审查时逐项检查
侵入式链表使用不当 先写完整单元测试,覆盖增删改查、空链表、边界条件
编译环境差异 优先保证 x86 本地编译通过ARM 交叉编译作为验证步骤
模块间耦合过重 每个模块独立编译为 .a依赖通过 release/inc/ 头文件接口明确
cJSON/tinyxml2 安全漏洞 裁剪版本,移除不受信输入路径;单元测试覆盖畸形输入
P3 预留模块过度设计 P3 模块仅创建目录 + 返回 0 的 stub 函数,不实现业务逻辑

九、审查清单

  • 模块列表是否覆盖了 RTU 的全部 26 个模块?
  • 模块优先级P0/P1/P2/P3排序是否合理
  • 代码规范是否严格对齐 RTU 风格?
  • 构建系统方案是否可行(递归 makefile + x86/arm 切换)?
  • 侵入式链表的实现粒度(宏列表)是否合适?
  • JSON/XML/MD5/xxHash 裁剪方案是否可行?
  • P3 预留模块的 stub 策略是否合适?
  • 是否需要调整模块范围(增/删/改优先级)?