第四章:条码与RFID技术——一维码/二维码编码规则、RFID标签选型、条码打印与解析实战

大家好,我是老张。做MES这么多年,我有个很深的体会:物料追踪这件事,说难不难,说简单也不简单。难在哪?难在「怎么把物理世界的物料,和数字世界的数据对上号」。说白了,就是条码和RFID这两样东西。

这一章,咱们就聊聊条码和RFID。我会把我在产线上踩过的坑、总结的经验,都抖出来。你想想看,一个条码贴歪了,整条产线都得停,这种事我经历过不止一次。

4.1 一维码编码规则:不只是黑白条纹

一维码,大家见得多了。超市里扫一下,价格就出来了。但在MES里,一维码承载的信息远不止价格那么简单。

常见的编码标准有这么几种:

  • Code 128:我最常用的。支持ASCII全字符集,密度高,长度可变。产线上的批次号、序列号,我习惯用这个。
  • Code 39:老牌标准,支持数字和字母。但密度低,同样的信息,它比Code 128长不少。
  • EAN-13 / UPC-A:零售业标准。MES里偶尔用到,比如成品出库要对接电商平台。
  • ITF-14:专门用于外箱的。我见过很多仓库用这个,因为打印在瓦楞纸上也不影响识读。

我的经验:在MES里,Code 128 是首选。为什么?因为它能编码字母、数字、甚至特殊符号。比如批次号 "BATCH-2024-001-A",Code 128 轻松搞定。Code 39 也能做,但条码长度会多出30%左右,打印标签时很占地方。

一维码的结构,其实很简单:

  • 起始符:告诉扫描器「我要开始了」
  • 数据区:你要编码的信息
  • 校验位:防止误读。我遇到过条码被油污弄脏,校验位救了好几次场
  • 终止符:告诉扫描器「结束了」

嗯,这里要注意:一维码只能编码数字和字母,而且信息量有限。你想想看,一个批次号加上生产日期、产线编号、工单号,一维码就撑不住了。这时候,就得请出二维码。

4.2 二维码编码规则:小身材,大容量

二维码,说白了就是一维码的升级版。它用黑白方块在二维平面上排列,信息密度高得多。

主流标准:

  • QR Code:我最推荐的。支持数字、字母、汉字、甚至二进制数据。容量最大到7K字节左右。
  • Data Matrix:工业场景常用。体积小,适合在电路板上直接打标。
  • PDF417:堆叠式二维码。信息量大,但识读速度慢,现在用得少了。

避坑指南:我曾经在一个项目里,用QR Code编码了中文的物料名称。结果发现,有些老旧的扫描器不支持中文编码。后来我统一改用Base64编码,或者干脆只用数字和字母。记住了:在工业现场,越简单越可靠

QR Code 的纠错能力,是个好东西:

纠错等级 可恢复数据比例 适用场景
L (Low) 约7% 干净环境,标签无污染
M (Medium) 约15% 一般产线,有轻微油污
Q (Quartile) 约25% 恶劣环境,标签可能被遮挡
H (High) 约30% 极端环境,标签可能严重损坏

我个人习惯,在MES里统一用 M等级。为什么?因为L等级太脆弱,H等级又让二维码变大。M等级是个平衡点,能抗住产线上常见的油污和轻微磨损。

4.3 RFID标签选型:主动还是被动?这是个问题

RFID,说白了就是无线版的条码。不用对准,不用接触,一次能读一堆。但选型这事,坑很多。

RFID标签分三大类:

  • 被动式 (Passive):没有电池,靠读写器发射的电磁波供电。成本低,寿命长,但读取距离短(一般1-10米)。
  • 主动式 (Active):自带电池,主动发射信号。读取距离远(可达100米以上),但成本高,电池寿命有限。
  • 半主动式 (Semi-passive):有电池,但只用于维持芯片工作,通信还是靠反射。介于两者之间。

我的建议:在MES物料追踪场景,被动式UHF RFID 是主流。为什么?

  • 成本低:一个标签几毛钱到几块钱
  • 读取距离适中:3-8米,够用
  • 可以批量读取:一次读几十上百个标签
  • 不需要电池:维护成本几乎为零

