Files
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

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