# Mimo RTU Project — AI Agent Instructions ## 📋 项目概览 **RTU (Remote Terminal Unit)** — 基于 IEC 61850 的智能通信网关,用于电力系统自动化。核心协议为 IEC 61850 MMS,同时支持 IEC 101/104 (ICP67)、Modbus、MQTT、WebSocket。 - **技术栈**: C/C++ (GCC/Linux ARM 交叉编译) - **编译**: `./release/build.sh` (x86) 或 `./release/build.sh arm` (ARM 交叉编译) - **运行**: `./test/RTU` ## 🏗 模块架构 ``` src/ ├── system/RTU/ # 主程序入口、CLI、自点表配置 ├── system/libdatacenter/ # 数据中心(信号注册/变更检测/SBO控制/事件队列) ├── system/libcom_channel/ # 通信通道管理(TCP服务端/客户端、串口) ├── system/libweb_server/ # HTTP/WebSocket 服务器 ├── system/libiec61850s/ # IEC 61850 MMS 服务端 ├── system/libiec61850m/ # IEC 61850 MMS 客户端 ├── system/libself_ptl/ # 自点表/自协议模块 ├── system/libiec/ # IEC 基础协议库 ├── system/libcom_decode/ # 通信解码库 ├── system/libmodbus_m/ # Modbus 主站 ├── system/libmodbus_s/ # Modbus 从站 ├── protocol/libmms_s/ # MMS 服务端协议层 ├── protocol/libmms_m/ # MMS 客户端协议层 ├── protocol/libicp67/ # ICP67 协议(IEC 101/104 帧编解码) ├── protocol/libmongoose/ # Mongoose 嵌入式 Web 服务器 ├── protocol/lib60870/ # IEC 60870 协议 ├── protocol/libmodbus/ # Modbus 协议 ├── public/libcomm/ # 统一通信抽象层(TCP/UART/UDP) ├── public/libtask/ # 任务/定时器调度库 ├── public/libcmd/ # CLI 命令解析 ├── public/libmy_mosquitto/ # MQTT 客户端 ├── public/libcJSON/ # JSON 解析 ├── public/libfunc/ # 工具函数库 └── public/libxml/ # XML 解析 (tinyxml2) ``` ## 🔨 构建命令 | 命令 | 说明 | |------|------| | `./release/build.sh` | 本地 x86 编译 | | `./release/build.sh arm` | ARM 交叉编译 | | `make -C release` | 在 release 目录执行 make | | `./test/RTU` | 运行编译产物 | ## 📐 代码规范 ### 风格 - **缩进**: Tab 字符(显示宽度 4) - **括号**: Allman 风格 — 大括号独占一行 - **关键字括号间无空格**: `if(`, `for(`, `while(`, `switch(` - **函数名后无空格**: `func(args)` - **指针声明**: `type *name`(`*` 前有空格) - **Yoda 条件**: `if(NULL == ptr)` 而非 `if(ptr == NULL)` - **函数间空行**: 两行 ### 命名 - 全局变量: `g_` 前缀 - 结构体: `stru_` 前缀 - 枚举: `enum_` 前缀 / `ENUM_` 值前缀 - 局部静态: `LOCAL` 宏(等价于 `static`) ### 错误处理 - 整数返回码: `0` 成功,`-1` 或非 0 表示失败 - 错误时记录 `LOG_E` 并返回错误码 ### 日志 - `LOG_I()` / `LOG_E()` 宏(定义见 `release/inc/myLog.h`) - `MY_LOG_*` 宏(定义见 `release/inc/myBase.h`) ## 📚 参考文档 | 文档 | 位置 | |------|------| | 项目记忆(架构/规则/决策) | [mimo/MEMORY.md](mimo/MEMORY.md) | | 全局记忆(用户偏好) | [mimo/global-MEMORY.md](mimo/global-MEMORY.md) | | 问题处理记录 | [mimo/问题处理文档.md](mimo/问题处理文档.md) | | 模块分析文档 | [mimo/工程/](mimo/工程/) | | 设计方案文档 | [mimo/plan/](mimo/plan/) | | 中间修复文档 | [mimo/中间文档/](mimo/中间文档/) | | IEC 61850 服务端手册 | [libiec61850/libiec61850手册/libiec61850_服务端开发手册.md](libiec61850/libiec61850手册/libiec61850_服务端开发手册.md) | | IEC 61850 客户端手册 | [libiec61850/libiec61850手册/libiec61850_客户端开发手册.md](libiec61850/libiec61850手册/libiec61850_客户端开发手册.md) | | 构建配置 | [release/linux.mk](release/linux.mk) | | 公共头文件目录 | [release/inc/](release/inc/) | | 模块分析文档生成技能 | [mimo/skills/模块分析文档生成/SKILL.md](mimo/skills/模块分析文档生成/SKILL.md) | ## ⚠️ 注意事项 1. **交叉编译依赖**: `release/linux.mk` 引用了本地交叉工具链路径(`GCCLIB_PATH`),不同主机可能需要调整 2. **Web 资源打包**: 构建流程中的 `pack_web.sh` 会打包 web 资源到可执行文件中,不可跳过 3. **代码风格严格**: 修改代码时必须遵循上述规范(Tab/Allman/Yoda),否则可能导致审查问题 4. **多线程安全**: 大量使用多线程(9 个应用线程),修改时需注意竞态条件 5. **C 风格内存管理**: 使用 `malloc`/`free`,需注意空指针检查和释放时机 6. **第三方依赖**: mongoose、cJSON、mosquitto、tinyxml2、libiec61850 是关键依赖 ## 🔄 工作流程规则 以下规则是每次交互必须遵守的工作流程,优先级高于其他指令。 ### 1. 语言 全部对话、思考过程(`thinking`)、输出内容均使用中文显示。代码本身(变量名、函数名、关键字)保持英文。 ### 2. 问题处理 → 记录文档 每次解决 Bug 或问题后,将**问题现象、原因分析、解决方案**追加到 `mimo/问题处理文档.md`,保留原有内容不覆盖。 ### 3. Plan 计划 → 形成文档 制定并执行 Plan 解决问题后,将 Plan 内容整理为文档存入 `mimo/plan/` 或 `mimo/中间文档/` 目录。文件命名需体现内容主题。 ### 4. 模块分析 → 形成文档 每次深入读取/分析某个模块后,将分析结果整理为文档存入 `mimo/工程/` 目录。文档应包含模块职责、核心接口、关键逻辑、数据流等。 ### 5. C/C++ 代码调整 → 编译确认 修改 C/C++ 代码后,必须执行 `./release/build.sh`(x86)进行编译验证,确认无编译错误。如果编译失败,应立即修复。 ### 6. 前端代码调整 → 浏览器验证 修改 Web 前端代码(`web_root/` 目录下的 HTML/CSS/JS)后,应使用浏览器打开查看效果,确认界面显示正确。 ### 7. 文档目录继承 严格遵守现有的文档目录结构: - `mimo/问题处理文档.md` — 问题处理记录 - `mimo/工程/` — 模块分析文档 - `mimo/plan/` — 设计方案文档 - `mimo/中间文档/` — 中间修复文档 - `mimo/skills/` — 技能文档 后续新增文档按此规则归类存放,不随意创建新的根级目录。