选型时,这几个参数要盯死:

  • 工作频率:UHF(860-960MHz)最常用。但要注意,不同国家频段不同。中国是920-925MHz。
  • 读取距离:别信厂家的「理论值」。我实测过,标称10米的标签,在金属表面只能读2米。
  • 环境适应性:金属、液体、高温、潮湿,都会影响性能。我遇到过标签贴在金属托盘上,死活读不出来。后来换了抗金属标签才解决。
  • 存储容量:一般96位到512位。够存一个唯一ID就行。别想着把整个批次信息都存进去,存个ID,数据去后台查,这才是正道。

注意:RFID标签的 防碰撞算法 很重要。如果一批物料堆在一起,读写器要能区分出每个标签。我见过一个项目,买了便宜的标签,结果一次读100个标签,只能读出30多个。后来换了支持Q值算法的标签,才搞定。

4.4 条码打印与解析实战

理论说完了,咱们来点实际的。条码怎么打?怎么解析?我直接上代码。

4.4.1 用Python生成条码

我个人习惯用 python-barcode 库。轻量、稳定、支持多种标准。

# 安装:pip install python-barcode
import barcode
from barcode.writer import ImageWriter

# 生成Code 128条码
code128 = barcode.get('code128', 'BATCH-2024-001-A', writer=ImageWriter())
code128.save('batch_label')  # 生成 batch_label.png

# 生成QR Code
import qrcode
qr = qrcode.QRCode(
    version=2,
    error_correction=qrcode.constants.ERROR_CORRECT_M,
    box_size=10,
    border=2
)
qr.add_data('{"batch":"BATCH-2024-001-A","qty":100,"date":"2024-01-15"}')
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save('qr_label.png')

4.4.2 用Python解析条码

解析我用 pyzbar 库。它底层调用了ZBar,识别率很高。

# 安装:pip install pyzbar pillow
from pyzbar.pyzbar import decode
from PIL import Image

# 解析一维码
img = Image.open('batch_label.png')
results = decode(img)
for result in results:
    print(f"条码类型: {result.type}")
    print(f"条码数据: {result.data.decode('utf-8')}")

# 解析二维码
img_qr = Image.open('qr_label.png')
results_qr = decode(img_qr)
for result in results_qr:
    print(f"二维码类型: {result.type}")
    print(f"二维码数据: {result.data.decode('utf-8')}")

实战经验:我在产线上遇到过一个问题——条码打印出来,扫描器就是读不出。排查了半天,发现是打印机的分辨率太低,条码的线条糊在一起了。后来我统一要求:条码打印分辨率不低于300 DPI。另外,条码周围的空白区(静区)一定要留够,至少是条码宽度的10倍。这个坑,我帮你们踩过了。

4.4.3 条码打印的硬件选型

打印机这块,我推荐 ZebraHoneywell 的工业级打印机。别图便宜买桌面级的,产线环境粉尘大、温度高,桌面级打印机撑不过三个月。

型号 类型 分辨率 适用场景
Zebra ZT411 工业级 300 DPI 产线标签、批次标签
Honeywell PX940 工业级 600 DPI 高精度标签、小尺寸标签
Zebra GK420d 桌面级 203 DPI 办公环境、少量打印

嗯,这里要提醒一句:打印机的 碳带和标签纸 要匹配。我见过有人用蜡基碳带打印需要耐刮的标签,结果一擦就花。正确做法是:需要耐刮、耐溶剂的,用树脂基碳带;一般场景,用混合基碳带就够了

4.5 知识体系总览

说了这么多,我画了一张图,把这一章的核心逻辑串起来。你一看就明白。

条码与RFID技术知识体系 物料标识技术 一维码 Code 128 / Code 39 信息量小,适合简单ID 二维码 QR Code / Data Matrix 信息量大,支持中文 RFID 被动式 / 主动式 批量读取,无需对准 实战:打印与解析 Python生成条码 Python解析条码 打印机选型 核心原则:唯一标识 + 可靠识读 + 环境适配 MES物料追踪与批次管理开发实战 · 第四章

这张图把一维码、二维码、RFID三者的关系,以及实战落地的路径,都画清楚了。你保存下来,以后做方案设计时可以参考。

最后说一句:条码和RFID,没有谁比谁更好。关键看场景。一维码便宜、简单,适合单品追踪。二维码信息量大,适合承载批次信息。RFID能批量读取,适合出入库和盘点。我见过很多项目,三种技术混着用,效果反而最好。

专注资料整理