- Types.h: 添加 #pragma once 防止重复包含 - CMakeLists.txt: C++ 标准 17 → 20 - App/CMakeLists.txt: 移除重复的 C++11 覆盖,统一继承根 CMake 标准 - Axis.cpp: 添加 #include <string> 显式包含
2.4 KiB
2.4 KiB
Motion — AI Agent Instructions
本项目是一个 PLCopen 运动控制库 的 C++ 实现,模拟 IEC 61131-3 标准的轴控制功能。
快速开始
# 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 编译标志已启用
当前开发状态
- 类型系统 (Types.h)
- 轴引用与基础 Axis 类
- 轴状态机转换逻辑 (
cycle()方法) - 运动学 (轨迹规划)
- 功能块 (MC_Power, MC_MoveAbsolute, MC_Stop 等)
- 应用逻辑 (main.cpp 初始化/循环)
- 单元测试 (GTest/Catch2)
- API 文档