- Types.h: 添加 #pragma once 防止重复包含 - CMakeLists.txt: C++ 标准 17 → 20 - App/CMakeLists.txt: 移除重复的 C++11 覆盖,统一继承根 CMake 标准 - Axis.cpp: 添加 #include <string> 显式包含
71 lines
2.4 KiB
Markdown
71 lines
2.4 KiB
Markdown
# 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/<CONFIG>/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 文档
|