没人写在教材里的暗坑
教材里把生产计划排程、生产调度分成两个独立章节讲,知识点分得清清楚楚,学生自然就默认这是两个完全没关系的模块。排程做完出个静态甘特图,往平台上一放,就算交差。调度单独写个异常处理脚本,各跑各的,互不打扰。
中期答辩那次,第三组上台演示,刚手动模拟了一台铣床故障停机,系统直接卡住。排程页的甘特图还是按原计划走,调度模块堆了一堆待分配的新任务,就是没法更新进去。全班哄笑完,突然就安静了——没人想到会出这个问题。

我当时问,有没有人想过,调度出了异常,原来的排程计划得改?改完的计划得给调度发新指令?
一片沉默。
说白了,大家都盯着知识点背,根本没动脑子想实际跑起来是什么样子。排程做的是中长期的任务规划,调度管的是实时的执行异常,异常变了,原来的规划肯定不成立了啊。不联动,就是个只能看不能用的花架子。
砍了三次才出来的核心框架
一开始我给的参考框架太复杂,什么需求预测、智能优化算法全加进去,学生两周时间根本啃不动,更别说打通联动逻辑了。陪着第三组改了三次,把所有花里胡哨的功能全砍了,只留三个核心联动节点,居然就跑通了。
第一个核心,排程输出的不是固定甘特图,是带状态标记的动态任务队列。原来学生做的甘特图是做完就锁死的,每个任务的时间位置都不能动。现在改成每个任务绑定实时状态:空闲、执行、延误、暂停,只要调度模块把异常状态传过来,对应任务直接改状态,触发排程模块按规则重排后续所有未执行的任务。
第二个核心,异常信息分级过滤,避免无意义的全量重算。不是随便一个小异常就要动全天的计划,比如某个工位只是换刀晚了十分钟,那就只调整相邻两到三个工位的任务顺序,不用触发全排程重算。不然随便出个小问题系统就卡半分钟,根本没法用。
说实话,我一开始还要求学生加个异常预测模块,说要贴合工业实际,后来发现别说本科生,就是刚进项目的研究生也未必能两周做出来。砍了,改成分级异常触发规则,反而实用,学生也能摸透逻辑。

不过话说回来,有一组学生一开始花了整整一周做了个超漂亮的大屏可视化,各种图表动态跳,核心联动逻辑错了,演示的时候还是卡成PPT。后来咬咬牙砍了一半大屏功能,把时间省出来改核心逻辑,最后答辩成绩反而靠前。
踩过坑才懂的教学调整

这次答辩改完,我翻了之前用了三年的实验指导书,越看越不对。
我们教机械设计信息化,太喜欢拆知识点了。把一个完整的系统拆成一个个孤立的模块,每个模块讲原理讲算法,考试考的也是每个模块的知识点,从来没把”模块之间怎么联动”当成核心考点。
生产计划排程联动调度平台,核心根本不是排程,也不是调度,是”联动”这两个字。没了联动,就是两个拼在一起的独立工具,解决不了实际问题。
学生在学校里没踩过这个坑,出去进企业做项目,碰到真的生产线需求,还是会犯一样的错——我之前待过的项目组,就碰到过排程系统是一方做的,调度系统是另一家做的,两个系统数据不对接,计划和执行永远对不上,甲方花了不少钱,最后只能当大屏摆设。
这阵子我一直在改下一届的课程大纲,把原来占比两成的模块拆分作业,换成一成五的联动逻辑设计,开课第一周就把这次踩坑的演示视频放给学生看,让他们先想问题,再做设计,别上来就堆模块。
昨天有个上次踩坑的学生找我,说现在出去实习,碰到企业里的排程调度问题,一眼就看出问题出在哪,就是联动没做好,比同去实习的其他人反应快多了。
我听完挺感慨的。我们教机械设计,不是教学生背知识点凑作业,是教学生解决实际问题。踩过这个坑,比我讲十节课都管用。
明天还要改实验指导书,先写到这。