RTU/AGENTS.md

7.9 KiB
Raw Permalink 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 交叉编译 → release/arm/exe/RTU
make -C release 在 release 目录执行 make
./test/RTU 运行 x86 编译产物
VS Code Task build-arm Ctrl+Shift+B 中选择 ARM 交叉编译
VS Code Task deploy-to-rk 编译+部署到 RK3568 /mnt/RTU/
VS Code F5 "ARM 编译+部署+调试" 一键编译→部署→gdbserver→远程调试

📐 代码规范

风格

  • 缩进: 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
RK3568 MCP 服务 ../rk-mcp/src/index.ts
VS Code 调试配置 .vscode/launch.json / .vscode/tasks.json
Gitea Git 服务记忆 /memories/repo/gitea-config.md

⚙️ 开发环境

  • 环境类型: WSL 2 (Ubuntu 24.04),与 Windows 共享固定 IP 198.120.10.240
  • Gitea Git 服务: http://127.0.0.1:3000 | 局域网 http://192.168.1.54:3000 | 管理员 admin/admin123
  • 交叉编译器: /opt/atk-dlrk356x-toolchain/bin/aarch64-buildroot-linux-gnu-* (GCC 10.3.0, Buildroot 2018.02)
  • RK3568 目标机: root@198.120.0.100 (密码 root),目标路径 /mnt/RTU/

RK3568 远程调试 (MCP 服务)

项目
MCP 服务路径 /home/ypc/RTU/rk-mcp/dist/index.js (Node.js)
MCP 配置 .vscode/mcp.jsonrk-mcp 服务
可用工具 rk_check rk_deploy rk_gdbserver_start rk_gdbserver_stop rk_shell
SSH 包装 ~/.ssh/rk_ssh ~/.ssh/rk_scp (sshpass 封装)

调试流程: ./release/build.sh arm → F5 选 "ARM 编译+部署+调试 (RK3568)" → 自动 scp → gdbserver :2345 → GDB 连接

launch.json 提供 4 个调试配置: 本地 x86编译/不编译、ARM 远程(编译+部署/纯调试)

⚠️ 注意事项

  1. 交叉编译依赖: release/linux.mk 引用 /opt/atk-dlrk356x-toolchain/bin,需保证工具链存在
  2. Web 资源打包: 构建流程中的 pack_web.sh 会打包 web 资源到可执行文件中,不可跳过
  3. 代码风格严格: 修改代码时必须遵循上述规范Tab/Allman/Yoda否则可能导致审查问题
  4. 多线程安全: 大量使用多线程9 个应用线程),修改时需注意竞态条件
  5. C 风格内存管理: 使用 malloc/free,需注意空指针检查和释放时机
  6. 第三方依赖: mongoose、cJSON、mosquitto、tinyxml2、libiec61850 是关键依赖
  7. RK3568 使用 dropbear SSH,不支持 OpenSSH 密钥认证;使用 sshpass -p 'root' ssh 连接

🔄 工作流程规则

以下规则是每次交互必须遵守的工作流程,优先级高于其他指令。

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/ — 技能文档 后续新增文档按此规则归类存放,不随意创建新的根级目录。