引言
在某些行业的信息系统中,针式打印机仍然被广泛使用,主要是因为针式打印机能够一次打印多联纸张。有的业务为了实现机读或是增加内容的需要,使用二维条码。使用二维条码的好处是既能实现条码枪机读,又能在相同的面积下包含比直接打印字符更多的内容,不过在针式打印机无法被条码专用打印机取代的情况下直接使用针式打印机打印二维条码,会出现打印误差大导致识别率低、打印点密集导致纸张破损等问题。增大二维条码模块尺寸能改善识别率,却导致容量下降,失去容量优势,这些问题导致使用针式打印机的系统一直无法使用二维条码来提高性能。
1 二维条码的特点
在水平和垂直方向的三维空间存储信息的条码,称为二维条码。早期出现的二维条码属于线性堆叠式,就是把多个一维条码在纵向堆叠,这类二维条码比较典型的是PDF417码,如图1 所示。
PDF417 条码是由美国SYMBOL 公司发明的, PDF(Portable Data File) 意思是"便携数据文件"。组成条码的每一个条码字符由4 个条和4 个空共17 个模块构成,故称为PDF417 条码。PDF417 条码可表示数字、字母或二进制数据,也可表示汉字。一个PDF417 条码最多可容纳1850 个字符或1108 B 的二进制数据,如果只表示数字则可容纳2710 个数字。PDF417 的纠错能力分为9 级,级别越高,纠正能力越强。由于这种纠错功能,使得污损的417 条码也可以正确读出。我国目前己制定了PDF417 码的国家标准,标准号是GB/T 17172-1997。PDF417 条码需要有417 解码功能的条码阅读器才能识别。PDF417 条码最大的优势在于其庞大的数据容量和极强的纠错能力。当PDF417 条码用于防伪时,并不是PDF417 条码不能被复制,而是由于使用PDF417 条码可以将大量的数据快速读入计算机,使得大规模的防伪检验成为可能。
图1 PDF417 码图
后来出现了矩阵式二维条码,矩阵式二维条码在一个矩阵空间内通过黑白模块的不同分布进行编码,比较典型的是QR Code 码,如图2 所示。
QR Code 码是由日本Denso 公司于1994 年9 月研制的一种矩阵二维码符号,它除具有一维条码及其他二维条码所具有的信息容量大、可靠性高、可表示汉字及图像多种文字信息、保密防伪性强等优点外,还具有如下主要特点。
1)超高速识读。从QR Code 码的英文名称QuickResponse Code 可以看出,超高速识读特点是QR Code 码区别于417 条码、Data Matrix 等二维码的主要特性。由于在用电荷搞合元件(Charge-Coupled Device, CCD )识读QR Code 码时,整个QR Code 码符号中信息的读取是通过QR Code 码符号的位置探测图形,用硬件来实现,因此,信息识读过程所需时间很短,具有超高速识读特点。用CCD 二维条码识读设备,每秒可识读30 个含有1∞个字符的QR Code 码符号;对于含有相同数据信息的417 条码符号,每秒仅能识读3 个符号。QR Code 码的超高速识读特性是它能够广泛应用于工业自动化生产线管理等领域。
图2 QR Code 码图
2) 全方位识读。QR Code 码具有全方位(360度) 识读特点,这是QR Code 码优于行排式二维条码如417 条码的另一主要特点,由于417 条码是将一维条码符号在行排高度上的截短来实现的,因此,它很难实现全方位识读,其识读方位角仅为士100 。
3) 能够有效地表示中国汉字、日本汉字。由于QR Code码用特定的数据压缩模式表示中国汉字和日本汉字,它仅用13b可表示一个汉字;而417 条码、Data Martix 等二维码没有特定的汉字表示模式,因此仅用字节表示模式来表示汉字,在用字节模式表示汉字时,需用16 b( 两个字节)表示一个汉字。因此QR Code 码比其他的二维条码表示汉字的效率提高了20%。
QR Code 的编码字符集包括:
1)数字型数据(数字0-9) ;
2) 字母数字型数据(数字0-9; 大写字母A-Z;9 个其他字符:space ,$,%,*,+, ,1 ,:);
3)8 b 字节型数据;
4) 日本汉字字符;
5 中国扭字字符(GB 2312 对应的汉字和非汉字字符)。
QR Code 码数据表示方法为深色,模块表示二进制"1" ,浅色模块表示二进制0,通过掩膜,可以使符号中深色与浅色模块的比例接近1: 1 ,使因相邻模块的排列造成译码困难的可能性降为最小。QR Code 码分为40 个版本,从版本1 到版本40 ,版本l 是21 x21 模块,版本40 是177 x 177 模块,相邻的两个版本规格,高版本比低版本每边多4 个模块。QR Code码纠错能力分四个级别:分别是L 为7% 、M 为15% 、Q 为25% 、H 为30% 。关于QR Code 码符号结构,每个QRCode 码符号都是由正方形模块组成的一个正方形阵列,它由编码区域和功能图形组成。功能图形包括:寻像图形、分隔图形、定位图形和校正图形。QR Code 码编码过程的七个步骤为:数据分析、数据编码、纠错编码、构造最终信息、在矩阵中布置模块、掩膜、添加格式和版本信息。QR Code 码译码过程分为8 个步骤,如下:
1)定位并获取符号图像,深色浅色模块识别为0 、1 组成的阵列;
2) 识读格式信息:
3) 识读版本信息;
4) 消除掩膜;
5) 恢复数据和纠错码字;
6) 查错、纠错;
7) 按照模式指示符和字符计数指示符拆分、组合码字:
8) 根据模式译码,输出结果。
本文中讨论的二维条码主要指短阵式二维条码。二维条码有时也叫做二维条码符号或是二维条码图像,每个矩阵式二维条码的符号包含的最小单元是模块,二维条码符号都由若干模块组成,因为是正方形,所以水平和垂直方向的模块数是相同的,包含的模块数越多,符号的面积就越大,信息容量也越大。二维条码的标准里面对模块的绝对尺寸并不限制,只要打印和识别设备分辨率配套就可以,标准强调的是模块尺寸和由模块排列组合形成的二维条码点阵的相对尺寸和位置关系。例如图2 中QR Code 码图的左上角、右上角、左下角三个位置的方框形特征的图被称之为位置探测图形,每个位置探测图形可以看做是由3 个重叠的同心正方形组成,它们分别为7 x7 个深色模块、5 x5 个浅色模块和3 x3 个深色模块。如固3 所示,位置探测图形的模块宽度比为1: 1: 3: 1: 1 。在同一个二维条码符号中,任何组成部分都使用完全相同尺寸的模块拼接而成。
图3 位置探测图形模块分布
二维条码一般使用专用的条码打印机打印,使用条码枪阅读。常用的二维条码我国都有相应的国家标准, QR Code码全称叫做快速响应矩阵码,国家标准是GB/T 18284-2∞0。还有一种矩阵式二维条码名称叫做江信码,是由中国物品编码中心组织研发的国家"十五"重大科技专项,国家标准是GB/T 21049-2007 。汉信码按符号的规模分了84 个版本,从版本1 到84 ,与其他二维条码相比较,在压缩比率和汉字字库支持能力方面有优势,汉信码支持GB18030 字库。
2 针式打印机的特点
针式打印机包括打印头、色带盒和色带挡片。打印头由被称为针的金属棍组成,或者9 针(如9 针打印机)或者24 针(如M 针打印机)。9 针打印头具有一排垂直针,而24 针打印头有两排交错的针,每排12 根。如图4 所示,方向是从打印头背面向打印纸看过去。
针式打印机在打印时打印机控制电路通过控制线圈脉冲产生磁场推动打印针动作,打印针击打色带,在打印纸上打印出一个点。针式打印头由于固有的机械特性,使得使用针式打印机在打印点阵符号时,不能随意打印任意尺寸,只能根据针的尺寸选择符合的尺寸,针式打印机的分辨率特点如表1所示。
从上述特性能够看出,24 针打印机可以打印标准矩形二维码符号,9针无法打印,除非专门设计,因为9针不支持横向和纵向都相同的分辨率。所以使用针式打印机打印二维条码的话,只能选择使用24 针的180 x 180 dpi ,其他分辨率都不行,如果要支持的话开发工作量和成本将是24 针180 x180 dpi方式的2 -3 倍。
图4 针式打印机分辨率
表1 针式打印机分辨率
3 针打二维条码
在使用针式打印机打印二维条码时,工程师首先想到的是利用现有的条码生成软件输人待编码的数据后,生成一个二维条码图片,然后使用针式打印机打印输出。实际实验后发现,打印在纸张上的二维条码在识别时的成功率并不高,并且纸张有被打破的现象。分析原因后发现,现有的条码生成软件主要是针对条码专用打印机设计的,在二维条码符号的模块尺寸定义上依据的是条码专用打印机的分辨率,一般情况下,二维条码专用打印机的分辨率是200 dpi , 4 x4 个打印点组成一个二维条码符号的模块,点和点之间无缝连接。按这样的指标构建的二维条码符号,在使用针式打印机打印时会发生什么现象呢?以M 针打印机为例,分辨率是180 x180 dpi ,打印头的针和针之间有间隙,在打印200 dpi 分辨率的、点和点之间没有间隙的图像时,针式打印机会自动启动一种半点移动的打印处理方法,就是在同一个方向上,后面打印的一个点压前面打印的一个点的半个,以此类推,当打完一个完整的二维条码符号时,可想而知,纸会变成什么样子,同样的一个位置,最多会遭到针的三次敲击,联次越多,第一联纸受力就越大,破损也就越厉害。即使如此,纸的破损先不讨论,仅由分辨率和打印头的不同所带来的尺寸误差,反映在打印出来的二维条码符号上,就使得原来生成的二维条码符号,在打印这个环节,引入了不小的误差。尺寸的误差加上纸破损带来的变形,二者叠加,使得大部分打印出来的二维条码都无法识别。
针对这些原因,工程师又尝试通过修改生成软件的参数,将模块的尺寸调大,使用3 x3、4 x4 或是更多的点来构建一个模块,这样生成的二维条码符号面积很大,倒是可以识别了,打印机也不会半点移动了,但受纸张面积限制,当总面积还是原来那么大时,二维条码里面能包含的内容却变得极少了,比在同样面积上直接打印字符多不了多少,没什么使用价值,发挥不了二维条码的优势。分析原因发现,虽然模块的尺寸放大了,但是因为是使用的现有的条码生成软件,那么其最基本的分辨率尺寸依然是依据条码打印机,这样在增大模块尺寸时,翻转的也是这个分辨率的倍数,使用针式打印机打印时,虽然因为模块做大解决了不能识别和纸张破损的问题,但因为缺乏精确的针对针式打印机的计算,使得没有把针式打印机的分辨率发挥到最佳,浪费了不少打印尺寸和空间,最终造成这种打印方式打印出的二维条码信息容量低,失去实用价值。
综合前面两方面的改进办法,实施起来互相矛盾,解决一个问题的同时又会产生另外一个问题,这样综合考虑,仍然不具备实用性。从根本上分析,要想使用针式打印机打印二维条码,还得在根本上从最初的二维条码符号生成阶段就依据针式打印机的尺寸和结构特点来设计二维条码图像,只有这样,才能最大限度上保证针式打印机在打印二维条码固像时不会破坏二维条码符号的尺寸设计。
在依据针式打印机设计和打印二维条码符号方面,有的工程师提出过这样一种方案,思路是二维条码的模块尺寸按照1/180 in(1in = 25.4 mm) 的倍数设计,对于9 针针式打印机按照1/180 in 的5 的倍数设计,打印时横向出针打印第一个位点后,打印第二个位点的中心到第一个位点的中心的距离是1/180 in ,纵向打印第二个位点到第一个位点的中心距离是1/180 in ,以打印第一个位点的中心为0 点,在其横向5 x 1/180 in的距离打印第三个位点,打印第四个位点的中心到第三个位点中心的距离是1/180 in ,以打印第一个位点的中心为O 点,在其纵向5 x 1/180 in 的距离打印第三个位点,打印第四个位点的中心到第三个位点中心的距离是1/180 in ,每一个模块由2x2 个位点组成,以此类推,组成一个矩阵式的二维条码符号。
对于24 针针式打印机按照1/180 in 的5的倍数设计,打印时横向出针打印第一个位点后,打印第二个位点的中心到第一个位点的中心的距离是1/180 in ,打印第三个位点的中心到第二个位点的中心的距离是1/180 in ,纵向出针打印第二个位点到第一个位点的中心距离是1/180 in,打印第三个位点的中心到第二个位点的中心的距离是1/180 in ,以打印第一个位点的中心为0 点,在其横向5 x1/180 in的距离打印第四个位点,打印第五个位点的中心到第四个位点中心的距离是1/180 in ,打印第六个位点的中心到第五个位点中心的距离是1/180 in ,以打印第一个位点的中心为0 点,在其纵向5 x 1/180 Ïn 的距离打印第四个位点,打印第五个位点的中心到第四个位点中心的距离是1/180 in ,打印第六个位点的中心到第五个位点中心的距离是1/180 in ,每一个模块由3 x3 个位点组成,以此类推,组成一个矩阵式的二维条码符号。这样的改进思路,简而言之就是二维条码的模块尺寸按照180 dpi的尺寸来设计,用5 x5 个点来柑建一个模块,打印时根据打印机不同实际打印其中的2 x2 或是3 x3个点,空出余下的点。这样的思路能保证打印效果良好能识别,但是因为每个模块尺寸太大,当总面积相对固定时,二维码的信息容量太小;同时虽然因为有空点,纸张不会打得很烂,有改善,但因为点和点存在重叠和相邻,纸张还是会有一定程度的破坏,如果需要长期保存的话,还是会随着时间的推移发生变化而导致不能识别。
通过前面的分析介绍,对二维条码使用针式打印机打印的特点有了一定的认识,概括存在的问题,大概有以下几点。首先,由于表示"1" 的模块都需要密集地打印2 x2 或者3 x3 个点,因此在打印过程中,纸张容易被打穿的几率较高,致使纸张上的信息无法被识别的几率较高。
其次,由于现有的打印方法为了便于识别,需要留有大量的空白,如需要5 x5 个点表示一个模块,其中9 针打印机只使用了其中的4 个点打印有效信息而浪费掉21 个点, 24 针打印机只需要9 个点打印有效信息而、浪费掉16 个点,因此浪费了大量的空间以便区分各个模块,这样大量的空白减少了在同等打印面积下二维条码的容量,无法在数据量大而打印面积有限的情况下使用。
通过分析,提出这样一种设计思路,使用四个打印点表示一个模块,掏建矩阵式二维条码,其中四个打印点相互间隔一个打印点。通过使用间隔的方式打印表示二进制逻辑"1" 的矩阵式二维条码模块,可以有效地避免在使用针式打印机进行二维条码打印时出现纸张被打烂的情况,使得其能用于大量的多联纸张二维条码应用,同时提高了单位面积的信息容量,克服了现有技术中的问题。通过四个点表示一个"1" 模块,由于每个打印点之间有足够的空隙,完全避免了纸张在打印过程中被打穿的情况,而分散的四个打印点形成一个较大的识别区域,也较容易识别。
从二维条码的特点上说,生成、打印、识读是三位一体配套的,同一个厂家的配套设备配合是最好的,不同厂家交叉的话,会有一些异常情况出现。专用的条码打印机,一般是每毫米8 个点的分辨率,在打印二维条码时一般采取打印3 x3 或4x4 个点的方式来凑成一个模块,这种模块的尺寸是边长0.5mm或0.6 阻。而针式打印机的特点是每毫米3 个点,点的尺寸是0.3 阳,一个点不够, 3 个或4 个点又太大,所以针打在打印适合专用条码打印机打印的二维条码符号时,在打印环节就已经造成了不小的误差;同时为了对图形,针式打印机的驱动程序利用打印头位移的办法密集打印,使得纸张变形得很厉害,不利于保存。
从针式打印机的特点出发,不管是汉信码或是QR Code码,还可以用针的直径也就是0.3 皿对应的一个点做一个模块,为了精确识别,一般会用4 倍以上的分辨率读图,相当于扫描仪设置为300 dpi 或者用50 万像素摄像头拍符号,这样一个针点会得到4 x4 的数据矩阵作分析。从设计开发的角度讲,按照二维条码生成、打印、识别三个环节来分别开展的话,可以分成3 个步骤。
1)把数据编码,生成一个以针打的、针直径为模块尺寸的二维条码符号图形。这个图形同时也包含了针式打印机打印时所需要的内容数据包,对于针式打印机来说,重用的是这个数据包,图形只是用来看的,数据包可以自己定义一个结掏,也可以在打印时从固里面提取。
2) 把数据包使用针式打印机的打点阵命令,按照针式打印机的特点在固定的行、列坐标上打印出来,形成一个点阵,模块排列整齐并且有间隙,对纸张的影响和原来打文字一样,不会有破坏。
3) 按合适的分辨率获取二维条码图像,再按照排列的尺寸坐标获取分析数据,然后按约定的解码算法解码。
4 结语
本文针对使用针式打印机的场合,深入分析二维条码和针式打印机的特点,结合同领域内技术人员提出的思路的优势和不足,对目前存在的针式打印机打印二维码的问题做了逐一整理分析井提出了切实可行的解决思路,解决了针式打印机打印二维条码时普遍存在的信息容量低、识别率低、纸张破损这三个主要问题,使得针式打印机打印二维条码具备了实用价值,方便了相关系统的推广。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文标题:基于针式打印机的二维条码