PDF417二维条码在嵌入式设备中的应用
摘要:介绍PDF417二维条码的编码、译码及纠错的原理,并分析其在嵌入式设备上的软硬件实现。其中译码部分是使用Symbol公司生产的SE923HS型号的扫描头,编码部分是用软件来实现的。
关键词:PDF417 二维条码编码译码 嵌入式设备
引 言
二维条码是不依赖计算机网络和数据库存储、转移信息的一种方法,是信息的另一种表示形式,是信息携带、信息自动传递、信息防伪的理想手段。四一七条码是应用最为成功的一种二维条码,它的出现是条码技术的一次革新。它以其高密度、高信息容量、纠错能力强、成本低等特点,广泛应用于国际贸易、物流、工业、商业等领域,已经取得了巨大的社会效益和经济效益。由于二维条码的编码和译码算法相对比较复杂,大部分应用是用台式机打印出条码,再通过扫描枪进行解码,通过RS232串口输出数据;而在嵌入式设备上,对数据进行二维条码数据加密并不多见。本文提出一种在嵌入式设备上利用Symbol公司生产的SE923HS型号的扫描头解码数据,解码后的数据和其它数据混合重新编码的解决方案,可以适用于邮政、物流等行业。
javascript:window.open(this.src);" style="cursor:pointer;"/>
1 二维条码
1.1 二维条码的特性javascript:window.open(this.src);" style="cursor:pointer;"/>
PDF417二维条码具有信息容量大、信息密度高、修正错误能力强、译码可靠性高、保密性强和容易印制等特点。
四一七条码的基本特性如图1所示。一个PDF417条码符号,可以将最多1848个字母字符或2729个数字字符或字母、数字混编字符进行编码。按照ISO标准的证卡格式,当PDF417条码的窄条(模)宽为0.17mm 时,使用PDF417条码表卡片上所含的信息,条码符号(包括周围的白区)所占面积仅为76mm×25mm。PDF417采用了目前世界上最先进的错误修正技术。这种隐含子符号内的错误修正技术,不仅可以有效地防止译码错误,提高译码的速度及可靠性,而且可以将由于条码符号破损、沾污等丢失的信息破译出来。错误修正可分为八个等级,错误修正为最高时,可以将符号受损面积达50%的条码符号所含信息复现出来;PDF417可以把编码信息按密码格式进行编码,以防止伪造条码符号或非法使用有关编码的信息。因此,可以将数据量不大但非常重要的信息按照某种二维条码的格式进行编码。
本文是将二维条码用在物品投递过程中,即把物品的信息(如寄信人地址、姓名、身份证号,收信人地址、姓名、身份证号以及邮资等信息)制成二维条码,打印出来贴在物品上,以便传递信息。通过掌上嵌入式的条码识读设备,对条码进行译码。在掌上嵌入式设备工作过程中,译码的信息可以和其它输入的信息重新编码,完成对数据再加密的过程。
1.2 PDF417条码的结构
四一七条码符号是一个多行结构。符号的顶部和底部为空白区。上下空白区之间为多行结构。每行数据符号字符数相同,行与行左右对齐直接衔接。其最小行数为3,最大行数为90,见图1。每行构成如下:
a) 左空白区;b)起始符;c) 左行指示符号字符;d) 1~30个数据符号字符;e)右行指示符号字符;f) 终止符;g)右空白区。
javascript:window.open(this.src);" style="cursor:pointer;"/>
1.3 PDF417条码的模式结构
四一七条码在编码时,首先对未编码数据进行压缩。四一七条码有三种数据压缩模式:文本压缩模式(TC)、字节压缩模式(BC)、数字压缩模式(NC)。每种模式结构对应不同的算法,通过应用模式锁定/转移(latch/shift)码字,可在一个四一七条码符号中应用一种或者多种模式表示数据。图2为四一七条码的模式切换图,其中900、901/924、902分别对应TC、BC和NC的压缩模式,913为Latch/shift码字。
1.4 PDF417条码的错误纠正等级
四一七条码的错误纠正等级可由用户选择。每种错误纠正等级所对应的错误纠正码字数目为2的纠正等级次方。对于开放式系统,不同数量的编码数据所对应的错误纠正等级推荐值见表1。
表1 四一七条码的推荐错误纠正等级
数据码字数 | 错误纠正等级 |
1~40 | 2 |
40~160 | 3 |
161~320 | 4 |
321~863 | 5 |
在四一七条码符号容易损坏的场所,建议选用较高的错误纠正等级;在封闭系统中,可选用低于推荐错误纠正等级的错误纠正等级。
2 硬件设计javascript:window.open(this.src);" style="cursor:pointer;"/>
2.1 硬件总体结构[1]
物流信息采集终端设计方案的结构框图如图3所示。设计方案的主要组成部分包括微处理器、扫描头接口模块(SE923HS)、液晶显示及触摸模块以及外部的32KB RAM,还有电源模块和微处理器监控模块等其它模块。
2.2 SE923HS扫描头及其接口设计[2]
扫描头的主要功能是读出二维条码上的信息;在读出信息的同时,完成一定的解码和纠错功能。本课题采用SE923HS型号的扫描头。它是Symbol公司生产的微型条码读入设备,可以对UPC/EAN、CODE128、CODE39和PDF417等条码进行译码。它能嵌入到用户的设备中,完成数据采集的功能。SE923HS大小约为3cm3,通过12根引线和外界相连。表2给出了SE923HS的引脚说明。
根据表2给出的接口说明,设计了SE923HS与微控制器的硬件接口,如图4所示。
表2 SE923H的引脚说明
引 脚 | 引脚号 | 类 型 | 功 能 解 释 |
FLASH_DWN | 1 | I | 写SE923HS的Flash-ROM |
VBATT | 2 | I | Power Supply:为SE923HS提供工作电压 |
GND | 3 | I | Ground:地线 |
RXD | 4 | I | Received Data:串行输入口 |
CTS | 6 | I | Clear to Send:串口握手线 |
AIM/WKUP | 11 | I | Wake Up:用持续1μs的低电平唤醒低电模式的SE923HS |
TRIG | 12 | I | Trigger:硬件触发线,使SE923HS进入扫描和译码 |
TXD | 5 | O | Transmitted Data:串口输出口 |
RTS | 7 | O | Request to Send:串口输出口 |
PWRDWN | 8 | O | Power Down Ready:高电平,表示Decoder处于掉电模式 |
BPR | 9 | O | Beeper:低电流Beeper输出 |
DLED | 10 | O | Decode LED:电流LED输出 |
3 译码和编码的实现