添加 MX-PD-盘古 项目文件

将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
Shi.Ji
2026-05-18 11:43:09 +08:00
parent 03632a379d
commit e31d3560bb
739 changed files with 99783 additions and 0 deletions

View File

@@ -0,0 +1,104 @@
---
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.
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
<EFBFBD>˶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD>ù̶<EFBFBD><EFBFBD>ֲ㣺
- `SafeAxisMotion`<EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- `MotionController`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- `IAxis / IAxisFunc`<EFBFBD><EFBFBD>ƽ̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
<EFBFBD><EFBFBD>Ҫ<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>зֲ<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>
## 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
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
`MotionController` <20><><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
- <20><><EFBFBD><EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `IAxis`
- <20><>Ҫ<EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱת<CAB1><D7AA>Ϊ `IAxisFunc`
- ʹ<><CAB9> `SemaphoreSlim` <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EEB4AE>
- <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> `async/await` <20><> `CancellationToken`
- <20>˶<EFBFBD>ǰҪ<C7B0><D2AA><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ״̬
- ֧<>ֳ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
- <20><><EFBFBD>`MotionStarted` / `MotionFinished` <20>¼<EFBFBD>
## Common Axis Properties
Prefer existing property patterns such as:
- AxisName
- CurrentPos
- IsBusy
- IsAlarm
- InPos
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽһ<EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- `AxisName`
- `CurrentPos`
- `IsBusy`
- `IsAlarm`
- `InPos`
## Motion Method Signatures
Keep compatibility with existing motion API patterns:
- MoveAbsAsync
- MoveRelAsync
- JogAsync
- StopAsync
- HomeAsync
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
<EFBFBD>˶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
- `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
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD> `SafeAxisMotion` ʵ<>֣<EFBFBD>
- ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB>ư<EFBFBD><C6B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ `IAxis` <20><> `MotionController`
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺͳ<C9BA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
## MotionResult Rules
- Use structured MotionResult
- Distinguish success, timeout, cancellation, and fault
- Use EnsureSuccess when caller expects exception-on-failure semantics
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
`MotionResult` ӦΪ<D3A6><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <20><><EFBFBD>ֳɹ<D6B3><C9B9><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>
- <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>Ҫ"ʧ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD>쳣"ʱ<><CAB1>ʹ<EFBFBD><CAB9> `EnsureSuccess()`
## Speed Management
Use AxisSpeedManager for speed control where applicable.
Do not hardcode inconsistent speed logic if a unified speed manager already exists.
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
<EFBFBD>ٶȹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD> `AxisSpeedManager` ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһ<EFBFBD>ٶȹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD>