更新运动控制相关的Readme、Guidence文件等。
This commit is contained in:
@@ -60,7 +60,7 @@ protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
|
|||||||
| `DetectorSwingAngle` | double | 探测器摆动角度(度),范围 -45~45 |
|
| `DetectorSwingAngle` | double | 探测器摆动角度(度),范围 -45~45 |
|
||||||
| `StageRotationAngle` | double | 载物台旋转角度(度),范围 -360~360 |
|
| `StageRotationAngle` | double | 载物台旋转角度(度),范围 -360~360 |
|
||||||
| `FixtureRotationAngle` | double | 夹具旋转角度(度),范围 -90~90 |
|
| `FixtureRotationAngle` | double | 夹具旋转角度(度),范围 -90~90 |
|
||||||
| `IsJoystickEnabled` | bool | 摇杆使能开关(默认 false) |
|
| `IsJoystickEnabled` | bool | 摇杆使能开关(默认 true) |
|
||||||
| `SwapMouseButtons` | bool | 摇杆左右键功能切换(默认 false) |
|
| `SwapMouseButtons` | bool | 摇杆左右键功能切换(默认 false) |
|
||||||
| `SZDZLock` | bool | 射线源/探测器Z轴锁定移动(默认 false) |
|
| `SZDZLock` | bool | 射线源/探测器Z轴锁定移动(默认 false) |
|
||||||
| `HasSavedPositions` | bool | 是否有已保存的位置快照 |
|
| `HasSavedPositions` | bool | 是否有已保存的位置快照 |
|
||||||
@@ -71,26 +71,27 @@ protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
|
|||||||
- 直接编辑 RadNumericUpDown 控件
|
- 直接编辑 RadNumericUpDown 控件
|
||||||
- Enter 键确认并移动轴
|
- Enter 键确认并移动轴
|
||||||
- Escape 键取消修改,恢复原值
|
- Escape 键取消修改,恢复原值
|
||||||
|
- 上下箭头键步进移动(±0.1)
|
||||||
|
|
||||||
2. **单轴摇杆(SourceZ/DetectorZ)**
|
2. **单轴摇杆(SourceZ/DetectorZ)**
|
||||||
- 左键拖拽:正向 Jog
|
- 左键拖拽:Y轴方向控制 SourceZ Jog(正/反向由拖拽方向决定)
|
||||||
- 右键拖拽:反向 Jog
|
- 右键拖拽:Y轴方向控制 DetectorZ Jog(正/反向由拖拽方向决定)
|
||||||
|
- 当 SZDZLock=true 时,左键同时控制 SourceZ + DetectorZ,右键同理
|
||||||
- 松开鼠标:停止 Jog
|
- 松开鼠标:停止 Jog
|
||||||
|
|
||||||
3. **双轴摇杆(StageX/Y + Rotation)**
|
3. **双轴摇杆(StageX/Y + Rotation/Swing)**
|
||||||
- 默认模式(SwapMouseButtons=false):
|
- 默认模式(SwapMouseButtons=false):
|
||||||
- 左键拖拽:控制 StageX/Y(X轴=左右,Y轴=上下)
|
- 左键拖拽:X轴→StageX Jog,Y轴→StageY Jog
|
||||||
- 右键拖拽:控制 StageRotation(X轴=旋转)
|
- 右键拖拽:X轴→DetectorSwing Jog,Y轴→StageRotation/FixtureRotation Jog
|
||||||
- 切换模式(SwapMouseButtons=true):
|
- 切换模式(SwapMouseButtons=true):左右键功能互换
|
||||||
- 左键拖拽:控制 StageRotation(X轴=旋转)
|
- 松开鼠标:停止所有关联轴 Jog
|
||||||
- 右键拖拽:控制 DetectorSwing(X轴=摆动,Y轴=摆动)
|
|
||||||
|
|
||||||
4. **快捷按钮**
|
4. **快捷按钮**
|
||||||
- **使能开关**:启用/禁用摇杆控制(图标切换)
|
- **使能开关**:启用/禁用虚拟摇杆控制(同步写入 PLC 信号)
|
||||||
- **摇杆模式**:切换左右键功能(图标切换)
|
- **摇杆模式**:切换左右键功能映射
|
||||||
- **SZDZ锁定**:锁定 SourceZ/DetectorZ 同步移动(图标切换)
|
- **SZDZ锁定**:锁定 SourceZ/DetectorZ 同步移动(同步写入 PLC 联动使能信号)
|
||||||
- **保存位置**:保存当前所有轴位置到快照
|
- **保存位置**:保存当前所有轴位置到快照(需 PLC 已连接)
|
||||||
- **恢复位置**:恢复到上次保存的位置快照
|
- **恢复位置**:恢复到上次保存的位置快照并发送移动命令
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -149,7 +150,7 @@ public class YourService
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 3. 下发运动控制命令 | Sending Motion Commands
|
## 4. 下发运动控制命令 | Sending Motion Commands
|
||||||
|
|
||||||
通过 DI 注入 `IMotionControlService`:
|
通过 DI 注入 `IMotionControlService`:
|
||||||
|
|
||||||
@@ -161,10 +162,12 @@ using XP.Hardware.MotionControl.Services;
|
|||||||
public class YourController
|
public class YourController
|
||||||
{
|
{
|
||||||
private readonly IMotionControlService _mc;
|
private readonly IMotionControlService _mc;
|
||||||
|
private readonly IMotionSystem _motionSystem;
|
||||||
|
|
||||||
public YourController(IMotionControlService motionControlService)
|
public YourController(IMotionControlService motionControlService, IMotionSystem motionSystem)
|
||||||
{
|
{
|
||||||
_mc = motionControlService;
|
_mc = motionControlService;
|
||||||
|
_motionSystem = motionSystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 单轴移动 | Single axis move
|
// 单轴移动 | Single axis move
|
||||||
@@ -222,6 +225,15 @@ public class YourController
|
|||||||
_mc.CloseDoor();
|
_mc.CloseDoor();
|
||||||
_mc.StopDoor();
|
_mc.StopDoor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 轴复位 | Axis reset
|
||||||
|
public void AxisReset()
|
||||||
|
{
|
||||||
|
// 通过 IMotionSystem 获取轴复位实例 | Get axis reset instance via IMotionSystem
|
||||||
|
IAxisReset axisReset = _motionSystem.AxisReset;
|
||||||
|
MotionResult result = axisReset.Reset(); // 发送复位命令
|
||||||
|
bool done = axisReset.IsResetDone; // 读取复位完成状态
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -327,6 +339,21 @@ public class YourMonitor
|
|||||||
{
|
{
|
||||||
Console.WriteLine($"运动错误: 轴 {data.AxisId} - {data.ErrorMessage}");
|
Console.WriteLine($"运动错误: 轴 {data.AxisId} - {data.ErrorMessage}");
|
||||||
}, ThreadOption.UIThread);
|
}, ThreadOption.UIThread);
|
||||||
|
|
||||||
|
// 实体摇杆激活状态变化 | Physical joystick active status changed
|
||||||
|
eventAggregator.GetEvent<JoystickActiveEvent>()
|
||||||
|
.Subscribe(isActive =>
|
||||||
|
{
|
||||||
|
Console.WriteLine($"实体摇杆: {(isActive ? "激活" : "未激活")}");
|
||||||
|
}, ThreadOption.UIThread);
|
||||||
|
|
||||||
|
// 几何反算结果填入请求(DebugWindow → MotionControlViewModel)
|
||||||
|
// Geometry apply request (DebugWindow → MotionControlViewModel)
|
||||||
|
eventAggregator.GetEvent<GeometryApplyRequestEvent>()
|
||||||
|
.Subscribe(data =>
|
||||||
|
{
|
||||||
|
Console.WriteLine($"几何反算请求: SourceZ={data.SourceZTarget}, DetectorZ={data.DetectorZTarget}");
|
||||||
|
}, ThreadOption.UIThread);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -387,6 +414,7 @@ public class YourMonitor
|
|||||||
| `MC_Door_Close` | byte | 95 | 安全门关门 |
|
| `MC_Door_Close` | byte | 95 | 安全门关门 |
|
||||||
| `MC_Door_Stop` | byte | 96 | 安全门停止 |
|
| `MC_Door_Stop` | byte | 96 | 安全门停止 |
|
||||||
| `MC_SourceDetZ_Linkage_Enable` | bool | 101 | 射线源与探测器Z轴联动使能 |
|
| `MC_SourceDetZ_Linkage_Enable` | bool | 101 | 射线源与探测器Z轴联动使能 |
|
||||||
|
| `MC_Axis_Reset` | byte | 102 | 轴复位命令 |
|
||||||
| `MC_VirtualJoystick_Enable` | bool | 111 | 虚拟摇杆使能 |
|
| `MC_VirtualJoystick_Enable` | bool | 111 | 虚拟摇杆使能 |
|
||||||
|
|
||||||
### 7.2 读取信号(ReadCommon,DB31)
|
### 7.2 读取信号(ReadCommon,DB31)
|
||||||
@@ -403,6 +431,7 @@ public class YourMonitor
|
|||||||
| `MC_Door_Status` | byte | 128 | 安全门状态(0:未知,1:开门中,2:已开,3:关门中,4:已关,5:已锁定,6:故障) |
|
| `MC_Door_Status` | byte | 128 | 安全门状态(0:未知,1:开门中,2:已开,3:关门中,4:已关,5:已锁定,6:故障) |
|
||||||
| `MC_Door_Interlock` | byte | 130 | 安全门联锁信号(0:无联锁,10:联锁有效) |
|
| `MC_Door_Interlock` | byte | 130 | 安全门联锁信号(0:无联锁,10:联锁有效) |
|
||||||
| `MC_Joystick_Active` | bool | 110 | 实体摇杆输入激活 |
|
| `MC_Joystick_Active` | bool | 110 | 实体摇杆输入激活 |
|
||||||
|
| `MC_Axis_ResetDone` | bool | 112 | 轴复位完成 |
|
||||||
|
|
||||||
### 7.3 信号类型说明 | Signal Type Notes
|
### 7.3 信号类型说明 | Signal Type Notes
|
||||||
|
|
||||||
@@ -424,6 +453,8 @@ public class YourMonitor
|
|||||||
| 多轴原子性检查 | MoveAllToTarget 任意轴越界则全部拒绝 |
|
| 多轴原子性检查 | MoveAllToTarget 任意轴越界则全部拒绝 |
|
||||||
| 轮询异常不中断 | 轮询中 PLC 异常被捕获,不影响下一轮 |
|
| 轮询异常不中断 | 轮询中 PLC 异常被捕获,不影响下一轮 |
|
||||||
| UI 异常保护 | ViewModel 命令通过 SafeRun 包裹,PLC 异常弹窗而非崩溃 |
|
| UI 异常保护 | ViewModel 命令通过 SafeRun 包裹,PLC 异常弹窗而非崩溃 |
|
||||||
|
| PLC 断连安全 | PLC 断开时自动停止所有 Jog 并禁用摇杆,重连后需用户手动恢复 |
|
||||||
|
| 使能/联动回滚 | 使能切换或联动设置写入 PLC 失败时自动回滚 UI 状态 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -443,4 +474,4 @@ public class YourMonitor
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**最后更新 | Last Updated**: 2026-05-08
|
**最后更新 | Last Updated**: 2026-05-11
|
||||||
|
|||||||
@@ -81,6 +81,8 @@ XP.Hardware.MotionControl/
|
|||||||
│ ├── ILinearAxis.cs # 直线轴策略接口
|
│ ├── ILinearAxis.cs # 直线轴策略接口
|
||||||
│ ├── IRotaryAxis.cs # 旋转轴策略接口
|
│ ├── IRotaryAxis.cs # 旋转轴策略接口
|
||||||
│ ├── ISafetyDoor.cs # 安全门策略接口
|
│ ├── ISafetyDoor.cs # 安全门策略接口
|
||||||
|
│ ├── IJoystick.cs # 实体摇杆接口
|
||||||
|
│ ├── IAxisReset.cs # 轴复位接口
|
||||||
│ ├── IMotionSystem.cs # 顶层系统管理接口
|
│ ├── IMotionSystem.cs # 顶层系统管理接口
|
||||||
│ ├── LinearAxisBase.cs # 直线轴抽象基类(含边界检查)
|
│ ├── LinearAxisBase.cs # 直线轴抽象基类(含边界检查)
|
||||||
│ ├── RotaryAxisBase.cs # 旋转轴抽象基类
|
│ ├── RotaryAxisBase.cs # 旋转轴抽象基类
|
||||||
@@ -96,19 +98,24 @@ XP.Hardware.MotionControl/
|
|||||||
│ ├── DoorStatusChangedEvent.cs
|
│ ├── DoorStatusChangedEvent.cs
|
||||||
│ ├── DoorInterlockChangedEvent.cs
|
│ ├── DoorInterlockChangedEvent.cs
|
||||||
│ ├── GeometryUpdatedEvent.cs
|
│ ├── GeometryUpdatedEvent.cs
|
||||||
|
│ ├── GeometryApplyRequestEvent.cs
|
||||||
|
│ ├── JoystickActiveEvent.cs
|
||||||
│ └── MotionErrorEvent.cs
|
│ └── MotionErrorEvent.cs
|
||||||
├── Implementations/ # PLC 实现层
|
├── Implementations/ # PLC 实现层
|
||||||
│ ├── PlcLinearAxis.cs # 基于 PLC 的直线轴实现
|
│ ├── PlcLinearAxis.cs # 基于 PLC 的直线轴实现
|
||||||
│ ├── PlcRotaryAxis.cs # 基于 PLC 的旋转轴实现
|
│ ├── PlcRotaryAxis.cs # 基于 PLC 的旋转轴实现
|
||||||
│ ├── PlcSafetyDoor.cs # 基于 PLC 的安全门实现
|
│ ├── PlcSafetyDoor.cs # 基于 PLC 的安全门实现
|
||||||
|
│ ├── PlcJoystick.cs # 基于 PLC 的实体摇杆实现
|
||||||
|
│ ├── PlcAxisReset.cs # 基于 PLC 的轴复位实现
|
||||||
│ └── PlcMotionSystem.cs # 运动系统管理器
|
│ └── PlcMotionSystem.cs # 运动系统管理器
|
||||||
├── Services/ # 业务服务层
|
├── Services/ # 业务服务层
|
||||||
│ ├── IMotionControlService.cs # 业务服务接口
|
│ ├── IMotionControlService.cs # 业务服务接口
|
||||||
│ ├── MotionControlService.cs # 服务实现(轮询、事件、日志)
|
│ ├── MotionControlService.cs # 服务实现(轮询、事件、日志)
|
||||||
│ └── GeometryCalculator.cs # 几何计算器
|
│ └── GeometryCalculator.cs # 几何计算器
|
||||||
├── ViewModels/ # 视图模型
|
├── ViewModels/ # 视图模型
|
||||||
│ ├── AxisControlViewModel.cs # AxisControlView ViewModel
|
│ ├── AxisControlViewModel.cs # AxisControlView ViewModel
|
||||||
│ └── MotionControlViewModel.cs # MotionControlView ViewModel
|
│ ├── MotionControlViewModel.cs # MotionControlView ViewModel
|
||||||
|
│ └── MotionDebugWindowViewModel.cs # MotionDebugWindow ViewModel
|
||||||
├── Config/ # 配置层
|
├── Config/ # 配置层
|
||||||
│ ├── MotionControlConfig.cs # 配置实体
|
│ ├── MotionControlConfig.cs # 配置实体
|
||||||
│ ├── ConfigLoader.cs # 配置加载器
|
│ ├── ConfigLoader.cs # 配置加载器
|
||||||
@@ -136,7 +143,7 @@ XP.Hardware.MotionControl/
|
|||||||
| 接口 | 用途 | 注册方式 |
|
| 接口 | 用途 | 注册方式 |
|
||||||
|------|------|----------|
|
|------|------|----------|
|
||||||
| `IMotionControlService` | 业务控制(移动、停止、回零、Jog、开关门、几何计算) | 单例 |
|
| `IMotionControlService` | 业务控制(移动、停止、回零、Jog、开关门、几何计算) | 单例 |
|
||||||
| `IMotionSystem` | 底层状态读取(轴位置、状态、门状态) | 单例 |
|
| `IMotionSystem` | 底层状态读取(轴位置、状态、门状态、摇杆状态、轴复位) | 单例 |
|
||||||
| `MotionControlConfig` | 配置参数(轴范围、几何原点、轮询周期) | 实例 |
|
| `MotionControlConfig` | 配置参数(轴范围、几何原点、轮询周期) | 实例 |
|
||||||
| `GeometryCalculator` | 几何正算/反算工具 | 单例 |
|
| `GeometryCalculator` | 几何正算/反算工具 | 单例 |
|
||||||
|
|
||||||
@@ -148,6 +155,8 @@ XP.Hardware.MotionControl/
|
|||||||
| `DoorStatusChangedEvent` | `DoorStatus` | 门状态变化 |
|
| `DoorStatusChangedEvent` | `DoorStatus` | 门状态变化 |
|
||||||
| `DoorInterlockChangedEvent` | `bool` | 门联锁状态变化(true=已联锁, false=未联锁) |
|
| `DoorInterlockChangedEvent` | `bool` | 门联锁状态变化(true=已联锁, false=未联锁) |
|
||||||
| `GeometryUpdatedEvent` | `GeometryData(FOD, FDD, Magnification)` | 几何参数更新(每轮询周期) |
|
| `GeometryUpdatedEvent` | `GeometryData(FOD, FDD, Magnification)` | 几何参数更新(每轮询周期) |
|
||||||
|
| `GeometryApplyRequestEvent` | `GeometryApplyRequestData(SourceZTarget, DetectorZTarget, ...)` | 几何反算结果填入请求(DebugWindow → MotionControlViewModel) |
|
||||||
|
| `JoystickActiveEvent` | `bool` | 实体摇杆激活状态变化(true=激活, false=未激活) |
|
||||||
| `MotionErrorEvent` | `MotionErrorData(AxisId, ErrorMessage)` | 轴进入 Error/Alarm 状态 |
|
| `MotionErrorEvent` | `MotionErrorData(AxisId, ErrorMessage)` | 轴进入 Error/Alarm 状态 |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -192,4 +201,4 @@ PLC 信号名称硬编码在 `MotionSignalNames.cs` 中,信号定义在 `PlcAd
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**最后更新 | Last Updated**: 2026-05-08
|
**最后更新 | Last Updated**: 2026-05-11
|
||||||
|
|||||||
Reference in New Issue
Block a user