Files
LinuxMotion/AGENTS.md
T
chen 818041201b fix: 修复 Types.h 缺少头文件保护导致的重复定义错误
- Types.h: 添加 #pragma once 防止重复包含
- CMakeLists.txt: C++ 标准 17 → 20
- App/CMakeLists.txt: 移除重复的 C++11 覆盖,统一继承根 CMake 标准
- Axis.cpp: 添加 #include <string> 显式包含
2026-07-03 03:52:40 +00:00

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 文档