实训课上的突然死机
上周带智能制造方向的课程设计,分组做小型分拣产线的数据采集,三组里两组死在数据出不来。
每组要接振动给料的转速编码器、视觉相机的触发信号、皮带的重量传感器,三个信号来自三个不同的模块,通讯协议还不一样——编码器走ModbusRTU,相机走TCP,重量传感器走模拟量采集卡。学生攒代码的时候,每个模块单独跑都没问题,凑一起就乱了。要么重量出来了,对应工件的相机识别结果还在队列里飘着,要么编码器跳了三个数,相机才出一张图。

我过去看,学生还拍桌子说,我每个模块的波特率帧率都对着啊,怎么就不对。
这不怪他们。课本上只讲了每个协议怎么读数据,从来没说过,不同设备的时钟不一样,采样周期不一样,凑到一块怎么凑成同一时刻的完整数据。
就是乱。
就是对不上。
你说哪里错了?都没错。放在一起就是废的。
学生的惯性思维太常见了:默认所有设备共用同一个时钟,默认每个数据的产出是同步触发的,出了问题只会挨个查硬件,根本想不到要在逻辑层做对齐。
砍掉一半要求后的转机
原来的课程要求是让学生从零写同步逻辑,结果大半时间卡在这里,后面的分拣控制根本做不完。改了教学设计之后,只留两个核心要求:第一,给每一条来的数据打上设备本地时间戳,第二,设定一个可容忍的时间窗口,同一窗口内的数据归为一组。
别搞什么复杂的时钟同步算法,先把最朴素的逻辑跑通。

不过话说回来,一开始我也纠结,是不是要讲PTP,讲NTP,讲硬件同步触发?后来想清楚,本科生的课程设计,要的是建立工程意识,不是写工业级的同步库。
学生原来的误区是什么?总觉得所有数据应该同时来同时处理,默认所有设备的时钟是同一个。实际上呢?车间里跑了十几年的老设备,哪有那么理想?不同设备的采样周期差个几十上百毫秒太正常了。你得接受这个不完美,然后想办法把对不齐的数据捏到一起。
有一组学生原来把同步条件设成差不超过1毫秒,跑十分钟才能出三组对得上的数据,后来改成50毫秒,通过率直接到98%。就这个小改动,一下子通了。
这个改动比讲十页PPT有用多了。
教同步,其实是教取舍

很多时候我们教机械设计,都盯着结构,盯着硬件,现在带智能改造方向才发现,软件逻辑的取舍才是学生最缺的。
什么是多源数据同步?不是追求理论上的百分百对齐,是根据你的设备用途,选能满足需求的最低成本方案。你做高速运动控制,就得要硬件触发同步,容不得半分差。你做工件分拣的状态采集,几十毫秒的误差根本不影响,犯不着动硬件改线路加触发线,成本一下子上去了,还不一定好用。
上次那个改了时间窗口的组,最后答辩的时候说,原来以为同步是高大上的算法,现在才知道,就是先想清楚“我要这个数据干嘛”,然后再选怎么凑。这话比我备课写的讲稿都通透。
还有个小卡点我印象很深,有个学生一开始把所有设备的数据都存在同一个先进先出队列里,谁先来谁先出,结果后来跑起来,采样快的设备占满了队列,采样慢的设备数据永远排不上队,整个同步逻辑直接死锁。后来改成每个设备单独一个队列,主程序定时拉取三个队列的最新数据做对齐,一下子就顺了。这个问题我备课的时候根本没料到,也是这次课才发现的常见坑。
现在很多教材把这个事儿讲得太玄乎,一堆公式一堆术语,把学生吓得不行,其实落地到具体的机械设计项目里,核心就是两个事儿:把每个数据打上时间标记,然后按照你的需求对齐。哪里要精确,哪里可以放宽,想清楚就完了。
这次课改完,下一届我还打算再砍点要求,把协议配置的工作量再减点,让学生多留点时间在同步逻辑的试错上。毕竟,这种试错的分寸感,看书是看不来的,得自己卡过、错过来,才能记住。