Newport MM2000 是一台运动控制器。它跟前面那些测量仪器不是一类东西------那些是"读"设备,它是"动"设备。这个区别让程序的写法有挺大不同。
动设备和读设备,差别在哪
测量类设备的典型节奏是:设好参数、读一个值、再读一个值。它的状态是被动的------你不叫它,它不会自己动。
运动控制器不一样。你发一条"走"的命令,它就真的开始动了,而且动是需要时间的------动到位没有、动到哪了,这些是接下来必须回答的问题。
控运动的核心不是"发命令",而是"知道它现在到底在哪"。

电机启动:命令发出去之后,事情才开始

电机停止

停止动作

数组转图形:把位置序列画出来
程序里必须处理的三件事
- 等它到位------命令发出去之后不能立刻做下一步,要等运动真正完成。这个"等"是有明确判据的,不是拍脑袋延时;
- 知道它当前在哪------位置是要读回来的,不是算出来的。开环推算在短距离时看着没问题,跑上几小时就会偏;
- 异常要能停------限位、超时、通信中断,每一种都要有对应的处理。运动控制出问题不是数据不对,是可能撞坏东西。
为什么"等到位"这件事值得单独说
很多初学者写的运动控制程序是这样的:发移动命令、延时两秒、然后假设它到位了。
这个写法在短时间内能跑,但它把"到位"这件事交给了一个猜测的时长。负载变了、速度改了、机械有磨损了------两秒就不够了。而程序并不会因此报错,它只是带着错误的假设继续往下走。
正确的做法是问设备"到了吗",一直问到它说到了为止,再加一个超时上限兜底。这样正常情况拿到的是精确的时刻,异常情况也能被发现。
运动控制接进程序的真正价值
不是为了省去按按钮的动作,而是让"位置"和"测量"能够被绑在一起。
想象一个扫描测量的场景:在一个样品上取 100 个点,每到一个位置测一次。手工做的话,移动和测量是两个分开的动作,而且哪一个位置对应哪一次测量,要靠人记。
程序做的话,位置和测量是同一个循环里的两步,数据天然带着位置标签。扫完之后得到的是一张位置-响应图,而不是一堆不知道对应哪儿的读数。
运动控制跟测量设备放在一起,解决的是"在哪儿测"这个问题。位置和读数一旦绑定,数据才真正有意义。
如果你手上也有类似的设备或类似的活儿,不管是老仪器想连电脑、还是新系统要搭测试流程,都可以把型号和场景发给我们,我们来看看能不能用同样的思路解决。