100ms 采样率下连续 3 次空码误判机制

记录日期:2026-09-10 | 所属项目:ZhctWeightingTableYoukate | 文档类型:硬件扫码与离盘判断技术分析

一、结论

在当前项目中,“连续 3 次空码”是按 APK 收到的回调包计数,不是按扫码头完成的独立真实扫描次数计数。

100ms 真机测试的单轮样本中,餐盘在位最大连续空码为 1 次,没有实际触发 3 次误判。但按照 2026-09-07 会议提出的硬件机制,如果扫码头约每 300ms 产生一次真实结果,而控制板把同一结果按 100ms 间隔重复上报 3 次,那么一次真实失读就可能形成 3 个连续空码回调,使 APK 在约 300ms 内错误判断餐盘已经移走。

因此,100ms 条件下的“3 次确认”不能直接解释为“连续 3 次独立扫码失败”,其实际容错能力可能只有 1 个真实扫码周期。

二、已确认事实

2.1 单轮真机测试结果

2026-06-12 的测试对话记录显示:

指标100ms 测试结果
实测扫码回调间隔中位数99ms
餐盘在位最大连续空码1 次
餐盘拿走后连续空码194 次
该轮是否发生 3 次误判否

这组数据证明当前设备在当次测试中没有达到连续 3 次空码,但只有一轮样本,不能据此推导长期成功率或误判概率。

2.2 当前 APK 的计数方式

  1. 收到有效餐盘码时,将空码计数清零。
  2. 收到空码时,将空码计数加一。
  3. 计数达到配置阈值后,调用离盘收尾逻辑,结束当前扫码/打餐状态。

对应代码位于 HomeActivity.handleYoukateScanCode()、HomeActivity.handleEmptyScanCode() 和 YoukateHardwareManager.cleanScanCode()。当前计数没有使用扫码序列号、真实采样时间戳或数据包新旧标识来区分独立扫描与重复上报。

2.3 空码的应用层定义

所以“空码”不只表示餐盘已经移走,也可能表示一次短暂失读、字段异常或通信解析异常。

三、待供应商确认的硬件机制

2026-09-07 会议形成的当前口径是:扫码头约每 300ms 产生一次真实读取结果;控制板可能将同一结果每 100ms 上报一次,共上报 3 次;这 3 个回调包可能完全相关,不代表 3 次新的真实扫描。

时间APK 收到的数据是否代表新的真实扫描
T0结果 A,第 1 包是,可能对应本周期结果
T0 + 100ms结果 A,第 2 包否,可能是重复包
T0 + 200ms结果 A,第 3 包否,可能是重复包
T0 + 300ms 左右结果 B可能进入下一真实扫码周期
该机制尚未取得香山控制板书面协议、串口原始抓包或序列号证据,因此本文将其作为高相关风险机制,而不是已确认的硬件协议事实。

四、误判原因

4.1 一次真实失读被复制成 3 个空码包

餐盘仍在位时,扫码头可能因为餐盘轻微移动、标签角度变化、遮挡、反光、瞬时休眠或硬件状态波动,在一个真实扫描周期内没有识别到餐盘码。如果控制板将这个空结果按 100ms 重复上报 3 次,APK 会把同一次失读累计为 3 次,从而错误确认离盘。

4.2 复合数据包中的 RFID 字段短暂为空

当前称重数据和扫码数据由控制板合并后通过同一串口数据包返回。即使重量仍能表明餐盘在秤上,只要某一周期的 RFID 字段为空并被重复上报,APK仍会只按空码次数推进离盘判断。当前离盘确认没有联合检查“重量是否回到空秤”或“重量是否发生符合移盘特征的变化”。

4.3 异常餐盘码被清洗为空码

当餐盘码为空或长度不是 6 位时,cleanScanCode() 会将结果转换为空字符串。若同一个异常结果被控制板重复返回 3 次,也会形成完整的离盘触发链。异常来源可能包括串口半包、丢包、解析异常、RFID 字段缺失或返回内容格式异常。

五、误判触发机制

餐盘仍然在位
    ↓
一个真实扫码周期发生短暂失读、空字段或异常码
    ↓
控制板可能按 100ms 间隔重复返回同一空结果 3 次
    ↓
APK 空码计数依次变为 1、2、3
    ↓
达到“连续 3 次”离盘阈值
    ↓
错误结束当前订单/打餐状态并切回打餐前页面

六、概率理解

如果 3 个空码分别来自 3 次相互独立的真实扫描,理论误判概率才可以近似理解为:

单次真实失读概率³

如果 3 个空码只是同一次真实结果的重复包,则三包高度相关,误判概率更接近:

一个真实扫码周期发生失读或异常的概率

因此,在没有确认数据包独立性之前,不能用“三次判断”直接宣称 90% 或更高的长期可靠性,也不能简单使用 p³ 计算误判率。

七、影响

八、建议

  1. 优先通过供应商书面说明或串口原始抓包,确认 100ms × 3 是否为同一真实扫码结果的重复包。
  2. 日志增加单调时间戳、原始包摘要、RFID 字段、与上一包是否相同及包间隔,用于识别重复上报。
  3. 离盘判断优先按持续时间处理,而不是直接按数据包数量处理。
  4. 候选宽限时间可先验证 900ms 和 1200ms:宽限期内恢复同一餐盘码则继续原订单。
  5. 对高可靠场景,增加“持续空码 + 重量回到空秤或接近空秤”的联合确认。
  6. 在实验室构造一次真实空结果被重复上报 3 次的场景,确认 APK 不会将其错误解释成 3 次独立失读。

九、证据边界

十、关联资料