RTU/AGENTS.md

6.3 KiB
Raw Blame History

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

⚠️ 注意事项

  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.shx86进行编译验证确认无编译错误。如果编译失败应立即修复。

6. 前端代码调整 → 浏览器验证

修改 Web 前端代码(web_root/ 目录下的 HTML/CSS/JS应使用浏览器打开查看效果确认界面显示正确。

7. 文档目录继承

严格遵守现有的文档目录结构:

  • mimo/问题处理文档.md — 问题处理记录
  • mimo/工程/ — 模块分析文档
  • mimo/plan/ — 设计方案文档
  • mimo/中间文档/ — 中间修复文档
  • mimo/skills/ — 技能文档 后续新增文档按此规则归类存放,不随意创建新的根级目录。