上周三下午,实训楼302。一个学生把笔记本转过来。
“老师,跑通了。”
屏幕上是张班次产量报表。早班、中班、夜班,三行。合格数、废品数、停机分钟数,齐了。我问他,数据哪来的。他愣了两秒,说,我拿U盘从机床里导出来,粘进Excel,再跑脚本。
我笑了。不是嘲讽。是那种“你绕了一大圈又回到原点”的笑。

报表自动化,卡住的从来不是代码
这几年带课程设计,我把题目从“二级圆柱齿轮减速器”慢慢往产线那边挪。理由很土:学生装配图画得漂亮,一到车间就发懵。
生产报表自动化这个题目,最早是跟一家做阀体的小厂聊出来的。他们车间主任每天早上八点要一份前一天的三班产量表,手抄。抄错一次,月底盘点对不上,全组吵架。
我把这事搬进课堂,想着让学生写个脚本就完了。
想得太简单。
真正卡住他们的——
不是pandas,不是正则,是“这一列到底算什么”。
举个具体的。夜班跨零点,23:40到次日7:40。算前一天的生产,还是算第二天?学生A说算前一天,学生B说算第二天。两个人争了十分钟。我没插嘴。这十分钟比讲两节语法课值钱。
对吧,这才是设计问题。
报表的口径,是工艺和管理的产物,不是写脚本的人拍脑袋能定的。机械设计的学生如果不理解这句话,代码写得再干净,车间也不会用。他们习惯了齿轮的模数、轴承的寿命,这些都是有手册可查的;可“夜班归哪一天”,手册里没有。
一次失败:我们想从老机床里“抓”数据
第三周,我带着四个学生做方案。想法很兴奋:直接读机床的OPC UA,实时取数,全程无人。
现实给了我们一巴掌。车间那三台主力机床,两台是FANUC 0i Mate,零几年的设备,网口都没有。第三台倒是新的,厂家锁了参数访问。学生蹲在机床旁边看了两个小时,回来说,老师,抓不到。
那天的气氛挺低。
后来改方案。我提了三个字:能降级。
能自动的自动——新机床走网口。不能自动的,加个光电计数,工件过一道,光电继电器给PLC一个脉冲,PLC累加。再不行,扫码枪扫工单条码,人工触发。最差最差,留一个手机端录入页面,工人点两下。
方案一下子松了。学生也活了。
说实话,那天我挺感慨。工程里没有“全自动”这个圣杯,只有“在现有条件下尽可能少让人动手”。这句话我以前讲课时说过。但那天的机床替我说了,力道不一样。

字段对齐的两周,比写代码痛苦

第四到第五周,进度几乎停滞。原因很无聊:字段对不上。
车间给的Excel,表头是合并单元格。“班次”横跨三列,“数量”下面又分“合格”“返修”“报废”。pandas读进来,一堆Unnamed,全是NaN。学生第一次看到那个输出,脸色都变了。
我们没有硬扛。改了两件事。
一件是把源表当接口对待。写一份字段映射表,左列车间叫法,右列系统字段,中间标转换规则。谁改表谁签字。土办法。管用。
另一件是报表先做“最小可用”。原来学生想搞一个大屏,实时刷新,图表带渐变。我砍了。目标是:每天8:00,前一天三个班的产量、废品率、停机分钟,发一封邮件到车间主任邮箱。三列核心数据。别的以后再说。
砍需求这个动作,学生在课上没说什么。两周后有个学生跟我说,老师,当时挺不爽的,现在觉得您是对的。
我记在本子上了。
回头看,这门课真正教的是什么

学期末答辩,有个学生的总结让我印象很深。他说:
“原来我以为生产报表自动化是学Python。后来发现是学怎么问问题。”
问什么?问这张表给谁看。问停机那一栏,是统计设备还是统计人。问数据晚到十分钟,报表还发不发。问一条返修记录挂在哪个班次下,如果返修发生在第二天,但工件是前一天做的。
这些问题,机械设计教育里一直被忽略。我们太习惯把注意力放在零件的强度、机构的自由度上,忘了产线上还有一层看不见的对象——信息流。它跟物料流一样,需要被设计、被验证、被维护。你不管它,它就自己长出混乱。
生产报表自动化,恰好是撬开这一层的一个小口子。
我现在每学期都会在课程前两周加一次车间走访。不为别的,让学生亲手抄一遍纸质报工单。抄完他们才明白,为什么那些字段长成那样,为什么老师傅不肯改。
哦对,还有件事。
那个最早用U盘导数据的学生,后来把脚本改了。他加了个定时任务,每天早上自动去共享目录取文件,清洗,生成报表,发邮件。真正的无人值守。
他没用我教的任何高级技巧。就是老老实实把一件小事做完了。
我觉得挺好。