105 lines
2.7 KiB
Markdown
105 lines
2.7 KiB
Markdown
---
|
|
applyTo: "MainShell/Motion/**/*.cs,**/*MotionController*.cs,**/*SafeAxisMotion*.cs,**/*AxisSpeedManager*.cs"
|
|
---
|
|
|
|
# Motion Control Instructions
|
|
|
|
## Motion Architecture
|
|
Motion control uses layered design:
|
|
|
|
- SafeAxisMotion as business entry
|
|
- MotionController as single-axis controller
|
|
- IAxis / IAxisFunc as platform abstraction
|
|
|
|
Keep this layering intact.
|
|
|
|
## 中文说明
|
|
运动控制采用固定分层:
|
|
- `SafeAxisMotion`:业务层入口
|
|
- `MotionController`:单轴控制器
|
|
- `IAxis / IAxisFunc`:平台抽象接口
|
|
|
|
不要破坏现有分层关系。
|
|
|
|
## MotionController Rules
|
|
- Constructor should receive `IAxis`
|
|
- Convert to `IAxisFunc` when motion command capability is needed
|
|
- Use `SemaphoreSlim` to serialize motion commands per axis
|
|
- Motion methods should support async/await and CancellationToken
|
|
- Perform status validation before motion:
|
|
- servo/power status
|
|
- alarm status
|
|
- soft limit state
|
|
- Support timeout handling
|
|
- Raise motion lifecycle events such as MotionStarted / MotionFinished
|
|
|
|
## 中文说明
|
|
`MotionController` 设计规则:
|
|
- 构造函数接收 `IAxis`
|
|
- 需要运动控制能力时转换为 `IAxisFunc`
|
|
- 使用 `SemaphoreSlim` 保证单轴指令串行
|
|
- 运动方法支持 `async/await` 和 `CancellationToken`
|
|
- 运动前要检查伺服状态、报警状态、软限位状态
|
|
- 支持超时处理
|
|
- 可提供 `MotionStarted` / `MotionFinished` 事件
|
|
|
|
## Common Axis Properties
|
|
Prefer existing property patterns such as:
|
|
- AxisName
|
|
- CurrentPos
|
|
- IsBusy
|
|
- IsAlarm
|
|
- InPos
|
|
|
|
## 中文说明
|
|
常用属性保持与现有模式一致,例如:
|
|
- `AxisName`
|
|
- `CurrentPos`
|
|
- `IsBusy`
|
|
- `IsAlarm`
|
|
- `InPos`
|
|
|
|
## Motion Method Signatures
|
|
Keep compatibility with existing motion API patterns:
|
|
- MoveAbsAsync
|
|
- MoveRelAsync
|
|
- JogAsync
|
|
- StopAsync
|
|
- HomeAsync
|
|
|
|
## 中文说明
|
|
运动方法尽量保持现有签名风格兼容:
|
|
- `MoveAbsAsync`
|
|
- `MoveRelAsync`
|
|
- `JogAsync`
|
|
- `StopAsync`
|
|
- `HomeAsync`
|
|
|
|
## SafeAxisMotion Rules
|
|
- Prefer SafeAxisMotion for batch-safe movement
|
|
- Resolve axis name to IAxis and MotionController through existing repository mechanisms
|
|
- Preserve alarm integration and timeout behavior
|
|
|
|
## 中文说明
|
|
批量安全移动优先通过 `SafeAxisMotion` 实现:
|
|
- 通过现有机制把轴名解析为 `IAxis` 和 `MotionController`
|
|
- 保留报警集成和超时控制能力
|
|
|
|
## MotionResult Rules
|
|
- Use structured MotionResult
|
|
- Distinguish success, timeout, cancellation, and fault
|
|
- Use EnsureSuccess when caller expects exception-on-failure semantics
|
|
|
|
## 中文说明
|
|
`MotionResult` 应为结构化结果:
|
|
- 区分成功、超时、取消、异常
|
|
- 调用方需要"失败即抛异常"时,使用 `EnsureSuccess()`
|
|
|
|
## Speed Management
|
|
Use AxisSpeedManager for speed control where applicable.
|
|
Do not hardcode inconsistent speed logic if a unified speed manager already exists.
|
|
|
|
## 中文说明
|
|
速度管理优先通过 `AxisSpeedManager` 统一处理。
|
|
如果已有统一速度管理器,不要在新代码里硬编码另一套速度逻辑。
|