激光条码扫描器项目开发技术文档.doc_第1页
激光条码扫描器项目开发技术文档.doc_第2页
激光条码扫描器项目开发技术文档.doc_第3页
激光条码扫描器项目开发技术文档.doc_第4页
激光条码扫描器项目开发技术文档.doc_第5页
免费预览已结束,剩余14页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

激光条码扫描器项目开发技术文档 汪振项目需求书:硬件系统:单片机:新茂(syncmos SM89516A)光电转换电路 解码电路软件系统:硬件驱动已经编好了,主要任务是:编写中断测量脉宽,解码程序。u 激光条码扫描器工作原理激光条码扫描器由于其独有的大景深区域、高扫描速度、宽扫描范围等突出优点得到了广泛的使用。另外,激光全角度激光条码扫描器由于能够高速扫描识读任意方向通过的条码符号,被大量使用在各种自动化程度高、物流量大的领域。 激光条码扫描器由激光源、光学扫描、光学接收、光电转换、信号放大、整形、量化和译码等部分组成。其主要物理技术是激光扫描与光电转换,激光扫描关键在于减少误码率,光电转换关键在于增加容错性识别能力。电子技术领域主要在于信号放大、整形和解码:手持枪式激光条码扫描器的信号频率为几十千赫到几百千赫,对于不同的码制有不同类型的信号,应该具体对待。一般采用硅光电池、光电二极管和光电三极管作为光电转换器件。手持枪式激光条码扫描器出射光能量相对较强,信号频率较低,另外,如前所说还可采用同步放大技术等。因此,它对电子元器件特性要求就不是很高。而且由于信号频率较低,就可以较方便地实现自动增益控制电路。由于条码印刷时的边缘模糊性,更主要是因为扫描光斑的有限大小和电子线路的低通特性,将使得到的信号边缘模糊,通常称为“模拟电信号”。这种信号还须经整形电路尽可能准确地将边缘恢复出来,变成通常所说的“数字信号”。同样,手持枪式扫描器由于信号频率低,在选择整形方案上将有更多的余地。整形后的电信号经过量化后,由译码单元译出其中所含信息。对于UPC、EAN码,译码器还要有左、右码段自动拼接功能。不过这种拼接可能将来自两个不同条码的左半部和有半部拼接起来。奇偶性和校验位并不能保证这种情况一定不会发生。u 阅读器硬件结构框架图:u 译码和接口每种阅读器阅读条码的方式虽然不同,但最终结果都是将信息转换为数字信号继而转化为可以识读或与计算机兼容的数据,这要通过阅读器自带的或阅读器和主机之间的一个单独的设备中的译码软件完成,译码器将条码进行识别并加以区分,然后上传到主计算机。将数据上传需要与主机进行连接或接口,每一接口要有两个不同的层:一个是物理的层(硬件),另一个是逻辑的层,即指通信协议。常用的接口方式有:键盘口、串口或者直接连接。在使用键盘接口方式时,阅读器所传出的条码符号的数据被PC或终端认为是自身的键盘所发出的数据,同时,它们的键盘也能够发挥所有功能。当使用键盘口连接的速度太慢,或者其它接口方式不可用时,我们将采用串口连接的方式。这里直接连接有两种意思,一种指阅读器不需要外加译码设备直接向主机输出数据,另一种指译码后的数据不通过键盘直接连到主机。 一些常用的术语双接口(Dual Interface):指阅读器能直接连接两种不同的设备,并自动进行配置和每一种终端通信,例如:一只CCD白天用于连接IBM的POS终端,而夜间它将连接一台便携数据终端用于商品盘点,使用内置的双接口功能,会使两个设备间的转换变得十分轻松。闪存(Flash Memory):闪存是一块不需电源便可以保存数据的芯片,它可以在瞬间完成数据的改写。Welch Allyn公司的产品多采用闪存取代原来的PROMs,使产品具有更强的升级能力。HHLC(Hand Held Laser Compatible):一些不带译码设备的终端只能采用外接译码器这一种方式通信,这种通信方式的协议,俗称激光仿真,用于连接CCD或激光阅读器和外置译码器。RS-232(Recommended Standard 232):计算机与条码阅读器、Modem、鼠标等外设进行串行传输的一种TIA/EIA标准,RS-232通常采用25针插头DB-25或9针插头DB-9,RS-232的通信距离一般在15.24m以内,如果采用比较好的电缆,通信距离能够加长。u 光笔仿真(Wand Emulation):光笔在扫描条码时,它向译码器发送一幅数字图像,在将一个带译码功能的阅读器连接到一个外置译码器时,将采用光笔仿真形式,阅读器将条码译成类似于光笔的数字图像输出到译码器。u (2008-8-16)存在问题及解决方案:硬件上要分析清楚各部分的电气特性,主要是SM8951的管脚分配情况和接口(网口+PSII口)软件上要查找到各种码制的协议和频率。(注:SM89516A用的是16M的晶振)先把接口调试好,便于输出查看运行结果,再调试解码程序。u 硬件连接单片机应用系统通过键盘接口与PC机通信单片机应用系统通过键盘接口与PC机通信必须严格按照键盘与PC机通信的时序要求并且按照命令字进行应答。当系统上电复位时,单片机应用系统通过键盘接口发送0AAH,模拟键盘自检完成信息。之后,单片机应用系统检测键盘接口数据线上电平,若 数据线电平被PC机拉低,单片机系统进入接收数据状态,按照图1时序接收命令信息或数据信息,单片机系统根据表1对接收信息予以解释。当单片机系统要发送 数据或命令时,按照图1时序发送信息,命令字则按表1的定久发送,PC机操作系统能识别这些键盘命令并进行相应的操作。而发送的数据则模拟键盘上各键的编 码,PC机操作系统可将编码解释为对应的键盘字符。在PC机端通信程序中,根据接收到的字符串执行相应的操作,这样就省去了编写将PC机端接收到的二进制 流解释为相应字符的程序。u (2008-8-18)存在问题及解决方案:硬件电路的单片机端接口为以太网口,接PC通信端接口为PS/2,到底是用哪种通信协议?解决方案:测试具体的物理连接!确定通信接口!u 电气特性1DATAKey Data P1.1 2n/cNot connected3GNDGnd4VCCPower , +5 VDC5CLKClock P3.36n/cNot connectedu PS/2 发送数据到PC的时序键盘接口时序(a) 键盘发送时序;(b) 键盘接收时序从向机发送一个字节可按照下面的步骤进行:()检测时钟线电平,如果时钟线为低,则延时; ()检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(); ()检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时机在向 设备发送数据,所以设备要转移到接收程序处接收数据); ()延时(如果此时正在发送起始位,则应延时); ()输出起始位()到数据线上。这里要注意的是:在送出每一位后都要检测时钟线,以确保机没有抑制设备,如果有则中止发送; ()输出个数据位到数据线上; ()输出校验位; ()输出停止位(); ()延时(如果在发送停止位时释放时钟信号则应延时);通过以下步骤可发送单个位: ()准备数据位(将需要发送的数据位放到数据线上); ()延时; ()把时钟线拉低; ()延时; ()释放时钟线; ()延时。设备从机接收一个字节由于设备能提供串行同步时钟,因此,如果机发送数据,则机要先把时钟线和数据线置为请求发送的状态。机通过下拉时钟线大于来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。当设备检测到需要接收的数据时,它会产生时钟信号并记录下面个数据位和一个停止位。主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。而设备则要配合机才能读到准确的数据。具体连接步骤如下:()等待时钟线为高电平。 ()判断数据线是否为低,为高则错误退出,否则继续执行。 ()读地址线上的数据内容,共个,每读完一个位,都应检测时钟线是否被机拉低,如果被拉低则要中止接收。 ()读地址线上的校验位内容,个。 ()读停止位。 ()如果数据线上为(即还是低电平),设备继续产生时钟,直到接收到且产生出错信号为止(因为停止位是,如果设备没有读到停止位,则表明此次传输出错)。 ( 输出应答位。 () 检测奇偶校验位,如果校验失败,则产生错误信号以表明此次传输出现错误。 ()延时 ,以便机进行下一次传输。读数据线的步骤如下:()延时; ()把时钟线拉低 ()延时 ()释放时钟线 ()延时 ()读数据线。下面的步骤可用于发出应答位;()延时; ()把数据线拉低; ()延时; ()把时钟线拉低; ()延时; ()释放时钟线; ()延时; ()释放数据线。第二套扫描码:101 102 和104 键的键盘:KEY通码断码KEY通码断码KEY通码断码A1CF0 1C946F0 4654F0 54B32F0 320EF0 0EINSERTE0 70E0 F0 70C21F0 21-4EF0 4EHOMEE0 6CE0 F0 6CD23F0 23=55F0 55PG UPE0 7DE0 F0 7DE24F0 245DF0 5DDELETEE0 71E0 F0 71F2BF0 2BBKSP66F0 66ENDE0 69E0 F0 69G34F0 34SPACE29F0 29PG DNE0 7AE0 F0 7AH33F0 33TAB0DF0 0DU ARROWE0 75E0 F0 75I43F0 43CAPS58F0 58L ARROWE0 6BE0 F0 6BJ3BF0 3BL SHFT12F0 12D ARROWE0 72E0 F0 72K42F0 42L CTRL14F0 14R ARROWE0 74E0 F0 74L4BF0 4BL GUIE0 1FE0 F0 1FNUM77F0 77M3AF0 3AL ALT11F0 11KP /E0 4AE0 F0 4AN31F0 31R SHFT59F0 59KP *7CF0 7CO44F0 44R CTRLE0 14E0 F0 14KP -7BF0 7BP4DF0 4DR GUIE0 27E0 F0 27KP +79F0 79Q15F0 15R ALTE0 11E0 F0 11KP ENE0 5AE0 F0 5AR2DF0 2DAPPSE0 2FE0 F0 2FKP71F0 71S1BF0 1BENTER5AF0 5AKP 070F0 70T2CF0 2CESC76F0 76KP 169F0 69U3CF0 3CF105F0 05KP 272F0 72V2AF0 2AF206F0 06KP 37AF0 7AW1DF0 1DF304F0 04KP 46BF0 6BX22F0 22F40CF0 0CKP 573F0 73Y35F0 35F503F0 03KP 674F0 74Z1AF0 1AF60BF0 0BKP 76CF0 6C045F0 45F783F0 83KP 875F0 75116F0 16F80AF0 0AKP 97DF0 7D21EF0 1EF901F0 0158F0 58326F0 26F1009F0 09;4CF0 4C425F0 25F1178F0 7852F0 5252EF0 2EF1207F0 07,41F0 41636F0 36PRNTSCRNE0 12E0 7CE0 F07C E0F0 12.49F0 4973DF0 3DSCROLL7EF0,7E/4AF0 4A83EF0 3EPAUSEE1 14 77E1 F0 14F0 77-NONE-ACPI 扫描码:KEY通码断码PowerE0, 37E0, F0, 37SleepE0, 3FE0, F0, 3FWakeE0, 5EE0, F0, 5EWindows 多媒体扫描码:KEY通码断码Next TrackE0, 4DE0, F0, 4DPrevious TrackE0, 15E0, F0, 15StopE0, 3BE0, F0, 3BPlay/PauseE0, 34E0, F0, 34MuteE0, 23E0, F0, 23Volume UpE0, 32E0, F0, 32Volume DownE0, 21E0, F0, 21Media SelectE0, 50E0, F0, 50E-MailE0, 48E0, F0, 48CalculatorE0, 2BE0, F0, 2bMy ComputerE0, 40E0, F0, 40WWW SearchE0, 10E0, F0, 10WWW HomeE0, 3AE0, F0, 3aWWW BackE0, 38E0, F0, 38WWW ForwardE0, 30E0, F0, 20WWW StopE0, 28E0, F0, 28WWW RefreshE0, 20E0, F0, 20WWW FavoritesE0, 18E0, F0, 18u (2008-8-20)确定通信方案:此通信方案为:可以使用多种接口,有:串行口,PS/2口,应该可以拓展USB口,此硬件上没有USB控制芯片,以太接口也只是因为能接多条数据线,却没有以太控制芯片,所以可能是出于成本和使用方便的考虑,不用USB和以太接口。确定PS/2口通信物理连接:P3.3 DATAP3.0 Clock按第二套扫描码的形式进行发送数据。/二分法查找算法,用来从ASIIC码到键盘第二套扫描码的转换,具有转换效率高的特点。/ 用二个大数组来存储上面转换表格。 void ASIIC_to_PS2(unsigned char R_char)/发送函数/单片机仿真PS/2键盘向PC机发送数据void send_bit(unsigned char x) /* function for send a char data*/ 单片机与条码扫描仪的连接用2根口线实现,其中一个是单片机中断引脚INT0输入端口,与扫描仪的时钟线相连,初始化为下降沿触发方式,以便在时钟下降沿时进入中断服务程序;另一个端口与扫描仪的数据线相连,用于读取各位数据。工作原理:当扫描仪扫描到有效条码数据时,会自动产生时钟信号,同时通过数据线按位将扫描码送到单片机。单片机在每个Clock的下降沿来临时进入中断,在中断服务程序中读取数据上的数据,这样就可以发送8位数据了。如图所示为扫描到的条码数据。u (2008-8-28)存在问题及解决方案:商业条码有很多类型,确定需要使用于何种场合,需要解哪几种条码?条码数据线:P3.2 为INT0引脚,可以产生外部中断,现在可以确定它是用来产生条码数据的外部中断信号源。我们的目标是要计数每一个条码的宽度,来确定相应条码代表的含义,也就是确定扫描以后产生的脉冲信号的高低电平信号的宽度,高电平脉宽为条宽,低电平脉宽为空宽。既要测量正脉宽又要测量负脉宽,需要经过一定的转换!现在的问题就是要确定这种转换的关系!u (2008-8-30)提出解码方案:(有待验证)void Sycmos_init()u (2008-9-2)进行ITF25码的解码程序编写:u ITF25(Interleaved 交叉25码)特点: 只能表示数字 0 - 9 (0: nnwwn,1: wnnnw,2: nwnnw,3: wwnnn,4: nnwnw,5: wnwnn,6: nwwnn,7: nnnww,8: wnnwn,9: nwnwn , n - 窄, w - 宽) 组成条码的字符个数应为偶数(因为条码的条/空成对交叉),当字符是奇数个时,应在左侧补0变为偶数个(例如:123 变为 0123) 条码为定长或可变长度 连续性条码,所有条与空都表示代码,第一个字符由条开始,第二个字符由空组成 条码字符从左到右,奇数位置字符用条表示,偶数位字符用空表示 每一个条码字符由五个单元(条或空为一单元)组成,其中二个宽单元,三个窄单元(宽单元为窄单元的2-3倍),5个条表示奇数位,5个条之间5个空表示偶数位 ITF25码开始模式为窄条,窄空,窄条,窄空,非条码字符 1010x ITF25码结束模式为宽条,窄空,窄条,非条码字符 介与ITF25码开始模式和ITF25码结束模式的条码表示代码 应用于商品批发、仓库、生产/包装识别、运输以及国际航空系统的机票顺序编号等 条码的识读率高,可适用于固定扫描器可靠扫描 自 校验校验码:校验码计算与UPC码相同,条码奇数位数字的和乘以3,加上偶数位的和,加上校验码等于该和的下一个为10的倍数的偶数。 例如,条码 4963401, 那么 3 * (4+6+4+1)+(9+3+0)=57. 57的下一个为10的倍数的偶数为60, 所以校验码为 3. 例:编码 01: NwNnWnWnNw (大写 NNWWN 为 0, 小写 wnnnw 为 1) Interleaved 2 of 5 is a higher-density numeric symbology based upon the Standard 2 of 5 symbology. It is used primarily in the distribution and warehouse industry. Interleaved 2 of 5 encodes any even number of numeric characters in the widths (either narrow or wide) of the bars and spaces of the barcode. Unlike Standard 2 of 5, which only encodes information in the width of the bars, Interleaved 2 of 5 encodes data in the width of both the bars and spaces. This allows Interleaved 2 of 5 to achieve a somewhat higher density. The symbology is called interleaved because the first numeric data is encoded in the first 5 bars while the second numeric data is encoded in the first 5 spaces that separate the first 5 bars. Thus the first 5 bars and spaces actually encode two characters. This is also why the barcode can only encode an even number of data elements. A typical Interleaved 2 of 5 barcode is: Note that the above barcode is physically smaller than its equivalent representation using Standard 2 of 5. NOTE: Interleaved 2 of 5 is essentially identical to Standard 2 of 5 except for the fact that Interleaved 2 of 5 encodes information in both the bars and spaces while Standard 2 of 5 only encodes information in the bars. However, the encoding scheme is the same for both in terms of their use of wide and narrow elements for each element. COMPUTING THE CHECKSUM DIGITInterleaved 2 of 5 is similar to Standard 2 of 5 in the sense that it may include an optional modulo 10 check digit. Please see the section concerning Computing the Checksum digitin the Standard 2 of 5 page. The process for calculating the check digit is the same in Interleaved 2 of 5 as it is in Standard 2 of 5. And, like Standard 2 of 5, the checksum digit is optional. NOTE: In the case of Interleaved 2 of 5, the total length of the value to be encoded must be even. If you are going to compute and append a checksum value, the actual data itself must be odd in length such that when the additional checksum value is appended, the total length will be even. ENCODING THE SYMBOLIn the following text, we will discuss the encoding of the barcode by considering that the number 1 represents a dark or bar section of the barcode whereas a 0 represents a light or space section of the barcode. Thus the numbers 1101 represents a double-wide bar (11), followed by a single-wide space (0), followed by a single-wide bar (1). This would be printed in the barcode as: STRUCTURE OF AN INTERLEAVED 2 OF 5 BARCODEAn Interleaved 2 of 5 barcode has the following physical structure: 1. Start character, encoded as 1010. 2. Each pair of data characters is encoded (see encoding table below). 3. Stop character, encoded as 1101. INTERLEAVED 2 OF 5 ENCODING TABLEThis table indicates how to encode each digit of an Interleaved 2 of 5 barcode. Note that the encoding is expressed as N (narrow bar or space) or W (wide bar or space). ASCIICHARACTERBARCODEENCODING0NNWWN1WNNNW2NWNNW3WWNNN4NNWNW5WNWNN6NWWNN7NNNWW8WNNWN9NWNWNNOTE: The above encoding table is identical to that used with Standard 2 of 5. The only difference is that Interleaved 2 of 5 interleaves the encodings in the bars and spaces whereas Standard 2 of 5 only encodes data in the bar widths. ENCODING EXAMPLEWe will now code the above example in Interleaved 2 of 5: 12345670. By this point we would already have calculated the checksum digit as 0 (the last digit of the barcode value) as illustrated in the checksum calculation section illustrated above. Now we need to encode each digit using the encoding table above: 1. The digit 1 encoded in bars: WNNNW 2. The digit 2 encoded in spaces: NWNNW 3. The digit 3 encoded in bars: WWNNN 4. The digit 4 encoded in spaces: NNWNW 5. The digit 5 encoded in bars: WNWNN 6. The digit 6 encoded in spaces: NWWNN 7. The digit 7 encoded in bars: NNNWW 8. The digit 0 encoded in spaces: NNWWN That is to say the digits 1 and 2 are encoded together, 3 and 4 are encoded together, 5 and 6 are encoded together, and 7 and 0 are encoded together. The first digit of each pair is encoded in the width of the bars and the second digit of each pair is encoded in the width of the spaces. For example, in the case of the first two digits 12, we encode the 1 in the bars using the sequence WNNNW (Wide bar, narrow bar, narrow bar, narrow bar, wide bar). We encode the 2 in the spaces that separate the bars of the first digit. The digit 2 is encoded in spaces with the sequence NWNNW (narrow space, wide space, narrow space, narrow space, wide space). Assuming 1 is a narrow bar, 11 is a wide bar, 0 is a narrow space, and 00 is a wide space, the above would be encoded as follows: BARSPACEBARSPACEBARSPACEBARSPACEBARSPACEWNNWNNNNWW11010010101100Thus encoding the first two data digits results in the sequence 11010010101100. In other words, a wide bar, a narrow space, a narrow bar, a wide space, a narrow bar, a narrow space, a narrow bar, a narrow space, a wide bar, a wide space. The process for the rest of the pairs of characters is the same. It results in the following: 1. START CODE (always the same): 1010. 2. 1st and 2nd Digits: 11010010101100. 34AC 3. 3rd and 4th Digits: 11011010010100. 3694 4. 5th and 6th Digits: 11010011001010. 34CA 5. 7th and 8th Digits: 10101001100110. 2A66 6. STOP CODE (always the same): 1101. This is shown in the following graphical representation where the barcode has been sectioned-off into areas that reflect each of the 6 components just mentioned.交叉25码解码程序:/只有两种条的情况, 适合交叉25码void Judge_decode()/条为奇,空为偶void Judge_code()void ITF25()void ITF25_code(unsigned char code25,unsigned char i)u (2008-9-3)EAN码解码程序编写:u EAN条码符号标准版 表示13位数字的EAN条码(EAN-13)称为标准版的EAN条码,其结构如图所示: 左侧空白区 起始符 左侧数据符 中间分隔符 右侧数据符 校验符 终止符 右测空白区 9个模块 3个模块 42个模块 5个模块 35个模块 7个模块 3个模块 9个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论