2. DataMan读码结果字段解析
DataMan读码器输出的每一条结果记录,本质上是一份“读码事件报告”。它不只回答“读到了什么”,还回答“读得怎么样、什么时候读的、由哪次触发产生”。如果只关注解码字符串,就会丢掉判断产线是否稳定、异常是否可复现的关键线索。本节围绕 Good Read、No Read、Multiple Read、Match String、符号质量、时间戳、触发ID 等核心字段,说明它们的含义、数据形态以及在实际数据治理中的用法。
一、读码状态字段:Good Read / No Read / Multiple Read
读码状态是结果记录的第一层分类。DataMan 通常以状态码或枚举值输出,例如在 DataMan 的格式化输出中,常见做法是用 ReadResult 或自定义格式串中的状态位表示:0 表示 No Read,1 表示 Good Read,2 表示 Multiple Read(多码/多重读)。不同固件版本和输出格式下字段名可能不同,但语义一致。
- Good Read:本次触发成功解出至少一个符合规则的码,且校验通过。数据形态上通常伴随非空的解码字符串、符号质量分数和码制类型。
- No Read:本次触发未解出任何有效码。此时解码字符串为空或为占位符,符号质量可能为 0 或缺失,但时间戳和触发ID仍然存在——这正是排查“是没触发还是没读到”的关键。
- Multiple Read:一次触发视野内出现多个可解码符号,或同一符号被多次解出但内容不一致。它不一定代表失败,但意味着需要业务规则决定取哪一个,例如按符号质量最高、按位置优先或按预设码制过滤。
二、Match String:从“读到了”到“读对了”
Match String 是 DataMan 的匹配字符串功能,用于判断解码内容是否符合预设模式。它通常以正则表达式或通配符形式配置,例如 ^SN[0-9]{8}$ 表示以 SN 开头、后接 8 位数字。输出结果中,匹配状态往往是一个独立字段,如 MatchResult,取值可能是 Pass / Fail,或与读码状态组合成更细的结果码。
需要区分两个层次:解码成功不等于匹配成功。一个码可能被正确解出,但内容不符合 Match String,此时读码状态是 Good Read,匹配状态却是 Fail。数据治理中应把“解码率”和“匹配通过率”作为两个指标分别监控,否则会把“读到了错码”误判为设备故障。
三、符号质量:读码稳定性的先行指标
符号质量(Symbol Quality)是 DataMan 对当前解码符号可读性的量化评分,通常以百分比或分级形式输出。它综合了对比度、模块清晰度、静区、失真等因素。数据形态上,它一般是一个 0~100 的整数,部分格式下还会附带分级(A~F 或 1~5)。
符号质量的价值在于提前预警:当读码率仍为 100%,但符号质量从 85 持续下降到 60,说明打印质量、镜头污染或光照正在劣化,No Read 很可能在不久后出现。因此,质量分数应作为趋势字段长期留存,而不是只在 No Read 时才关注。
四、时间戳与触发ID:把结果还原成事件
时间戳(Timestamp)记录读码发生的时刻,数据形态通常是毫秒级或微秒级的时间值,可能来自设备内部时钟,也可能由上位机在接收时打标。触发ID(Trigger ID)则是每次触发事件的唯一标识,常见形态是递增整数或带前缀的序列号,例如 T00012345。
这两个字段的组合,使一条读码结果从“孤立字符串”变成“可定位事件”。当出现 No Read 时,可以用触发ID回查同一时刻的图像、PLC信号和产线位置;当同一触发ID出现多条记录时,说明存在 Multiple Read 或重复上报。时间戳还用于计算节拍、判断延迟和做跨设备对齐。
五、字段组合判读:从单条记录到异常结论
单独看任何一个字段都容易误判,真正有效的是组合判读。下面给出几种典型组合及其含义,可作为数据治理中的判读规则参考(示例为合理假设,用于说明逻辑):
| ReadResult | DecodedString | MatchResult | SymbolQuality | 判读结论 |
|---|---|---|---|---|
| Good Read | SN20240001 | Pass | 88 | 正常读码,质量良好 |
| Good Read | SN20240001 | Fail | 82 | 解码成功但内容不符规则,检查码内容或 Match String 配置 |
| No Read | 空 | — | 0 | 未解码,需结合触发ID回查图像与光照 |
| Multiple Read | 两个不同码 | — | 75 / 70 | 视野内多码干扰,需调整取像区域或增加位置过滤 |
| Good Read | SN20240001 | Pass | 45 | 读码成功但质量偏低,属于劣化预警,应检查打印或镜头 |
六、实际数据治理中的字段处理要点
在把 DataMan 结果接入数据库或 MES 时,字段处理有几个容易踩坑的地方。第一,空值语义要统一:No Read 时 DecodedString 可能是空字符串、NOREAD 或 NULL,入库前应统一为可查询的固定值,否则统计会漏。第二,时间戳时区与精度要固定:设备本地时间与上位机时间可能不一致,建议统一转换为 UTC 毫秒并保留原始值。第三,触发ID要保证唯一且可排序:如果设备重启后序列归零,需要加上设备编号或日期前缀,否则跨天数据会冲突。
第四,符号质量要按码制分别统计:不同码制(如 DataMatrix、QR、Code128)的质量评分基准不同,混在一起做趋势会失真。第五,Multiple Read 要保留全部候选:如果只保留最终选中的那一个,后续就无法复盘“为什么选了它”,建议在结果表中以子表或 JSON 字段保存候选列表及其质量分。
理解这些字段的含义和数据形态,是后续做读码率统计、No Read 归因和 Multiple Read 治理的基础。字段本身不复杂,复杂的是它们在真实产线中组合出来的各种状态——而数据治理的价值,正是把这些状态变成可查询、可对比、可追溯的记录。