Android 手持终端上的 RFID:SDK 不会告诉你的那些事
Android 手持终端上的 RFID:SDK 不会告诉你的那些事
技术深度

Android 手持终端上的 RFID:SDK 不会告诉你的那些事

手持 RFID 应用本质上是一个「穿着扫描枪外衣」的后台服务问题:读写器线程、扳机语义、操作员真的用得下去的批量界面、离线队列与电量预算——这些工程细节决定它是演示程序还是能扛住一个班次的工具。

12 min· By SpidersRFID Editorial Team

每家 RFID 厂商都会附一个演示应用,九十秒就能读到标签。然后每个真实项目都会花三个月发现:这个演示回答不了下午四点仓库现场真正重要的问题——扳机为什么不响应了、电量为什么第六个小时就没了、列表为什么滚得那么慢以至于操作员不再相信它。

本文讲的就是这两个应用之间的差距。SDK 只占其中的一小部分。

SDK 版图:你到底在集成什么

三套 API、三种不同的设计假设,把它们混为一谈就是第一个错误。

  • RFID SDK 是一个用 Java 包了一层的原生库:它独占天线、一个读写器线程和一个回调接口。
  • 条码 API(DataWedge 或 EMDK)是独立子系统,即便在同一台设备上,生命周期规则也完全不同。
  • 条码事件与 RFID 事件走不同回调,必须先合并成统一的扫描模型,界面才能看到。
  • 各厂商 SDK 的线程保证不一致;文档没写线程安全,就当作不安全。
  • 按设备型号锁定 SDK 版本,把升级当成一次发布,因为小版本之间行为也会变。

线程、回调与扳机

扳机是被触碰最多的部件,也是「它怎么不工作了」最常见的来源。

  • 读写器回调跑在 SDK 线程上;绝不要在里面碰 UI 或数据库,把活交给队列。
  • 按下扳机开启读取会话,松开停止;两个动作都要幂等,因为硬件事件会重复。
  • 会话已在运行时不要再开一个;要么合并,要么读写器会报出一堆你要追几周的错误。
  • 每个会话都需要看门狗:N 秒没有事件就拆掉重建读写器,而不是无限等待。
  • 每次应用恢复前台都要重新初始化,因为读写器状态扛不住进程被杀或设备重启。

手持机的读取配置不等于固定读写器

手持机的默认参数是为桌面演示调的,而仓库不是桌面。

  • 发射功率应跟随作业:货架精度用低功率,高层货架用高功率,永远别把最大功率当默认。
  • 会话选择比在通道门上更要紧:会话一会让标签在两次读取之间保持安静,适合反复盘同一层货架。
  • 在单化之前按 EPC 前缀过滤,是阻止读到隔壁货道库存最便宜的办法。
  • 应用里设一个短的去重窗口是正常的;设得太长会掩盖真正的重复标签。
  • 批量模式提高吞吐但推迟首个结果;界面必须显示「正在读」,否则操作员会按得更用力。

批量读取的界面设计

批量读取界面不是一张列表,而是一个带异常的进度显示。

  • 把滚动计数作为主数字展示,而不是滚动列表;因为操作员想确认的就是那个数。
  • 显示最近几条读取以建立信心,但要限制可见行数,一千行的列表就是一块卡住的屏幕。
  • 用视觉区分三种状态:读取中、空闲、故障;操作员靠颜色判断,比读提示文字早得多。
  • 把异常前置:未知标签、位置不对、已盘过,让操作员在扫描当下就能处理。
  • 扳机和屏幕按钮必须做同一件事,因为手套和强光都会打破你对触摸的假设。

先离线,后同步

仓库总有信号死角,存不下来的盘点就是会被重做一遍的盘点。

  • 每次读取先落本地,按会话分库存储,然后再同步;绝不要让网络调用阻塞扫描循环。
  • 同步的单位是会话而不是标签,这样中途上传也能续传而不重复。
  • 用单调递增的本地序列号加设备标识,在服务端实现幂等。
  • 明确显示同步状态:待同步、同步中、失败并附重试次数,别让人对着一个从未发生过的绿勾。
  • 冲突在服务端按现场团队知道的规则解决,而不是设备端「后写覆盖」。

电量、发热与八小时班次的现实

RFID 是耗电功能,而它通常被加进一个本来电量就紧张的应用里。

  • 长时间高功率读取能让续航减半;要按班次做预算,而不是按演示做预算。
  • 只在会话期间给读写器供电,空闲即释放,因为天线通电时没人扫也在耗电。
  • 注意发热:设备变热后持续读取会触发降频,表现为「距离变短了」。
  • 关掉后台定位和其它用不到的射频,RFID 射频并不是应用里唯一的耗电大户。
  • 给操作员可见的电量阈值与提前告警,别让一次盘点在完成九成时丢掉。

设备管理:一个应用,很多台机器

手持机队列会漂移,而漂移在一次现场报出不同数字之前是看不见的。

  • 按设备型号锁定应用版本、SDK 版本与配置档,并把它们写进扫描载荷。
  • 配置从服务端下发,而不是在设置页里改,否则一个设错的功率档能留存几个月。
  • 用 MDM 推送更新,并禁止操作员「为了测试」安装另一个版本。
  • 每次会话都记录设备身份;某站点数字异常时,第一个问题就是它跑的是哪个构建。
  • 明确退役设备并吊销其凭证,否则一台丢失的手持机可以继续写库存。

在真实货架上测试,而不是在办公桌上

演示在桌上能过;发布版必须在金属货架、一百件衣服的真实场景里能过。

  • 用真实标签与真实贴标位置测试,因为折叠的织唛和摊平的内嵌标签,读起来完全不同。
  • 在楼里最差的位置测试:最远角落、金属货架、紧邻月台门的那条货道。
  • 测整个班次:从低电量开始,连读两小时,切后台、再回前台,确认会话还在。
  • 戴手套、在阳光下测试,因为两者都会改变扳机与屏幕的实际用法。
  • 保留一个已知货架的回归计数:同一层货架、同一个应有数量,每次发布前都跑一遍。

贯穿这一切的思路很不性感:把读写器当成不可靠外设、把网络当成不存在、把电量当成有限、把操作员当成在糟糕光线下戴着手套的人。按这些假设写的应用能活过第一个周一;按演示写的不能。

Odoo RFID 集成一站式方案

我们使用 Cookie 来提升您的浏览体验、分析网站流量并个性化内容。点击“接受全部”即表示您同意我们使用所有 Cookie,您也可以选择“仅必要 Cookie”。详情请参阅我们的 隐私政策 以了解更多详情。