手机代替扫码枪?我们在MES系统里这么干才稳
去年秋天,一家做汽车零部件的客户找过来,说车间里的扫码枪又坏了十几把,采购周期长,维修也麻烦,问我能不能直接用工人的手机装个小程序来扫码,接进他们正在用的MES里。当时我们团队第一反应是:手机能行吗?车间环境复杂,网络时好时坏,扫码枪可是专门设计来扛造的。但客户态度很坚决,毕竟手机人人都有,自带屏幕和交互,成本几乎为零。
作为MES软件服务商,我们没法简单回个“不行”。于是拉上架构师和现场实施,啃了两个月,还真把一套高可用的手机扫码集成方案做出来了,现在跑在三个工厂里,日均扫码量二十万次以上,没出过大事故。这里头有些实践经验,值得写一写。
先说为什么手机能替代。扫码枪本质就是个输入设备,把条码转成字符串通过串口或USB喂给系统。手机摄像头 小程序解码库,同样能拿到字符串,差别在于通信链路和稳定性。我们选了微信小程序,不挑手机系统,安卓苹果都能用,工人也不用装重包。关键在怎么跟MES后端“可靠”对话。
我们的MES后端是Spring Cloud微服务,扫码上报接口走内网网关。小程序端用自研的离线队列:工人扫完码,数据先落本地Storage(后来换成更稳的本地数据库插件),再通过WebSocket长连接往后端推。车间Wi-Fi我们配合客户做了双AP冗余,但手机网络切换难免有缝。所以小程序里写了断线自动重连和退避策略,三秒一次,连不上就继续攒数据,最多本地存五千条,足够一个班次用。
后台接口设计成幂等,同一笔扫码带唯一事务号,重复传也不怕重复入库。这是高可用的底线——网络乱了,数据不能乱。
解码方面,我们没直接用网上开源的JS库,那玩意儿在低端机上卡顿明显。团队把OpenCV的条码识别模型裁了枝,编译成小程序可用的WASM模块,iPhone 7这种老机器也能在200毫秒内出结果。碰到油污条码、褶皱标签,还做了多帧融合识别,实在扫不出才切手动输入,但手动输入要工号 密码二次确认,防错防呆。
权限管控不能少。小程序绑定MES工号,不同岗位只能扫对应业务的码,比如质检只能扫质检工位。所有操作留痕,跟扫码枪时代的日志平级。客户IT部门一开始担心安全问题,我们加了设备白名单,非注册手机连不上测试环境,生产环境更严。
高可用还得有降级。我们没把扫码枪全扔了,而是在MES终端程序里保留双通道:手机小程序和物理枪同时可用,哪个先上报用哪个,后台自动去重。这样万一手机集体没电(虽然没发生过),产线不至于停。
实施中途还踩过一个坑。有回安卓微信更新,相机接口限频,导致连续扫码间歇丢帧。我们连夜加了帧缓存和友好提示,工人反馈“稍等重试”比直接卡死强百倍。这种细节才是高可用集成的肉。后来我们养成了习惯,每次微信基础库升级都得在测试车间真机走一遍压力扫。
跑下来半年,客户算过账:扫码枪采购和维护一年省了小四十万,而小程序开发是我们MES标准模块的一部分,后续项目直接复用。扫码峰值时段,系统可用性监控在99.98%,比他们之前纯枪方案还稳,因为枪坏了没人马上修,手机坏了自己换。
做软件系统这些年,我们明白一点:技术替代不是把旧东西简单拔掉,而是用架构保证新东西更皮实。手机代替扫码枪在MES里落地,核心是那层离线队列和幂等设计,表面看是前端变了,底子是后端脑子清醒。如果哪家公司也想这么搞,别光看演示视频里扫得欢,回去把断网重连和重复提交测够了再上线。
微信号:18581869297