先说结论:WCS 说有货、WMS 说没货,十有八九不是系统 bug,而是"在途"和"异常下架"这两笔账没人认领。做了二十年系统集成,这种差异我见过几十次,根因翻来覆去就那几类,排查也有固定套路。

先把一个基本概念掰开:WCS 和 WMS 记的根本不是同一种"库存"。WCS 记的是载具,料箱在哪条输送线上、穿梭车背着哪个托盘、AMR 肚子里装着什么,它是按设备位置记的。WMS 记的是库位,哪个货架的哪个格口有多少货,它是按账面位置记的。货在设备上跑着的时候,WCS 说"在我这儿",WMS 说"没到我账上",两边都没错,只是口径不一样。搞不清这个前提,对账就是鸡同鸭讲。

给你一组真实的数字感受一下。旺季某天晚上 6 点,一条 600 米的输送线上同时有 400 多个料箱在跑,WCS 这边显示在途 3800 多件,WMS 账面比 WCS 少了将近 4%。这 4% 不是丢了,是口径差。但如果你的对账逻辑不懂这个口径差,它就会天天报警,天天狼来了,最后没人理,真正的异常反而被淹没了。

差异的三种真面目

第一种,在途差异。货在输送线、穿梭车、AMR 身上,不在任何库位上。旺季的时候,一条 600 米的输送线上同时跑着几百个料箱,在途量能占到总库存的 5% 以上。这时候 WCS 和 WMS 差几个点,太正常了,关键是要知道差的是"在途"而不是"丢了"。

特别提醒 3PL 仓:一个客户的货在途,另一个客户的货异常下架,混在一起查,排查难度翻倍。对账快照最好按货主维度分别跑,别把所有货主的差异揉成一锅粥。

第二种,异常下架。设备把有问题的货踢到了异常口,或者现场人员直接把货拿走了。WCS 记了这个动作,WMS 没收到回执,账就岔开了。这是最常见也最要命的一种,因为货是真的不在它该在的位置了。

第三种,信号丢失。扫码枪没读上条码,PLC 断连了几分钟,动作发生了但数据没同步上来。这种差异最气人,货明明好好的,就是两边数字对不上。

这三种差异里,异常下架最贵。一次拣选失败,拣选员白跑一趟、复核、找货,十几分钟没了。旺季一天几十次,复拣的人工和时效损失就很可观。更贵的是数据不准导致的发错货,一单客诉的成本顶得上几十次复拣。所以对账不是 IT 的事,是直接连着钱的事。

对账频率:多久一次才不亏

实时对账不现实。WCS 是毫秒级的设备世界,WMS 是事务级的账面世界,两个世界的节拍本来就不一样,硬要实时对齐,只会把自己累死。

我的做法是两层。第一层,每小时跑一次差异快照,只看总量和重点 SKU,发现异常波动就报警,比如某个 SKU 两边差 5 件以上。第二层,每天收班前做一次全量对账,把当天的差异清单拉出来,逐条认领。报警阈值别设太灵,设太灵了一天几十条报警,没人看了等于没有。

阈值怎么定?我的经验是按 SKU 的日均出库量定:日均出库 100 件以上的,差 5 件报警;慢动的 SKU,差 2 件就报警。阈值拍脑袋定没关系,先跑一个月,看报警量再调。报警太多就放宽,真正的问题没报出来就收紧。阈值是活的,不是死的。

差异清单拉出来之后,认领要有主人。我的分工:IT 负责接口和信号类,运营负责异常下架和人工干预类,设备商负责 PLC 和扫码枪类。每周开 15 分钟的碰头会,只过未关闭的差异。没有主人的差异,永远关不掉。

从差异到根因:一条排查链走到底

拿到一条差异,别急着调账,按这条链走。先查 WCS 的事件日志,按时间倒查这个 LPN 或料箱的最后一个动作,看它最后出现在哪台设备上。再查 WMS 的事务历史,看这票货最后一次账面变动是什么。两边时间戳对不上,多半是接口丢了消息;时间戳对得上但数量对不上,多半是人工干预没走系统。

排查时还有个小技巧:先看差异发生的时间分布。如果差异总在某个固定时段出现,八成是那个时段的人或设备有问题;如果随机出现,优先查接口和信号。

2023 年我在一个项目上遇到过经典案例:差异集中在夜班,白天都好好的。按排查链倒查 WCS 日志,发现每天凌晨两三点,一批异常件从异常口"消失"了,WMS 里没有任何记录。最后问出来,夜班主管图省事,异常件直接搬走处理了,根本没扫码。不是系统问题,是人的问题,但系统要能防住这种人。

还有一次是反过来的:WMS 显示有货,WCS 说没货。查下来是 PLC 断连了 7 分钟,期间 30 多个料箱过了扫码点没记上。货都在库位上好好的,就是 WCS 那边"失忆"了。这种靠人工查很慢,后来我们给 WCS 加了断连告警,PLC 断开超过 2 分钟就发短信,从那以后这类差异当天就能发现。

中控室里的 WCS 监控大屏

预防:三个让差异少发生的机制

排查是治标,机制才是治本。三个机制,按重要性排序。

第一,异常口必须扫码才能放行。货从异常口拿走,扫一下码,WCS 和 WMS 同时记一笔。物理上做不到不扫码就拿走,比如加个小门禁或者把异常口做成只能单件通过。这个投入不大,但能掐掉一大半的异常下架差异。改造时顺手把异常口的照明做好,晚上光线暗,扫码枪读不上,工人就更不愿意扫了。

第二,人工干预必须走"异常处理"流程进 WMS。不管是质检抽走一件,还是破损换包装,现场人员在手持终端上走两步流程,WMS 账面跟着动。流程要短,两步以内,多了没人走。

第三,WCS 和 WMS 之间加消息队列。断连、丢包是常态,关键是断连之后能重发而不是丢弃。很多老项目是直连接口,网络抖一下,几条消息就没了,差异就是这么攒出来的。接口改造时记得做幂等,同一条消息重发两次,WMS 只记一笔,不然重发机制本身会造出新的差异。

这三个机制花多少钱?异常口扫码改造,一个口几千美金;手持终端加两步流程,主要是软件改动;消息队列是集成商的标准件。加起来通常不到一个大促季异常发货损失的零头。我算过一笔账:一个日均 2 万单的仓,差异导致的复拣和发错,一年烧掉的钱够做两套这样的改造。先花小钱把机制建起来,比天天救火划算得多。

下次再看到两边对不上,别先骂系统。先问一句话:这票货现在到底是在设备上,还是在库位上?八成的问题,问完这句话,答案就自己走出来了。

最后说个反直觉的:差异永远清不零。目标不是零差异,是把差异控制在阈值以内,每条都有主、有闭环。追求零差异的团队,最后都变成了天天调账的团队,账调平了,问题还在。