6.3 KiB
6.3 KiB
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/global-MEMORY.md |
| 问题处理记录 | mimo/问题处理文档.md |
| 模块分析文档 | mimo/工程/ |
| 设计方案文档 | mimo/plan/ |
| 中间修复文档 | mimo/中间文档/ |
| IEC 61850 服务端手册 | libiec61850/libiec61850手册/libiec61850_服务端开发手册.md |
| IEC 61850 客户端手册 | libiec61850/libiec61850手册/libiec61850_客户端开发手册.md |
| 构建配置 | release/linux.mk |
| 公共头文件目录 | release/inc/ |
| 模块分析文档生成技能 | mimo/skills/模块分析文档生成/SKILL.md |
⚠️ 注意事项
- 交叉编译依赖:
release/linux.mk引用了本地交叉工具链路径(GCCLIB_PATH),不同主机可能需要调整 - Web 资源打包: 构建流程中的
pack_web.sh会打包 web 资源到可执行文件中,不可跳过 - 代码风格严格: 修改代码时必须遵循上述规范(Tab/Allman/Yoda),否则可能导致审查问题
- 多线程安全: 大量使用多线程(9 个应用线程),修改时需注意竞态条件
- C 风格内存管理: 使用
malloc/free,需注意空指针检查和释放时机 - 第三方依赖: 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/— 技能文档 后续新增文档按此规则归类存放,不随意创建新的根级目录。