说实话,干了这么多年物流系统集成,最怕听到一个词——“智慧”。一提到智慧物流,甲方眼里放光,老板心里算账,最后受苦的都是咱们做技术的。今天不扯那些PPT上的东西,就聊聊智能物料流转调度管控落地时,那些你必须亲手捋清楚的破事。
先讲个真事。2019年帮一家做工程机械的厂子改造装配线,物料从立体库到工位,中间用了十几台AGV。单机调试一切正常,联调开始就乱了套——十几台车在交叉口堵成粽子,死锁了整整四十分钟。为什么?调度模型里的路径冲突判断写得太粗糙。当时用的是单向环路,本来想着简单可靠,结果多任务并发时,环路反而成了唯一的瓶颈。
一、调度模型别追求花哨,先满足这些硬约束

做调度系统,第一件事不是选算法,而是把约束条件列全。哪些是硬约束?比如,任务的最晚完工时间、AGV的电池电量护栏、工位料架的容量上限。这些约束一旦违反,后果就是停产或者设备损坏。软约束呢?比如尽量让物料在同一辆车上拼单,减少空驶。软硬分开,你的模型才能既有底线又有优化空间。
我当时用的滚动时域方法,周期设成120秒,预测未来30分钟的任务。具体怎么定?看你的任务到达率。我们的经验是:调度周期 = 平均任务间隔的5~8倍,最小值不得低于30秒。太短,系统频繁重算,CPU开销大;太长,实时性差,来不及响应异常。
有人喜欢上强化学习。我不泼冷水,但建议先拿历史数据回归一个简单的优先级规则。比如,紧急订单优先,先到先做,再按剩余交期最短排。这些启发式算法往往比黑盒模型更可控,出了问题也好查。强化学习?等你的场景稳定了再说吧。
二、感知层是调度的大腿,数据可信度决定一切
调度系统最怕什么?数据是错的。我们有个项目,料箱RFID读取成功率只有95.3%,别小看那5%的错误,一天下来就是几百次错误映射。AGV跑到指定货位,找不到箱子,或者拿错了料。后来怎么解决的?增加视觉二次确认,在取放货口加一个工业相机,比对料箱的尺寸和颜色特征。识别错了,直接报警,不让AGV动作。这才是可靠的闭环。
定位也是一样。我记得刚做AGV时,用磁条导航,定位精度±2cm,其实够用,但柔性差。后来换SLAM激光导航,精度更高,但是必须处理动态场景下的地图漂移。比如高货架区域,激光扫描特征稀疏,定位偶尔跳变。所以,对精度要求高的对接工位,最好增加二次定位——比如二维码或者地标。
这里有个经验参数:AGV二次定位精度至少要达到±5mm,否则无法自动插接充电桩或者对接辊筒线。别信宣传册上的“重复定位精度±10mm”,那是理想环境。现场有粉尘、油污、光照变化,你测得准才有鬼。

三、通讯与接口——调度和PLC的“婚姻”需要经营
调度系统再智能,最后都得通过PLC或者直接总线去驱动设备。问题往往出在接口规范上。我们早期吃过一个大亏:AGV制造商用的是自己的调度协议,跟我们中控完全不兼容,最后只能做一个转换网关,白白多了一个单点故障。
后来统一采用OPC UA 和 MQTT 混合模式。设备层的实时控制走OPC UA,任务状态上报走MQTT。别问为什么不用一个协议搞定——OPC UA的发布订阅虽然强大,但是对老设备的支持不够。MQTT轻量、灵活,适合事件类消息。这样分工,两边都轻松。
另外一个坑:通讯心跳超时设定。我们一般设5秒,超过就判定设备离线,任务自动转移。但别设太短,否则网络抖动会造成误判。曾经一间厂房里金属粉尘大,网络丢包严重,心跳误报导致AGV频繁急停。后来加了滑动窗口滤波,连续3次超时才算离线。这种细节,供应商不会帮你调好的。
还有,指令ack机制。每一条派送指令必须等到设备返回“已接收”才算发送成功。别用UDP广播,必须用TCP或有确认的MQTT QoS1以上。你要是图省事,等着半夜被电话叫醒吧。
说到标准,如果你用的是AGV,建议好好读一读VDA 5050,它定义了AGV与调度系统的通信接口,能省掉不少扯皮的功夫。
四、调度算法实战——从Dijkstra到A*的进坑史
路径规划是调度的大脑。最早我们用Dijkstra,原理简单,节点多了以后性能就拉垮。现场有200多个节点,每次重规划都要几十毫秒,看着不明显,但任务量一大,延迟剧增。后来换A*,加一个启发函数,速度提升了一个数量级。注意,地图网格化时,网格尺寸别小于车体转弯半径的一半,否则算出来的路径会出现直角转弯甚至原地打转。
多AGV协作时,时间窗算法比单纯的路径规划靠谱。给每辆车分配一个经过节点的时空窗口,窗口冲突就让优先级高的先过。但时间窗也有问题:如果任务波动大,窗口要动态调整,计算量又上去了。我们最后采用了双层策略:上层用集中式任务分配,下层每辆车自己用A*算局部路径,遇到障碍就原地等几秒再规划,这个“等待”策略简单但极其有效。
还有死锁问题。你可以用颜色条带法,让环形路线上的车辆保持同向,或者设置禁区。最简单的办法是,在交叉口加一个互斥信号量,同一时刻只允许一个方向的车流通过。虽然降低了部分通行效率,但换来了稳定。别为了那么一点点效率去赌概率。

五、别忘了人——调度系统也要讲人情世故
系统上线前,老师傅们都会很抵触。你把他做了十几年的活交给几台机器,他肯定不服。所以我们的做法是,保留一个“人工调度台”,可以查看所有任务,也可以手动改派。但有一个前提:手动操作必须留痕,方便追溯。另外,界面上的汉字要符合现场习惯。比如“出库”要叫“领料”,“入库”叫“退料”。这些小事,直接决定工人会不会按你的按钮。
还有一点,异常恢复流程要提前演练。系统宕机了怎么办?我们设计了一个“降级模式”:AGV自动切换为手动遥控,中控数据不更新,但是产线不能停。这个模式用的不多,但每次都能救急。想想看,如果一套系统一年宕机两次,每次造成停产半小时,那损失可比省掉冗余成本大得多。
六、算清账——别让技术改造变成技术负担
最后聊聊投入产出。智能调度不是买一套软件就完事。你得考虑现场改造费用、AGV及设备成本、系统集成费用、以及后续运维的人员工资。我们做过一个预算:一套20台AGV的调度系统,总投入大概在800万左右,三年回收。如果你们年产量低于某个值,可能回收期更长。
计算AGV数量有个经验公式:N = (T循环 × R) / (T节拍 × η),其中T循环是单趟任务的循环时长(包括取货、送货、充电等待),R是单位时间任务率,η是系统可用率(一般取0.85)。但要注意,实际往往不是算出来的,而是数出来——你得模拟仿真。
仿真一定要做,但别迷信。仿真帮我们找到过瓶颈,也让我们一度以为万事大吉。真实世界的扰动永远比你模型的多。所以,预留15%的产能余量,别卡得太死。
好了,差不多就这些。智能物料流转调度管控,说到底是把现场的无序化为有序,再把有序化为高效。真做起来,你会发现,最难的从来不是技术,而是你对现场的理解。多去车间走走吧。