1. 项目背景与核心需求
凌晨两点的无尘车间里,激光修复设备的红色定位光斑在Mini-LED面板上划出精确的轨迹。作为一套精密修复系统,上位机软件需要同时协调运动控制、视觉标定和激光调制三大模块,任何10微秒级的延迟都可能导致修复失败。这个项目让我深刻体会到,工业级C#开发与普通业务系统存在本质差异——这里没有重试机制,每个异常都必须被预判和处理。
核心需求可分解为五个技术层级:
- 多轴协同控制:Aerotech运动平台需实现±5μm的定位精度
- 设备状态熔断:急停触发后100ms内完成所有轴的安全锁定
- 动态视觉补偿:CCD标定需适应不同倍率镜头的快速切换
- 动作序列编排:支持移动、IO控制、等待等指令的任意组合
- 实时状态监控:所有设备状态更新频率不低于10Hz
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 运动控制架构设计
2.1 控制器通信中间层
直接调用厂商DLL是工业控制的大忌。我们构建的中间层就像给原始API套上防爆外壳:
csharp复制public class AerotechController : IDisposable
{
private IntPtr _handle;
private readonly object _syncLock = new();
public void Connect(string ip)
{
lock(_syncLock) {
int ret = AerotechAPI.AER_Connect(ip, ref _handle);
if(ret != 0) throw new ControllerException(
$"连接失败[Code:{ret}]",
GetErrorDetails(ret));
// 注册急停回调
AerotechAPI.SetEmergencyCallback(_handle, EmergencyHandler);
}
}
private void EmergencyHandler()
{
AerotechAPI.AER_AbortAll(_handle);
_isHomed = false;
EventBus.Publish(new EmergencyEvent());
}
}
关键设计点:
- 线程安全:所有硬件操作必须加锁
- 错误转化:将原始错误码转换为业务异常
- 事件广播:通过事件总线通知系统状态变更
2.2 运动参数配置
不同型号Mini-LED面板需要差异化的运动参数:
| 参数项 | 玻璃基板(6代) | 柔性基板 | 单位 |
|---|---|---|---|
| 最大加速度 | 0.5 |
