专利名称:条形码读取器,条形码读取方法和计算机可读介质的制作方法
技术领域:
本发明涉及一种条形码读取器和适用于读取通过在两列内设置条形码而构成的两列条形码的条形码读取方法,以及用于存储这种读取处理的程序的计算机可读介质。
近年来,通过条形码管理商品已经普及,其中有代表性的是在销售行业中的POS系统。例如,在商店的POS系统中,关于商品的种类和销售价格的信息被以条形码的形式编码并印在商品上。条形码被在柜台读取,并根据读取的信息进行支付。然后,售出商品的数量被实时地统计,并把统计结果用于库存管理和采购管理。
上述条形码大致分为WPC码例如JAN码,UPC码例如EAN码,以及可变长度的第二码。在这些码当中,WPC码具有附加于其左端的开始保护条(SGB),插在其中部的中心条(CB),以及附加于其右端的终止保护条(EGB)。由6个或4个数据字符构成的左(第一)数据块被提供在开始保护条和中心条之间,由6个或4个数据字符构成的右(第二)数据块被提供在中心条和终止保护条之间。
这些保护条和中心条的图形按照规范被预先确定,因此条形码读取器便能够检测这些保护条和中心条。
此外,条形码读取器能够根据保护条和中心条读取条形码的数据字符(编码的数值或符号的最小单位)。有3种读取方法,即连续读取法,块读取法和分割读取法。连续读取法是这样的,当由一个条形码扫描处理检测到两个保护条和中心条时,插在两个保护条之间的数据字符便被解调为一个条形码。块读取法是这样的,虽然数据字符块被插在一个保护条和中心条之间,但数据字符块作为条形码被识别,并且在分别解调两个块之后,这些各个块的解调数据被合成(综合),借以再现被调制成一个条形码的数据。此外,按照分割读取法,即使数据字符串和一个保护条或中心条相邻,但以最小单位作为条形码被识别,并且已被分别读出的那些数据字符的解调数据段被合成,借以再现相应于整个单一条形码的解调数据。即块读取法和分割读取法是在这样的情况下执行的,其中从开始保护条到终止保护条范围内的整个条形码不能通过一次扫描处理读取。
附带说明,WPC码因为是长度固定的码,在可表示的信息的数量方面有其固有的限制。因而,为了增加可表示信息的数量,同时又保持WPC码的编码系统,至今一直采用一种方法,其中WPC码排列成两列(级),并作为一组条形码处理,并且由设置在两列中的条形码表示一个信息片(以后称为“两列条形码”)。图15表示上述两列条形码的大致结构。由图15可见,两列条形码由4块(A-D)构成。
在这种情况下,在左数据块(A,C)中设置表示上级和下级的识别标记,因而条形码读取器能够识别是上级块还是下级块。然而,不在右数据块(B,D)中设置这种识别标记,因此,条形码读取器只从相应于右数据块的解调数据不能识别上级块和下级块。相应地,如果由上述的块读取法获得的解调数据也作为有效数据处理,则在这样的情况下,即上级的条形码由通过读取上级的左数据块(A)而获得的解调数据(1)和通过读取下级的右数据块(D)而获得的解调数据(4)构成时,条形码读取器可能误识别数据。类似地,在这样的情况下,即下级的条形码由通过读取下级的左数据块(C)而获得的解调数据(3)和通过读取上级的右数据块(B)而获得的解调数据(2)构成时,条形码读取器可能误识别数据。即在整个两列条形码中可以有上下级的右左数据块的两个组合,然而,条形码读取器不能识别这些组合中的正确的组合。那么,如果模数10检查关于上下级的每个条形码偶尔为OK,则条形码读取器可能作出误判断,尽管相应于两列条形码的解调数据没有再现,也认为解调已经完成。
因此,现有技术的条形码读取器通过连续读取法而获得解调数据((5),(6))作为有效数据,并且只根据通过分别连续读取上级条形码和下级条形码而获得的解调数据再现相应于整个两列条形码的解调数据。
构成两列条形码的各个条形码具有在垂直方向上具有小的高度的截断标志(truncate lable),因此扫描光束通过每个条形码不停地从一端到另一端扫描的可能性极小。因而,需要长的时间才能获得基于连续读取法的解调数据,并且最后需要长的时间才能再现相应于整个两列条形码的解调数据。
本发明的主要目的在于提供一种条形码读取器,其能够精确地合成通过块读第二数据块而获得的解调数据和通过块读两列条形码的每级的左数据块而获得的解调数据,因此能够在短时间内再现相应于整个两列条形码的解调数据。
为完成上述目的,按照本发明的第一方面,条形码读取器包括条形码图形检测单元,用于扫描由第一条形码和第二条形码构成的两列条形码,所述每个条形码包括左数据块和第二数据块,所述每个数据块含有预定数量的数据字符,并检测在扫描路径上的条形码图形;解调单元,用于通过解调所述条形码图形检测单元检测的条形码图形而获得解调数据;第一缓冲器,用于当由所述解调单元获得的解调数据含有相应于第一条形码的左数据块的部分时存储解调数据;第二缓冲器,用于当由所述解调单元获得的解调数据含有相应于第二条形码的左数据块的部分时存储解调数据;第三缓冲器,用于当由所述解调单元获得的解调数据含有相应于第一条形码或第二条形码的第二数据块的部分时存储解调数据;第一合成单元,用于合成存储在所述第一缓冲器中的解调数据和存储在所述第三缓冲器中的解调数据;第二合成单元,用于合成存储在所述第二缓冲器中的解调数据和存储在所述第三缓冲器中的解调数据;以及确认单元,用于只有在存储在所述第一缓冲器中的解调数据和存储在所述第二缓冲器中的解调数据含有相应于第二数据块的数据字符的部分以及相应于两个解调数据的第二数据块的数据字符的部分彼此不同时,由所述第一合成单元作为相应于第一条形码的解调数据而合成解调数据,并确认由所述第二合成单元作为相应于第二条形码的解调数据而合成解调数据。
利用这种结构,条形码图形检测单元根据扫描两列条形码的路径检测条形码图形。然后,解调单元解调由条形码图形检测单元按顺序检测的条形码图形,并输出解调数据。这一组解调数据当含有相应于第一条形码的左数据块部分时被存储在第一缓冲器中,当含有相应于第二条形码的左数据块部分时被存储在第二缓冲器中。当含有相应于任何一列的第二数据块部分时,解调数据被存储在第三缓冲器中。然后,第一合成单元合成存储在第一缓冲器中的解调数据和存储在第三缓冲器中的解调数据。第二合成单元合成存储在第二缓冲器中的解调数据和存储在第三缓冲器中的解调数据。只有在存储在所述第一缓冲器中的解调数据和存储在所述第二缓冲器中的解调数据含有相应于第二数据块的数据字符的部分以及相应于每组解调数据的第二数据块的数据字符的部分彼此不同时,确认单元确认由第一合成单元合成的解调数据作为相应于第一条形码的解调数据,并确认由第二合成单元合成的解调数据作为相应于第二条形码的解调数据。因而,如果存储在第一缓冲器中或存储在第二缓冲器中的解调数据不含有相应于第二数据块的数据字符的部分,并且如果相应于包含在各组解调数据中的第二数据块中的数据字符的部分彼此相同时,才可能不能精确地合成相应于条形码的解调数据,因而确认单元不执行上述的确认。当进行两列条形码的分割读取处理时误读的可能性被避免了。
在按照本发明的第二方面的条形码读取器中,条形码是WPC码,UPC/A码,JAN码或EAN码。
在按照本发明的第三方面的条形码读取器中,第一合成单元只有在存储在第一缓冲器中的解调数据和存储在第三缓冲器中的解调数据彼此重叠两个或多个字符时才合成解调数据的这些片。第二合成单元只有在存储在二缓冲器中的解调数据和存储在第三缓冲器中的解调数据彼此重叠两个或多个字符时才合成解调数据的这些片。
在按照本发明的第四方面的条形码读取器中,只有在存储在所述第一缓冲器中的解调数据和存储在所述第二缓冲器中的解调数据含有相应于两个或多个第二数据块的数据字符的部分时,确认单元才确认由所述第一合成单元获得的解调数据作为相应于第一条形码的解调数据,并确认由所述第二合成单元获得的解调数据作为相应于第二条形码的解调数据。利用这种结构,可以确保在第二数据块中要被合成的解调数据彼此重叠两个或多个字符,借以进一步减少在合成解调数据时的错误。
在按照本发明的第五方面的条形码读取器中,在存储在所述第一缓冲器中的解调数据相应于第一条形码以及存储在所述第二缓冲器中的解调数据相应于第二条形码时,确认单元确认存储在所述第一缓冲器中的解调数据作为相应于第一条形码的解调数据,并确认存储在所述第二缓冲器中的解调数据作为相应于第二条形码的解调数据,利用这种结构,当获得基于连续读取处理的解调数据时,解调数据便立即被确认,因而进一步增强了读取条形码的响应。
按照本发明的条形码读取方法包括扫描包含第一条形码和第二条形码的两列条形码的步骤,所述条形码的每一个含有左数据块和第二数据块,所述数据块的每一个含有预定数量的数据字符,并检测扫描路径上的条形码图形;通过解调条形码图形而获得解调数据的步骤;通过合成含有相应于第一条形码的左数据块的部分的解调数据和含有相应于第一条形码或第二条形码的的右数据块的部分的解调数据而产生相应于第一条形码的解调数据的步骤;通过合成含有相应于第二条形码的左数据块的部分的解调数据和含有相应于第一条形码或第二条形码的的第二数据块的部分的解调数据而产生相应于第二条形码的解调数据的步骤;以及只有在含有相应于第一条形码的左数据块的部分的解调数据和含有相应于第二条形码的左数据块的部分的解调数据含有相应于第二数据块的数据字符的部分以及相应于两个解调数据的第二数据块的数据字符的部分彼此不同时,确认相应于第一条形码的解调数据,并确认相应于第二条形码的解调数据的步骤。
按照本发明的一种计算机可读介质,用于存储用于和用于扫描含有第一条形码和第二条形码的两列条形码的检测装置相连的计算机的程序,所述每个条形码含有左数据块和第二数据块,所述每个数据块含有预定数量的数据字符,所述检测装置还用于检测在扫描路径上的条形码图形,所述程序使计算机执行通过解调由所述检测装置检测到的条形码而获得解调数据的步骤;通过合成含有相应于第一条形码的左数据块的部分的解调数据和含有相应于第一条形码或第二条形码的的右数据块的部分的解调数据而产生相应于第一条形码的解调数据的步骤;通过合成含有相应于第二条形码的左数据块的部分的解调数据和含有相应于第一条形码或第二条形码的的第二数据块的部分的解调数据而产生相应于第二条形码的解调数据的步骤;以及只有在含有相应于第一条形码的左数据块的部分的解调数据和含有相应于第二条形码的左数据块的部分的解调数据含有相应于第二数据块的数据字符的部分以及相应于两个解调数据的第二数据块的数据字符的部分彼此不同时,确认相应于第一条形码的解调数据,并确认相应于第二条形码的解调数据的步骤。
下面参照附图详细说明本发明,其中图1是表示在本发明的一个实施例中的条形码读取器的方块图;图2表示图1中的Ig-up缓冲器和Ig-down缓冲器的结构;图3表示图1中的M10-buff-up缓冲器和M10-buff-down缓冲器的结构;图4是一个在图1中由CPU执行的条形码识别/解调处理程序的流程图;图5是一个在图1中由CPU执行的条形码识别/解调处理程序的流程图;图6是一个在图4中步S002执行的数据解调处理的流程图;图7是一个在图4中步S002执行的数据解调处理的流程图;图8是一个在图4中步S002执行的数据解调处理的流程图;图9表示两列条形码的结构;图10表示WPC码的字符结构;图11是表示数值数据和条形码的组合与各个字符之间的相关性的表;图12是表示在左数据块中的奇数和偶数奇偶校验与标记字符之间的相关性;图13表可以进行连续读取处理时的扫描光束的角度;图14表可以进行块读取处理时的扫描光束的角度;以及图15是表示在现有技术中两列条形码是如何被读取的例图。
下面参照
本发明的实施例。
首先参照附图9说明要被本发明实施例中的条形码读取器读取的两级条形码的结构。如图9所示,两级条形码被这样构成,使得两个条形码上下平行设置(WPC码)。这样,每级条形码(WPC码)包括在其右边的由固定图形的条构成的开始保护条(SGB),由以固定图形以类似方式形成的条构成的中心条(CB),以及由以固定图形以类似方式形成的条构成的终止保护条(EGB)。这样,WPC码具有包括在开始保护条(SGB)和终止保护条(EGB)之间的6个数据字符片(C1-C6)的左数据块,和在中心条(CB)和终止保护条(EGB)之间的6个数据字符片(C7-C12)的右数据块,
如图10所示,每个数据字符(C1-C12)是两个白条和两个黑条的组合,它们通过分别分配7个模数(每个模数具有一个单位长度)为白或黑而形成。那么,在构成左数据块的各个数据字符(C1-C6)中,构成每个数据字符的4个条从开始保护条(SGB)按照白黑白黑的顺序排列。在构成右数据块的各个数据字符(C7-C12)中,构成每个数据字符的4个条从中心条(CB)按照黑白黑白的顺序排列。
图11是表示由数据字符的各个条(a,b,c,d)可取的长度(模数数)的所有的组合的一个表,并表示相应于各个组合的数值数据。注意在数值数据中的“E-”代表偶数奇偶校验字符,“O-”代表奇数奇偶校验字符。此外,T2代表通过把每个字符的最后条(d)加到其紧挨的前一条(c)而获得的长度,T1代通过把后条(c)加到其紧挨的前一条(b)而获得的长度。这两个长度被称为“δ距离”。
按照WPC码的规则,右数据块只包括奇数奇偶校验数据字符,左数据块包括偶数和奇数奇偶校验数据字符。不过,按照WPC码的规则,可以由左数据块的6个数据字符进行的偶数和奇数奇偶校验的组合被限制于图12所示的10种方法。这样,唯一的数值(0-9),即标记字符则分别相对于这些组合被定义。在标记字符也被包含在数字数中的情况下,由12个数据字符构成的WPC码(WPC/A码,JAN-13码,和EAN码)被称为“13数字条形码”。注意,标记字符被用于识别两级条形码中的上下级。即标记字符和第一字符的组合被称为“识别标记”。如果“识别标记”是一个特定的数值(例如21),则表示上级条形码。如果“识别标记”是另一个特定的数值(例如29),则表示下级条形码。附带说明,如图12所示,由左数据块的6个数据字符进行的偶数和奇数奇偶校验的组合和所有其它组合比较时,在偶数和奇数校验中具有两个或多个不同。
此外,按照WPC码的规则,如果包含在13数字条形码中的12个数据字符按顺序被分成偶数或奇数位置,其中最右字符被定义为奇数位置(标记字符被归类于奇数位置),则在奇数位置中的数据字符的数值的总和的3倍和在偶数位置中的数据字符的数值的总和的和是10的整数倍。如果利用这个规则,便可以容易地证实是否再现相应于整个条形码的解调数据。这种证实被称为“模数10检查”。
参照图1,条形码读取器具有CPU1,条宽度数据设置存储缓冲器2,控制电路3,接口电路4,ROM5,解调数据暂存缓冲器6和解调数据存储缓冲器7,它们通过总线彼此相连,条宽计数器16和与条宽度数据设置存储缓冲器2相连的激光束开始/结束检测电路17,时钟19和与宽度计数器16相连的A/D转换器15,和A/D转换器15相连的光接收元件18,电机驱动电路8,激光驱动电路9,扬声器10,以及和控制电路3相连的LED,和电机驱动电路8相连的电机,由电机12驱动的扫描光学系统14,以及和激光驱动电路9相连的半导体激光器13。
ROM5是只读存储器,用于作为计算机可读介质存储条形码识别/解调处理程序。
被称为计算机的CPU1执行存储在ROM5中的条形码识别/解调处理程序,借以控制整个条形码读取器。CPU1还作为解调单元,第一合成单元,第二合成单元,和确认单元,并通过读取两级条形码21的每级的条形码而获得的每组条宽度数据再现相应于整个两级条形码21的数据。
在解调数据暂存缓冲器RAM6中提供有CPU1的操作区域,和解调数据暂存缓冲器6a,Ig-up缓冲器6b,Ig-down缓冲器6c,M10-buff-up缓冲器6d,和M10-buff-down缓冲器6e,由CPU1执行上述的条形码识别/解调处理程序。
接口电路4控制总线B的状态并控制向外部装置的数据传输。
控制电路3控制电机驱动电路8,激光驱动电路9,扬声器10,和发光二极管(LED)11。电机驱动电路8驱动电机12,从而使构成扫描光学系统14的多边镜(未示出)转动。此外,激光驱动电路9驱动半导体激光器13发出激光束L。此外,扬声器10发出表示条形码读取(解调)完成的声音。发光二极管11是用于显示数据的显示元件,例如显示商品20的销售价格,其是作为条形码的解调结果而获得的。
从半导体激光器13发出的激光束L入射到扫描光学系统14,并被其偏转。更详细地说,扫描光学系统14通过使用由电机12转动的多边镜(未示出)使激光束L沿一个方向偏转。一组固定镜被固定在多边镜的相对侧。因而,由多边镜偏转的激光束L沿不同方向由各个固定镜再反射。结果,激光束L的偏转方向(即扫描方向)改变为不同的方向。在由多边镜的一个反射表面偏转的期间内,扫描光学系统14沿多个方向进行连续的高速扫描。在由多边镜的一个反射表面偏转的期间内进行的多个激光束扫描的每一个扫描以后被称为“一次扫描”。
当这样扫描的激光束L碰到商品20的表面(含有两列条形码21)时,激光束L被从表面进行不规则的反射,一些反射光束R被光接收元件(是一种光二极管)18接收。光接收元件输出相应于接收到的反射光束R的亮度和暗度的电流。A/D转换器15比较由光接收元件18输出的电流和预定的门限值,并把电流转换为二进制信号。当反射光束R的强度相应于两级条形码21中的黑条的反射率时,二进制信号指示“H”电平,当反射光束R的强度相应于两级条形码21中的白条的反射率时,二进制信号指示“L”电平。
条宽度计数器16测量从二进制信号上升时刻到其下降时刻之间的时间间隔(这应该相应于在两级条形码21中的黑条的宽度)。条宽度计数器16还测量从二进制信号下降时刻到其上升时刻之间的时间间隔(这应该相应于在两级条形码21中的白条的宽度)。注意,条宽度计数器16计数从时钟19输入的时钟的数量,用于测量相应于每个条宽的时间。从条宽计数器16输出的各个条的读出的数据呈这样的形式,使得计数值和表示白或黑的颜色识别信号相结合。每当激光束扫描一次,条宽计数器16连续地输出读数据。这样在每次扫描期间连续输出的一系列的读数据被称为“条宽数据组”。
上述的控制单元电路3,电机驱动电路8,电机12,激光驱动电路9,半导体激光器13,扫描光学系统14,光接收元件18,A/D转换器15,条宽计数器16和时钟19相当于条形码图形检测单元,用于通过扫描包括两级WPC码的两级条形码21检测在扫描路径上的条形码图形。
从条宽计数器16输出的条宽数据组被输入到激光束开始/结束检测电路17。激光束开始/结束检测电路17检测条宽数据组的状态,并检测一个激光束扫描的开始时刻和结束时刻。然后,激光束开始/结束检测电路17把条宽数据组加到表示开始时刻和结束时刻的数据片上。
条宽数据组存储缓冲器2暂时存储加上激光束的开始时刻和结束时刻的条宽数据组。条宽数据组存储缓冲器2按顺序存储从条宽计数器16输入的条宽数据组,并响应来自CPU1的请求按照数据组原来存储的顺序一片一片地传递条宽数据组。
右数据块暂存缓冲器6a,Ig-up缓冲器6b,和Ig-down缓冲器6c属于缓冲器类,用于暂时存储作为对条宽数据组执行解调处理的结果而获得的解调数据。更详细地说,右数据块暂存缓冲器6a是一种暂存缓冲器(相应于第三缓冲器),用于相应于右数据块的解调数据。此外,Ig-up缓冲器6b是一种暂存缓冲器(相应于第一缓冲器),用于含有相应于上级条形码(第一级WPC码)的左数据块的区域的解调数据。如图2所示,Ig-up缓冲器6b具有地址为0-11的12个项,并用项0-5存储相应于左数据块的数据,用项6-11存储相应于右数据块的数据。类似地,Ig-down缓冲器6c是一种暂存缓冲器(相应于第二缓冲器),用于含有相应于下级条形码(第二级WPC码)的左数据块的区域的解调数据。并具有如图2所示的结构。此外,M10-buff-up缓冲器6d存储相应于整个上级条形码的其中上述的模数10检查的结果为OK的解调数据(在其头部含有标记字符),并且,如图3所示,具有地址为0-12的13项。类似地,M10-buff-down缓冲器6e存储相应于整个下级条形码的其中上述的模数10检查的结果为OK的解调数据(在其头部含有标记字符),并且,其结构如图3所示。
下面参照图4-8说明存储在ROM5中的并由CPU1执行的条形码识别/解调处理程序。
图4,5的流程图是条形码识别/解调处理的主程序,由接通条形码读取器和存储条宽数据组的条宽数据组存储缓冲器2的主电源开始。然后,在第一步S001,CPU1从条宽数据组存储缓冲器2中取出一个最早的条宽数据组。
在步S002,CPU1对在步S001中取出的条宽数据细执行数据解调处理(相应于解调单元)。图6-8是表示在步S001执行的数据解调处理子程序的流程图。在这子程序的第一步S101,CPU1检查要被处理的条宽数据组是否包括开始保护条。如果是,CPU1就前进到S102。在步S102-S135的处理是用于解调从开始保护条到一个能够被调制的限度的字符的处理。
在步S102,CPU1检查第一个字符(其在朝向中心条的一侧和开始条相邻)的长度。更详细地说,CPU1检查形成第一字符的4个条的宽度计数值的总和是否在一个固定值附近。然后,如果第一字符的长度不在固定值附近(S103),则CPU1把该数据组设想为基于不同于该条形码的图形的数据组,在步S136复位“解调完成标记”,并结束这一子程序。与此相反,如果第一字符的长度在固定值附近(S103),则CPU1进行S104的处理。
在步S104,CPU1检查下一个字符(它被定义为和在初始状态下的第一个字符相邻的第二字符)的长度。然后,如果这一字符的长度不在固定值附近(S105),则CPU1进行步S109,解调在第一块中的其长度至今已被确定为在固定值附近的字符。与此相反,如果这一字符的长度在固定值附近(S105),则CPU1在步S106检查字符的失真量是否大。如果不是,则CPU1直接前进到步S108。如果字符的失真量的任何一个大(即如果相应于各个字符的条宽数据的项之间的比超过一个固定范围,或者如果相应于各个模数的条宽数据的项之间的比超过一个固定范围),则CPU1在步S107设置“失真状态标记”之后前进到步S108。在步S108,CPU1检查字符长度的检查处理是否直到第6个字符(和朝向开始条侧的中心条相邻)都已完成。如果是,CPU1则前进到步S109,解调构成第一块的6个字符。而如果不是,则CPU1返回步S104,检查相邻的下一个字符的长度。
在步S109,CPU1从字符长度被在步S103,S105确定为在固定值附近的字符当中取出最接近于开始保护条的字符,并对取出的字符执行解调处理。
在下一步S110,CPU1检查在步S109进行的解调处理是否完成。如果没有完成,则CPU1前进到步S135,以便完成这个子程序。如果已完成,则CPU1前进到步S111。在步S111,CPU1检查字符的失真量是否大。如果不大,则CPU1直接前进到步S113。而如果大,则CPU1在步S112设置“失真状态标记”,并前进到S113。在步S113,CPU1检查是否完成相应于其长度被在步S103,S105的字符长度检查中确定为在固定值附近的所有字符数的解调处理。如果没有完成,则CPU1返回步S109对下一个相邻字符执行解调处理。与此相反,如果已完成。则CPU1前进到步S114。
在步114,CPU1检查已经被步S109中的解调处理解调的字符数是否是6个。如果小于6个,则可能要被处理的条宽数据组是通过“分割读取”而获得的,因而CPU1前进到步S135以便完成这一子程序。与此相反,如果已被解调的字符数是6个,CPU1就前进到步S115。
在步S115,CPU1再次检查第6个字符的长度。如果第6个字符的长度不在固定值附近(S116),则CPU1前进到步S135。与此相反,如果第6个字符的长度在固定值附近(S116),则CPU1在步S117检查中心条。这一检查中心条的处理是检查和第6个字符相邻的下一个字符是否和被设为中心条的预定的图形一致。然后,当获得中心条检查的所希望的结果时(S118),CPU1就前进到步S119。与此相反,当没有获得中心条检查的所希望的结果时(S118),则CPU1确定要被处理的条宽数据组是通过“分割读取”而获得的条宽数据组,并前进到步S135完成这一子程序。
在步S119,CPU1检查第7个(和朝向终止保护条一侧的中心条相邻的)字符。然后,如果第7个字符的长度不在固定值附近(S120),则要被处理的条宽数据组被确定为不是通过“连续读取”而获得的条宽数据组,并因而CPU1前进到步S135完成这一子程序。而如果第7个字符的长度在固定值附近(S120),则CPU1前进到步S121。
在步S121,CPU1检查下一个字符(和初始状态下第7个字符相邻的第8个字符)的长度,如果第8个字符的长度不在固定值的附近(S122),则要被处理的条宽数据组被确定为不是通过“连续读取”而获得的条宽数据组,并因而CPU1前进到步S135完成这一子程序。而如果第8个字符的长度在固定值附近(S122),则CPU1在步S123检查字符的失真量是否大。如果不是,则CPU1直接前进到步S125。如果字符的失真量大,则CPU1在步S124设置“失真状态标记”之后前进到步S125。在步S125,CPU1检查字符长度的检查是否直到第12个字符(和中心条一侧的终止保护条相邻的)都已完成。如果是,CPU1则前进到步S126,解调构成第二块的6片字符。而如果不是,则CPU1返回步S121,检查相邻的下一个字符的长度。
在步S126,CPU1从在步S120,S122被确定为在固定值附近的字符当中取出最接近中心条的字符,并执行取出字符的解调处理,和S109类似。在下一步S127,CPU1检查在步S126进行的解调处理是否完成。如果没有完成,则CPU1前进到步S135,以便完成这个子程序。如果已完成,则CPU1前进到步S128。在步S128,CPU1检查字符的失真量是否大。如果不大,则CPU1直接前进到步S130。而如果大,则CPU1在步S129设置“失真状态标记”,并前进到S130。在步S130,CPU1检查是否完成相应于其长度被在步S120,S122的字符长度检查中确定为在固定值附近的所有字符数的解调处理。如果没有完成,则CPU1返回步S126对下一个相邻字符执行解调处理。与此相反,如果已完成。则CPU1前进到步S131。
在步S131,CPU1再次检查第12个字符的长度。如果第12个字符的长度不在固定值附近(S132),则CPU1前进到步S135。如果第12个字符的长度在固定值附近(S132),则CPU1在步S133检查终止保护条。这一检查终止保护条的处理是检查和第12个字符相邻的下一个字符是否和被设为终止保护条的预定的图形一致。然后,当获得终止保护条检查的所希望的结果时(S134),CPU1就确定要被处理的条宽数据组是通过“连续读取”而获得的条宽数据组,因而前进到步S135,与此相反,当没有获得中心条检查的所希望的结果时(S134),则CPU1确定要被处理的条宽数据组是至少通过“宽度取”而获得的条宽数据组,并因此前进到步S135完成这一子程序。
在步S135,CPU1检查在步S109和步S126被完全解调的数据是否包括开始保护条和3个或更多的字符。如果是,则要被处理的条宽数据组可被确定为至少通过“分割读取”获得的条宽数据组,并且因而在步S137,CPU1设置“完成解调标记”而终止这一子程序。与此相反,如果不是,则数据的可利用性就比较低,因而CPU1在步S136复位“完成解调标记”,并结束这一子程序。
在另一方面,在步S001当判断条宽数据组不包括开始保护条时,便不可能通过“连续读取”而获得条宽数据组,因而CPU1前进到步S138。在步S138,CPU1检查要被处理的条宽数据组是否通过中心条。如果是,则CPU1就前进到步S139。步S139-S169涉及用于尽可能以中心条为中心点沿双向解调字符的处理。
在步S139,CPU1检查第6,7个字符的长度。如果两者的长度不在固定值附近(S140),CPU1则认为要被处理的条宽数据组是基于不同于条形码的图形的数据组。在这种情况下,CPU1在步S136复位“完成解调标记”,并终止这一子程序。与此相反,如果第6,7个字符的任何一个的长度在固定值附近(S140),则CPU1前进到步S141。
在步S141,CPU1检查在朝向终止保护条一侧的相邻字符(在初始状态下的第7个字符)的长度。如果其长度不在固定值附近(S142),CPU1则前进到步S146,解调其长度至今已被确定为在固定值附近的在第二数据块中的字符。与此相反,如果该字符的长度在固定值附近(S142),则CPU1在步S143检查字符的失真量是否大。如果不是,则CPU1直接前进到步S145。如果字符的失真量大,则CPU1在步S144设置“失真状态标记”之后前进到步S145。在步S145,CPU1检查形成第二数据块的6个字符长度的检查是否都已完成。如果是,CPU1则前进到步S146,解调这6个字符。而如果不是,则CPU1返回步S141,检查相邻的下一个字符的长度。
在步S146,CPU1从在步S142被确定为其长度在固定值附近的字符当中取出最接近中心条的字符,并执行对取出字符的解调处理,和S109类似。在下一步S147,CPU1检查在步S146进行的解调处理是否完成。如果没有完成,则CPU1直接前进到步S151,如果已完成,则CPU1前进到步S148。在步S148,CPU1检查字符的失真量是否大。如果不大,则CPU1直接前进到步S150。而如果大,则CPU1在步S149设置“失真状态标记”,并前进到S150。在步S150,CPU1检查是否完成相应于其长度被在步S142的字符长度检查中确定为在固定值附近的所有字符数的解调处理。如果没有完成,则CPU1返回步S146对下一个相邻字符执行解调处理。与此相反,如果已完成。则CPU1前进到步S151。
在步151,CPU1检查已经被步S146中的解调处理解调的字符数是否是6个。如果小于6个,则CPU1前进到步S154,解调包括在第一数据块中的字符,与此相反,如果已被解调的字符数是6个,CPU1就前进到步S152。
在步S152,CPU1再次检查第12个字符的长度,并检查终止保护条。接着,在任何情况下(S153),CPU1都前进到步S154,解调包括在第一数据块中的字符。
在步S154,CPU1检查朝向开始保护条一侧的相邻字符(在初始状态下的第6个字符)的长度。如果其长度不在固定值附近(S155),CPU1则前进到步S159,解调其长度至今已被确定为在固定值附近的在第一数据块中的字符。与此相反,如果该字符的长度在固定值附近(S155),则CPU1在步S156检查字符的失真量是否大。如果不是,则CPU1直接前进到步S158。如果字符的失真量大,则CPU1在步S157设置“失真状态标记”之后前进到步S158。在步S158,CPU1检查形成第一数据块的6个字符长度的检查是否都已完成。如果是,CPU1则前进到步S159,解调这6个字符。而如果不是,则CPU1返回步S154,检查相邻的下一个字符的长度。
在步S159,CPU1从在步S155被确定为其长度在固定值附近的字符当中取出最接近中心条的字符,并执行对取出字符的解调处理。在下一步S160,CPU1检查在步S159进行的解调处理是否完成。如果没有完成,则CPU1直接前进到步S164,如果已完成,则CPU1前进到步S161。在步S161,CPU1检查字符的失真量是否大。如果不大,则CPU1直接前进到步S163。而如果大,则CPU1在步S162设置“失真状态标记”,并然后前进到S163。在步S163,CPU1检查是否完成相应于其长度被在步S155的字符长度检查中确定为在固定值附近的所有字符数的解调处理。如果没有完成,则CPU1返回步S159对下一个相邻字符执行解调处理。与此相反,如果已完成。则CPU1前进到步S164。
在步164,CPU1检查已经被步S159中的解调处理解调的字符数是否是6个。如果是6个,则CPU1前进到步S169,如果小于6个,则CPU1前进到步S165。
在步S165,CPU1检查第1个字符的长度。如果第1个字符的长度不在固定值附近(这出现在第1个字符被丢失的情况下)(S166),则CPU1前进到步S169。与此相反,如果第1个字符的长度在固定值附近(S166),则CPU1在步S167检查开始保护条。然后,如果检测到开始保护条(S168),则CPU1确定这和在步S101中作出的决定矛盾,因而在步S136复位“解调完成标记”,因而结束这一子程序。与此相反,如果如果没有检测到开始保护条(S168),则CPU1前进到步S169的处理。
在步S169,CPU1检查完全解调的数据组是否具有这种结构,即字符和中心条的两侧连续地连接着。如果是,则在步S137CPU1设置“解调完成标记”,因而结束这一子程序。与此相反,如果不是,这意味着是一种很少发生的情况,因而数据的可靠性低。因此,CPU1在步S136复位“解调完成标记”,并结束这一子程序。
在另一方面,在步S138当判断条宽数据组不包括中心条时,便不能通过“块读取”而获得要被处理的条宽数据组,因而CPU1前进到步S170。在步S170,CPU1检查要被处理的条宽数据组是否通过终止保护条。如果是,则条宽数据组被认为是基于不同于条形码图形的,在这种情况下,CPU1在步S136复位“解调完成标记”,并结束这一子程序。与此相反,如果条宽数据组通过终止保护条,CPU1就前进到步S171。步S171-S187涉及用于尽可能以终止保护条为起点沿朝向中心条的方向进行解调字符的处理。
在步S171,CPU1检查第12个字符的长度。如果其长度不在固定值附近(S172),CPU1则认为条宽数据组是基于不同于条形码的图形的数据组。在这种情况下,CPU1在步S136复位“完成解调标记”,并终止这一子程序。与此相反,如果第12个字符的长度在固定值附近(S172),则CPU1前进到步S173。
在步S173,CPU1检查在朝向中心条一侧的相邻字符(在初始状态下的第11个字符)的长度。如果其长度不在固定值附近(S174),CPU1则前进到步S178,解调其长度至今已被确定为在固定值附近的在第二数据块中的字符。与此相反,如果该字符的长度在固定值附近(S174),则CPU1在步S175检查字符的失真量是否大。如果不是,则CPU1直接前进到步S177。如果字符的失真量大,则CPU1在步S144设置“失真状态标记”,之后前进到步S177。在步S177,CPU1检查形成第二数据块的6个字符长度的检查是否都已完成。如果是,CPU1则前进到步S178,解调这6个字符。而如果不是,则CPU1返回步S173,检查相邻的下一个字符的长度。
在步S178,CPU1从在步S172或S174被确定为其长度在固定值附近的字符当中取出最接近终止保护条的字符,并执行对取出字符的解调处理,在下一步S179,CPU1检查在步S178进行的解调处理是否完成。如果没有完成,则CPU1直接前进到步S183,如果已完成,则CPU1前进到步S180。在步S180,CPU1检查字符的失真量是否大。如果不大,则CPU1直接前进到步S182。而如果大,则CPU1在步S181设置“失真状态标记”,并前进到S182。在步S182,CPU1检查是否完成相应于其长度被在步S172或S174的字符长度检查中确定为在固定值附近的所有字符数的解调处理。如果没有完成,则CPU1返回步S178对下一个相邻字符执行解调处理。与此相反,如果已完成。则CPU1前进到步S183。
在步S183,CPU1检查第7个字符的长度。如果第7个字符的长度不在固定值附近(这出现在第7个字符被丢失的情况下)(S184),则CPU1前进到步S187。与此相反,如果第7个字符的长度在固定值附近(S184),则CPU1在步S185检查中心条和第6个字符的长度。然后,如果检测到中心条或者第6个字符的长度在固定值附近(S186),则CPU1确定这和在步S138中作出的决定矛盾,因而在步S136复位“解调完成标记”,因而结束这一子程序。与此相反,如果如果没有检测到中心条(S186),则CPU1前进到步S187的处理。
在步S187,CPU1检查在步S178完全解调的数据是否包括终止保护条和3个或更多的字符,如果是,则要被处理的条宽数据组可被确定为是至少通过“分割读取”而获得的条宽数据组,因而在步S137CPU1设置“解调完成标记”,因而结束这一子程序。与此相反,如果不是,则数据的可靠性相当低。因此,CPU1在步S136复位“解调完成标记”,并结束这一子程序。
在完成数据解调处理之后,CPU1返回图2的主程序,并在步S003检查是否设置有“解调完成标记”。这“解调完成标记”表示条宽数据组已被步S002的数据解调处理完成解调。如果“解调完成标记”没有设置,则CPU1放弃此时要被处理的条宽数据组,并返回步S001,以便执行关于从条宽数据组存储缓冲器2中新取出的条宽数据组的解调处理。
而如果设置有“解调完成标记”,则CPU1在步S004检查由步S002的数据解调处理获得的解调数据是否包含相应于整个左数据块的区域(含有开始保护条和中心条)。如果是,则CPU1前进到步S005。
在步S005,CPU1检查在步S002的数据解调处理中获得的解调数据是否相应于上级条形码或下级条形码。当相应于上级条形码时,则前进到步S006。
在步S006,CPU1把在步S002的数据解调处理中获得的解调数据存储在Ig-up缓冲器6b(第一缓冲器)中。
在下一步S007,CPU1根据中心条(CB)合成在Ig-up缓冲器6b中存储的解调数据和在右数据块暂存缓冲器6a中存储的解调数据(这相应于第一合成单元)。注意,要被合成的解调数据的各个组必须彼此重叠(一致)两个或多个字符,以便实现这种合成。
在下一步S008,CPU1执行关于在步S007中合成的解调数据的上述的模数10检查(在计算标记字符之后),并因而判断是否获得了相应于整个上级条形码的解调数据。然后,如果得到模数10检查的好的结果(如果得到相应于整个上级条形码的解调数据),则CPU1在步S009把这样合成的解调数据存储在M10-buff-up缓冲器6d中,并前进到步S023。然而如果没有得到模数10检查的好的结果(如果没有得到相应于整个上级条形码的解调数据),则CPU1直接前进到步S023。
在另一方面,当CPU1在步S005判断由步S002的解调处理获得的解调数据相应于下级条形码时,则把在步S002的数据解调处理中获得的解调数据存储在Ig-down缓冲器6c(第二缓冲器)中。
在下一步S011,CPU1根据中心条(CB)合成在Ig-down缓冲器6c中存储的解调数据和在右数据块暂存缓冲器6a中存储的解调数据(这相应于第二合成单元)。注意,要被合成的解调数据的各个组必须彼此重叠(一致)两个或多个字符,以便实现这种合成。
在下一步S012,CPU1执行关于在步S011中合成的解调数据的上述的模数10检查(在计算标记字符之后),并因而判断是否获得了相应于整个下级条形码的解调数据。然后,如果得到模数10检查的好的结果(如果得到相应于整个下级条形码的解调数据),则CPU1在步S013把这样合成的解调数据存储在M10-buff-down缓冲器6e中,并前进到步S023。然而如果没有得到模数10检查的好的结果(如果没有得到相应于整个下级条形码的解调数据),则CPU1直接前进到步S023。
在另一方面,当CPU1在步S004判断由步S002的解调处理获得的解调数据不包括相应于整个左数据块的解调数据时,则在步S014把这解调数据存储在右数据块暂存缓冲器6a(第三缓冲器)中。
接着的步S015-S018的处理是尝试合成存储在右数据块暂存缓冲器6a中的解调数据和存储在Ig-up缓冲器6b中的解调数据的处理。步S019-S022的处理是尝试合成存储在右数据块暂存缓冲器6a中的解调数据和存储在Ig-down缓冲器6c中的解调数据的处理。如上所述,按顺序试探合成储在右数据块暂存缓冲器6a中的解调数据和存储在上下级的左数据块中的中的解调数据的理由在于在右数据块中的解调数据不包括用于在上级和下级之间进行识别的识别信息。
在步S015,CPU1检查解调数据是否被存储在M10-buff-up缓冲器6d中。如果是,则CPU1直接前进到步S019。
然而如果在M10-buff-up缓冲器6d中没有存储解调数据,则CPU1在步S016根据中心条(CB)合成在右数据块暂存缓冲器6a中存储的解调数据和在M10-buff-up缓冲器6d中存储的解调数据(这相应于第一合成单元)。注意,要被合成的解调数据的各个组必须彼此重叠(一致)两个或多个字符,以便实现这种合成。
在下一步S017,CPU1执行关于在步S016中合成的解调数据的上述的模数10检查(在计算标记字符之后),并因而判断是否获得了相应于整个上级条形码的解调数据。然后,如果得到模数10检查的好的结果(如果得到相应于整个上级条形码的解调数据),则CPU1在步S018把在步S016合成的解调数据存储在M10-buff-up缓冲器6d中,并前进到步S019。然而如果没有得到模数10检查的好的结果(如果没有得到相应于整个上级条形码的解调数据),则CPU1直接前进到步S019。
在步S019,CPU1检查解调数据是否被存储在M10-buff-down缓冲器6e中。如果是,则CPU1直接前进到步S023。
然而如果在M10-buff-down缓冲器6e中没有存储解调数据,则CPU1在步S020根据中心条(CB)合成在右数据块暂存缓冲器6a中存储的解调数据和在M10-buff-down缓冲器6e中存储的解调数据(这相应于第二合成单元)。注意,要被合成的解调数据的各个组必须彼此重叠(一致)两个或多个字符,以便实现这种合成。
在下一步S021,CPU1执行关于在步S020中合成的解调数据的上述的模数10检查(在计算标记字符之后),并因而判断是否获得了相应于整个下级条形码的解调数据。然后,如果得到模数10检查的好的结果(如果得到相应于整个下级条形码的解调数据),则CPU1在步S022把在步S020合成的解调数据存储在M10-buff-down缓冲器6e中,然后前进到步S023。然而如果没有得到模数10检查的好的结果(如果没有得到相应于整个下级条形码的解调数据),则CPU1直接前进到步S023。
在步S023,CPU1检查解调数据是否被存储在M10-buff-down缓冲器6e中。如果在M10-buff-up缓冲器6d中和M10-buff-down缓冲器6e中都没有存储解调数据,则CPU1判断表示模数10检查的好的结果的的解调数据(模数10 OK数据)尚未准备好,并返回步S001。然而如果在M10-buff-up缓冲器6d中和M10-buff-down缓冲器6e中都存储有解调数据,则CPU1判断表示模数10检查的好的结果的的解调数据(模数10 OK数据)已经准备好,并前进到步S024。
在步S024,CPU1检查存储在M10-buff-up缓冲器6d和M10-buff-down缓冲器6e中的解调数据的识别标记。如果存储在M10-buff-up缓冲器6d中的解调数据的识别标记和表示上级的预定值“21”不一致,或者如果存储在M10-buff-down缓冲器6e中的解调数据的识别标记和表示下级的预定值“29”不一致,则CPU1从步S025前进到步S040以便执行判断NG的处理。然而如果存储在M10-buff-up缓冲器6d中的解调数据的识别标记和表示上级的预定值“21”一致,或者如果存储在M10-buff-down缓冲器6e中的解调数据的识别标记和表示下级的预定值“29”一致,则CPU1从步S025前进到步S026。
在步S026,CPU1检查存储在M10-buff-up缓冲器6d中的解调数据和存储在M10-buff-down缓冲器6e中的解调数据是否都是是基于连续读取处理的解调数据。这检查根据存储在M10-buff-up缓冲器6d中的解调数据是否和存储在Ig-up缓冲器6b中的解调数据相同以及存储在M10-buff-down缓冲器6e中的解调数据是否和存储在Ig-down缓冲器6c中的解调数据相同。然后,如果存储在M10-buff-up缓冲器6d中的解调数据和存储在M10-buff-down缓冲器6e中的解调数据都是基于连续读取处理的解调数据,则CPU1前进到步S039,执行判断OK的处理。与此相反,如果其中一个解调数据组不是基于连续读取处理的,则CPU1前进到步S027。
在步S027,CPU1检查存储在M10-buff-up缓冲器6d中的解调数据和存储在M10-buff-down缓冲器6e中的解调数据是否都是是基于块读取处理的解调数据。然后,如果存储在M10-buff-up缓冲器6d中的解调数据或存储在M10-buff-down缓冲器6e中的解调数据不是基于块读取处理的解调数据(即如果和基于分割读取处理的解调数据相同),则CPU1前进到步S040,执行判断NG的处理。然而,如果这两组解调数据组都是基于块读取处理的,则CPU1前进到步S028。
在步S028,CPU1比较存储在M10-buff-up缓冲器6d中的解调数据的右数据块和存储在Ig-up缓冲器6b中的解调数据的右数据块。
在下一步S029,CPU1根据在步S028比较的结果,计算在两个解调数据的右数据块中相同的字符数。这相同的字符数相当于相应于存储在Ig-up缓冲器6b中的解调数据包含的的右数据块的数值数据的数。然后,CPU1把计算的数代入变量“往上计数”。
在步S030,CPU1比较存储在M10-buff-down缓冲器6e中的解调数据的右数据块和存储在Ig-down缓冲器6c中的解调数据的右数据块。
在下一步S031,CPU1根据在步S030比较的结果,计算在两个解调数据的右数据块中相同的字符数。这相同的字符数相当于相应于存储在Ig-down缓冲器6c中的解调数据包含的右数据块的数值数据的数。然后,CPU1把计算的数代入变量“往下计数”。
在下一步S032,CPU1检查变量“往上计数”和变量“往下计数”是否超过“2”。然后如果这些变量中有一个小于2,则认为不能保证可以精确地再现相应于每级的整个条形码的解调数据,因此,处理进行步S040。然而如果两个变量都大于2,CPU1就前进到步S033。
在步S033,CPU1设置指针(a)为“6”,它指示在Ig-up缓冲器6b和Ig-down缓冲器6c中的地址。
接着,CPU1进入步S034-S038的循环。这处理循环用于确认存储在Ig-up缓冲器6b中的解调数据不同于右数据块中的存储在Ig-down缓冲器6c中的解调数据。
在进入这一循环处理之后的第一步S034中,CPU1检查变量“往上计数”和变量“往下计数”是否达到“0”。
在下一步S035,CPU1比较存储在Ig-up缓冲器6b的地址“a”的项中的数值数据和存储在M10-buff-down缓冲器6e的地址“a”的项中的数值数据。
在下一步S036,CPU1根据在步S035比较的结果检查两组数值数据是否彼此一致。如果是,CPU1则在步S037使指针(a)增加“1”。
在步S037使变量“往上计数”和变量“往下计数”增加1之后,CPU1返回步S034。
作为重复上述循环处理的结果,CPU1当判定变量“往上计数”或变量“往下计数”达到“0”时,在步S036判定数值数据彼此不同之前,便前进到步S040。即当只根据由读取上下级之一的一个右数据块获得的解调数据而使上下级被合成时,CPU1不能识别这一事实。类似地,如果在Ig-up缓冲器6b或Ig-down缓冲器6c中存储的解调数据的范围之外两个条形码不同,并且即使如果在Ig-up缓冲器6b中存储的解调数据和相应于下级条形码的右数据块的解调数据合成,进一步即使如果在Ig-down缓冲器6c中存储的解调数据和相应于上级条形码的左数据块的解调数据合成,CPU1也不能识别这一事实。这样,当变量“往上计数”或变量“往下计数”达到“0”时,则不能保证可以精确地再现相应于上下级条形码的解调数据,因而CPU1前进到步S040执行判断NG的处理。
与此相反,当在步S036判定存储在Ig-up缓冲器6b的地址“a”的项中的数值数据和存储在M10-buff-down缓冲器6e的地址“a”的项中的数值数据不同时,CPU1则前进到步S039执行判断OK的处理。
在步S039执行的判断OK处理中,CPU1从扬声器10输出表示读取(解调)条形码完成的声音,并通过组合相应于存储在M10-buff-up缓冲器6d中的上条形码的解调数据和相应于存储在M10-buff-down缓冲器6e中的下级条形码的解调数据,再现相应于整个两列条形码21的解调数据。CPU1通过发光二极管11显示例如相应于这样再现的解调数据的商品20的销售价格信息。此外,CPU1清除在RAM6中形成的各个缓冲器6a-6e的所有内容,准备下一个条形码读取处理。在完成判断OK处理时,CPU1返回步S001。
此外,在步S040执行的判断NG处理中,CPU1在清除在RAM6中形成的各个缓冲器6a-6e的所有内容之后,返回步S001。
下面参照图9说明按照本实施例构成的条形码读取器的操作。假定两列条形码21的各个块通过沿图9所示的路径(1)-(4)被光束扫描而读取。在这种情况下,如果两列条形码的第7,8个字符C7,C8彼此相同,按照路径(1)的解调数据(存储在Ig-up缓冲器6b中)可以和按照路径(2)的解调数据(存储在右数据块暂存缓冲器6a中)以及按照路径(4)的解调数据(存储在右数据块暂存缓冲器6a中)合成。类似地,按照路径(3)的解调数据(存储在Ig-down缓冲器6c中)可以和按照路径(2)的解调数据以及按照路径(4)的解调数据合成。因而,在这种情况下,不能保证再现相应于每级的整个条形码的解调数据,因而,只有当证实存储在Ig-up缓冲器6b中的解调数据和存储在Ig-down缓冲器6c中的解调数据的第8个字符C8彼此相同时(只有在步S035判定第8个字符C8彼此相同之后,当证实在步S034两个变量“往上计数”和“往下计数”达到“0”时),CPU1执行判断NG的处理(S040)。
此外,如果两个条形码的第7个字符C7或第8个字符C8彼此不同,则按照路径(1)的解调数据只能和按照路径(2)的解调数据合成,并且按照路径(3)的解调数据只能和按照路径(4)的解调数据合成。因而,在这种情况下,能够保证再现相应于每级的整个条形码的解调数据,因而,只有当证实存储在Ig-up缓冲器6b中的解调数据和存储在Ig-down缓冲器6c中的解调数据的的第7个字符C7彼此不同时,或只有证实第8个字符C8彼此不同时(只有在步S035判定这些字符彼此不同时),CPU1才执行判断OK的处理(S039)。
注意,如果路径(1)在中心条(CB)不连续,则按照路径(1)的解调数据可以和按照路径(2)的解调数据以及按照路径(4)的解调数据合成。类似地,如果路径(3)在中心条(CB)不连续,则按照路径(2)的解调数据可以和按照路径(3)的解调数据以及按照路径(4)的解调数据合成。因而,在这种情况下,不能保证再现相应于每级的整个条形码的解调数据,因而,CPU1立即执行判断NG的处理(只有在步S032证实两个变量“往上计数”和“往下计数”的初始值小于“2”时)(S040)。
此外,当路径(1)和路径(3)已经达到终止保护条(EGB)时,则按照路径(1)的解调数据和按照路径(3)的解调数据是相应于按照连续读取处理的解调数据,则必然有模数10检查的好的结果。因而CPU1不比较上下条形码(步S026,S039)便立即执行判断OK处理。
如上所述,按照本实施例的条形码读取器,由读取通过在两列中上下排列WPC码而构成的两列条形码中每级的每个数据块而获得的解调数据含有相应于右数据块的并且彼此不同的数据字符的数据,相应于各级的整个条形码的通过合成相应于每级的左数据块的解调数据和相应于右数据块的解调数据而获得的解调数据已被证实。因而,两列条形码的块读可在固定的约束下被识别,从而防止误读,并因此和只能进行连续读取识别的现有技术的条形码读取器相比,相应于整个两列条形码的解调数据可以好的响应被再现。即如图13所示,能够块读的扫描光束的角β大于能够连续读取的扫描光束的角α,因而可读性较高。因此在短的时间内容易再现相应于整个两列条形码的解调数据。
按照如上构成的本发明的条形码读取器和条形码读取方法,可以精确地合成由块读两列条形码的每级的右数据块而获得的解调数据和由块读左数据块而获得的解调数据。因而,相应于整个两列条形码的解调数据可以在短的时间内被再现。
显然,在本发明中,不脱离本发明的范围和构思,根据本发明可以得到宽范围的不同的工作方式。除被所附权利要求限定之外,本发明不受特定工作方式所限制。
权利要求
1一种条形码读取器,包括条形码图形检测单元,用于扫描由第一条形码和第二条形码构成的两列条形码,所述每个条形码包括第一数据块和第二数据块,所述每个数据块含有预定数量的数据字符,并检测在扫描路径上的条形码图形;解调单元,用于通过解调所述条形码图形检测单元检测的条形码图形而获得解调数据;第一缓冲器,用于当由所述解调单元获得的解调数据含有相应于第一条形码的第一数据块的部分时存储解调数据;第二缓冲器,用于当由所述解调单元获得的解调数据含有相应于第二条形码的第一数据块的部分时存储解调数据;第三缓冲器,用于当由所述解调单元获得的解调数据含有相应于第一条形码或第二条形码的第二数据块的部分时存储解调数据;第一合成单元,用于合成存储在所述第一缓冲器中的解调数据和存储在所述第三缓冲器中的解调数据;第二合成单元,用于合成存储在所述第二缓冲器中的解调数据和存储在所述第三缓冲器中的解调数据;以及确认单元,用于只有在存储在所述第一缓冲器中的解调数据和存储在所述第二缓冲器中的解调数据含有相应于第二数据块的数据字符的部分以及相应于两个解调数据的第二数据块的数据字符的部分彼此不同时,确认由所述第一合成单元合成的解调数据作为相应于第一条形码的解调数据,并确认由所述第二合成单元合成的解调数据作为相应于第二条形码的解调数据。
2如权利要求1所述的条形码读取器,其中条形码是WPC码,UPC/A码,JAN码或EAN码。
3如权利要求1所述的条形码读取器,其中所述第一合成单元只有在存储在所述第一缓冲器中的解调数据和存储在所述第三缓冲器中的解调数据彼此重叠两个或多个字符时才合成解调数据的这些片,以及所述第二合成单元只有在存储在所述二缓冲器中的解调数据和存储在所述第三缓冲器中的解调数据彼此重叠两个或多个字符时才合成解调数据的这些片。
4如权利要求1所述的条形码读取器,其中只有在存储在所述第一缓冲器中的解调数据和存储在所述第二缓冲器中的解调数据含有相应于两个或多个第二数据块的数据字符的部分时,确认单元才确认由所述第一合成单元获得的解调数据作为相应于第一条形码的解调数据,并确认由所述第二合成单元获得的解调数据作为相应于第二条形码的解调数据。
5如权利要求1所述的条形码读取器,其中在存储在所述第一缓冲器中的解调数据相应于第一条形码以及存储在所述第二缓冲器中的解调数据相应于第二条形码时,确认单元确认存储在所述第一缓冲器中的解调数据作为相应于第一条形码的解调数据,并确认存储在所述第二缓冲器中的解调数据作为相应于第二条形码的解调数据。
6一种条形码读取方法,包括扫描包含第一条形码和第二条形码的两列条形码的步骤,所述条形码的每一个含有第一数据块和第二数据块,所述数据块的每一个含有预定数量的数据字符,并检测扫描路径上的条形码图形;通过解调条形码图形而获得解调数据的步骤;通过合成含有相应于第一条形码的第一数据块的部分的解调数据和含有相应于第一条形码或第二条形码的的第二数据块的部分的解调数据而产生相应于第一条形码的解调数据的步骤;通过合成含有相应于第二条形码的第一数据块的部分的解调数据和含有相应于第一条形码或第二条形码的的第二数据块的部分的解调数据而产生相应于第二条形码的解调数据的步骤;以及只有在含有相应于第一条形码的第一数据块的部分的解调数据和含有相应于第二条形码的第一数据块的部分的解调数据含有相应于第二数据块的数据字符的部分以及相应于两个解调数据的第二数据块的数据字符的部分彼此不同时,才确认相应于第一条形码的解调数据,并确认相应于第二条形码的解调数据的步骤。
7一种计算机可读介质,其中存储有用于和用于扫描含有第一条形码和第二条形码的两列条形码的检测装置相连的计算机的程序,所述每个条形码含有第一数据块和第二数据块,所述每个数据块含有预定数量的数据字符,所述检测装置还用于检测在扫描路径上的条形码图形,所述程序使计算机执行通过解调由所述检测装置检测到的条形码而获得解调数据的步骤;通过合成含有相应于第一条形码的第一数据块的部分的解调数据和含有相应于第一条形码或第二条形码的第二数据块的部分的解调数据而产生相应于第一条形码的解调数据的步骤;通过合成含有相应于第二条形码的第一数据块的部分的解调数据和含有相应于第一条形码或第二条形码的的第二数据块的部分的解调数据而产生相应于第二条形码的解调数据的步骤;以及只有在含有相应于第一条形码的第一数据块的部分的解调数据和含有相应于第二条形码的第一数据块的部分的解调数据含有相应于第二数据块的数据字符的部分以及相应于两个解调数据的第二数据块的数据字符的部分彼此不同时,才确认相应于第一条形码的解调数据,并确认相应于第二条形码的解调数据的步骤。
8一种读取含有第一条形码和第二条形码的两列条形码的方法,所述每个条形码含有第一数据块和第二数据块,所述方法包括通过解调在两列条形码中的条形码图形而获得解调数据的步骤;只有在第一条形码的第一数据块中的解调数据和第二条形码的第一数据块中的解调数据两者都含有相应于第二数据块的部分并且相应于两个解调数据的第二数据块的部分彼此不同时,确认相应于第一条形码的解调数据并确认相应于第二条形码的解调数据的步骤。
全文摘要
一个CPU,其作为有效数据涉及通过合成由读取上级的第一数据块获得的解调数据和通过读取上级的第二数据块获得的解调数据而获得的解调数据,并涉及通过合成由读取下级的第一数据块获得的解调数据和通过读取下级的第二数据块获得的解调数据而获得的解调数据,其中通过读取通过在两列中上下设置WPC码而构成的两列条形码的上级的第一数据块而获得的解调数据和通过读取下级的第一数据块而获得的解调数据含有相应于第二数据块的部分,并且解调数据的这些组是不同的。
文档编号G06K7/10GK1208904SQ9810896
公开日1999年2月24日 申请日期1998年5月22日 优先权日1997年8月19日
发明者渡边光雄, 岩口功, 佐藤伸一, 川合弘晃, 伊藤元彦 申请人:富士通株式会社