上周在一个项目联调现场,我又一次看到了那个熟悉的场面:输送线分拣口,一个托盘停在那儿一动不动。WCS 的监控大屏上,这票货的状态清清楚楚写着"已放行";PLC 电控柜前,现场工程师盯着 I/O 信号灯,摇头说:"我这儿没收到放行。"
项目在加州 Inland Empire,一个 8 万平方英尺的服装退货 3PL 仓,2023 年新上的 WCS,对接的是仓库原来就有的输送线电控。这个"放行了但没收到"的问题,卡了我们整整两天。最后查出来的原因让人哭笑不得:WCS 程序员手里拿的是 v7 版点表,现场 PLC 程序里实际跑的是 v9 版——中间现场改过两次线、加过两个光电,点表没同步更新。WCS 的放行请求,被写进了一个 v7 里有、v9 里已经挪作他用的备用地址,PLC 那边根本没人看这个地址。
这种事,二十年里我见了不下十次。WCS 和 PLC 对接,硬件没问题,两边的软件也都没问题,死就死在中间这张 I/O 点表上。今天把这事儿掰开揉碎讲一遍。

先别急着列点,把信号分成三类
新手列点表,最容易犯的错是打开 Excel 就一行一行往下写,写到最后几十上百个点,自己都看晕了。我的习惯是先分三类,分类清楚了,点表自然清楚。
第一类是命令,WCS 发给 PLC 的:启动、停止、放行、复位、模式切换。命令的特点是"发出去必须有回音",所以每个命令几乎都对应第二类里的一个状态。凡是 WCS 发出去、PLC 不用回的命令,我一律要求删掉——没有回音的命令,联调时出了问题你连查都没法查。
第二类是状态,PLC 报给 WCS 的:到位、运行中、故障、急停、手动/自动模式。状态的特点是"只读",WCS 只能看不能改。很多项目翻车就翻在这儿:WCS 的程序员图省事,直接去写本该由 PLC 维护的状态位,两边同时写一个点,联调时信号乱跳,查到最后发现是自己人打自己人。
第三类是生命信号,心跳。WCS 每隔一两秒翻转一位,PLC 也翻转一位回给 WCS。两边都盯着对方的心跳,停跳超过约定时间就报警。这是整张点表里最便宜的一道保险,也是最常被省掉的。省掉的理由我都听过:"反正网络断了交换机会报警。"交换机报警,和 WCS 知道 PLC 程序死机了,是两回事——前者告诉你线断了,后者告诉你对面那个会动的机器现在到底是什么状态。
拿"放行一个托盘"举例。真正需要的点其实就四个:WCS 到 PLC 的"放行请求",PLC 到 WCS 的"收到请求",PLC 到 WCS 的"放行完成",再加一个双向心跳。四个点,一件事,权责清清楚楚。点表上凡是说不清"这个点是干嘛的、谁来写、谁来看"的行,直接删掉。点表不是越全越好,每多一个没人维护的点,联调时就多一个嫌疑人。
握手就三段:请求、应答、完成,谁也别想偷懒
时序我只认三段式。WCS 置位"放行请求";PLC 看到之后置位"收到请求";PLC 执行放行,托盘到位后置位"放行完成";WCS 看到"完成"之后复位"请求";PLC 看到"请求"被复位,自己再复位"完成"。一圈走完,回到初始状态,干干净净。
为什么非要三段?因为两种死法我都见过。一种是 WCS 只发不确认:请求发出去,PLC 因为信号抖动没采到,托盘没放行,WCS 却以为放完了,直接派下一个任务,整条线堵死。第二种是 PLC 只做不回:放行了但 WCS 不知道,WCS 超时重发一次请求,同一个托盘被放行两次,后面分拣口直接撞车。
三段式握手的精髓是闭环:每一步的发出,都以前一步的确认到达为前提;每一步的复位,也都要等对方看到。这么设计还有一个好处:两边任何一边断线、死机,握手都会卡在中间某一步,清清楚楚地卡住,而不是悄悄地错下去。卡住不可怕,报警会响;悄悄错过去才可怕,等你发现的时候,错的已经是一整托盘的货了。
联调之前,先把这几样测了
点表列完、程序写完,别急着整线联调。按下面这个顺序单项过一遍,能省掉联调现场一半的眼泪。
先测消抖。现场的光电、接近开关,机械动作那一下信号会抖,PLC 程序里对输入做几十毫秒量级的消抖是基本功。WCS 那边也别偷懒,采 PLC 的状态时,连续两个扫描周期都成立再认。抖动这东西,平时看不出来,一到大批量连续运行就冒头。
再核地址。拿着点表,一个点一个点对着 PLC 程序里的实际地址拨过去。现场改线、临时加点是常事,点表版本和程序版本必须对上。我现在强制要求:点表必须有版本号,版本号同时写进 PLC 程序注释和 WCS 配置文件。开篇那个 v7 对 v9 的事故,就是这么防的。
然后测断线和急停。拔掉一根网线,看 WCS 多久能发现 PLC 失联——靠的就是心跳信号。拍下急停,看 WCS 收到的"急停"状态和现场实际动作是否一致。这里有个原则:急停回路本身走安全继电器硬接线,传给 WCS 的"急停状态"只是一个镜像,安全功能永远不要押在软件信号上。
还要测模式信号。PLC 切到手动模式时,WCS 必须知道,并且停止派发任务。我见过 WCS 不管 PLC 是手动还是自动照单派任务,维修工正在手动点动输送线,WCS 的放行命令把托盘顶了出去,差点伤人。模式信号是安全项,不是可选项。
最后整线连续跑两个小时,中间随机拍一次急停、随机断一次网、随机做一次手动干预。联调现场最贵的是时间,提前把异常演一遍,比在客户面前演砸强得多。
如果你明天就要进联调现场,只带一样东西:打印出来的、双方签过字的点表,版本号和程序里的一致。就这一样,能挡掉一半的坑。剩下一半,靠上面这份清单一个一个过。






