# Motion — AI Agent Instructions 本项目是一个 **PLCopen 运动控制库** 的 C++ 实现,模拟 IEC 61131-3 标准的轴控制功能。 ## 快速开始 ```bash # Debug 构建 cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug cmake --build build # 运行 ./build/Debug/UNIX/MotionApp ``` ## 项目结构 ``` Motion/ ├── CMakeLists.txt # 根构建文件 (C++17) ├── AGENTS.md # AI 代理指令 (本文件) ├── App/ # 可执行目标 MotionApp │ ├── CMakeLists.txt # (注意: 覆盖为 C++11) │ ├── Inc/ # 应用级头文件 │ └── Src/main.cpp # 入口点 └── MotionLib/ # 共享库 libMotionLib.so ├── CMakeLists.txt # (C++17) ├── Inc/ │ ├── Types.h # IEC 61131-3 类型映射 & 枚举 │ └── Axis.h # 轴类 & 运动命令 └── Src/Axis.cpp # 构造函数实现 ``` ## 架构要点 - **命名空间**: 所有运动控制代码在 `namespace plcopen { ... }` 中 - **两层架构**: `MotionLib` (共享库, 领域逻辑) → `MotionApp` (可执行文件, 入口) - **轴状态机**: `Disabled → Standstill → DiscreteMotion/ContinuousMotion/Homing → Stopping/ErrorStop` - **轴引用**: `AXIS_REF` 结构体持有轴编号、名称和指向 `Axis` 实例的指针 ## 编码约定 | 项目 | 规范 | |------|------| | 语言标准 | C++17 (根), 但 `App/` 使用 C++11 | | 命名空间 | 小写: `plcopen` | | 类 | PascalCase: `Axis`, `MotionCommand` | | 枚举类 | SCREAMING_SNAKE_CASE, 值带 `mc` 前缀 | | 类型别名 | UPPER_SNAKE_CASE: `BOOL`, `REAL`, `UINT` | | 成员变量 | `snake_case`, 引用用 `ref_` 前缀 | | 文档 | Doxygen 格式 (`@brief`, `@param`, `@return`) | | 平台输出 | `build//UNIX/` (Linux), `WIN32/` (Windows), `APPLE/` (macOS) | ## 关键约定 - 包含策略: `.cpp` 引入对应 `.h`, `.h` 引入所需公共头文件 - 无第三方库依赖, 无测试框架 - 使用 `enum class` 而非裸枚举 - GCC UTF-8 编译标志已启用 ## 当前开发状态 - [x] 类型系统 (Types.h) - [x] 轴引用与基础 Axis 类 - [ ] 轴状态机转换逻辑 (`cycle()` 方法) - [ ] 运动学 (轨迹规划) - [ ] 功能块 (MC_Power, MC_MoveAbsolute, MC_Stop 等) - [ ] 应用逻辑 (main.cpp 初始化/循环) - [ ] 单元测试 (GTest/Catch2) - [ ] API 文档