基于嵌入式Linux的高解析喷码机系统的制作方法

文档序号:19410425发布日期:2019-12-14 00:20阅读:386来源:国知局
基于嵌入式Linux的高解析喷码机系统的制作方法

本发明涉及一种基于嵌入式linux的高解析喷码机系统。



背景技术:

随着社会的发展,人们对日常生活中的消费商品有了更高的质量要求,越来越重视商品的生产日期、有效日期等信息,厂家越来越重视产品的防伪标识、品牌标识等附加信息。同时,企业为了实现产品追溯跟踪,防止产品被伪造窜货,提高仓储管理效率,利用二维条码精准营销,提升产品知名度等原因,也需要对其生产的商品进行标识。喷码标识行业的应用越来越广阔,喷码机市场需求与日俱增。

因此,随着条码技术的发展和移动终端识别系统的普及,基于“一物一码”的防伪、追溯、营销体系正受到广泛关注,利用喷码机于商品表面喷印字符和条码是其中的一个关键环节。为了提高生产线上产品的喷码效率和二维条码的可识别率,喷印速度和喷印质量成为喷码机的关键性能指标,而高解析喷码机在喷印质量上有着得天独厚的优势。

与传统的打码机,贴标机相比较,喷码机在价格、使用方式、工作效率等方面拥有更大的优势,尤其是用于高速生产流水线上,更能充分发挥喷印快的优势,故喷码机有逐步取代传统赋码设备的趋势。近几年来,国内喷码设备需求日益增加,出现了一批喷码机生产厂家,但这些厂家大都根据国外产品进行仿制或者与国外企业联合研发,国内自主研发的喷码机设备多数采用单片机控制,存在着喷印效率低,结构复杂和功能单一等缺点,无法满足现代企业越来越高的喷码质量要求。

为此,本发明结合嵌入式技术、传感与检测技术及条码技术,提出了一种基于嵌入式linux的高解析喷码机系统,实现了文本、图案、可变二维条码、可变计数器等信息的喷印。



技术实现要素:

本发明的目的在于提供一种基于嵌入式linux的高解析喷码机系统,实现了文本、图案、可变二维条码、可变计数器等信息的喷印,且通过采用定地址更新变量数据的方法,提高了可变数据的喷印速度,并通过qr码生成算法提升qr码的喷印质量及可识别率。

为实现上述目的,本发明的技术方案是:一种基于嵌入式linux的高解析喷码机系统,包括上位机单元、下位机单元;

所述上位机单元以arm处理器为核心,搭载嵌入式linux操作系统,所述上位机单元包括上位机喷印控制模块、资料编辑模块、参数设置模块、系统工具模块和状态显示模块;所述上位机喷印控制模块,用于实现待喷印资料信息的字模数据处理和与下位机单元的数据交互;所述资料编辑模块,用于完成信息的生成及编辑功能;所述参数设置模块,用于实现喷印过程中涉及的各种参数的设置;所述系统工具模块,用于实现包括用户权限管理、喷嘴维护、资料备份与恢复、系统日志和屏幕校准的功能;所述状态显示模块,用于实现高解析喷码机系统的状态信息显示;

所述下位机单元以fpga为核心,所述下位机单元包括spi控制模块、数据处理模块、sdram控制模块、下位机喷印控制模块和异常处理模块;上位机单元通过spi总线将数据或指令以串行形式发送spi控制模块,由spi控制模块转换为并行数据输出给数据处理模块进行解析得到的字模数据,并由sdram控制模块将字模数据存储到sdram存储器,下位机喷印控制模块在控制喷头模块喷完一帧后,向sdram控制模块发送数据请求信号,sdram控制模块将字模数据发送给下位机喷印控制模块,下位机喷印控制模块在喷印过程中反馈喷印信息至数据处理模块进行分析,下位机喷印控制模块在喷印完成后向上位机单元发送异步通知信息,请求上位机单元更新数据,当spi控制模块检测到数据发送有误时,通过异常处理模块向spi控制模块、数据处理模块、sdram控制模块、下位机喷印控制模块发送复位信号。

在本发明一实施例中,所述arm处理器采用s3c6410。

在本发明一实施例中,所述fpga采用搭载alteracycloneep4ce10的fpga核心板。

在本发明一实施例中,所述下位机单元还包括一喷头驱动模块,所述下位机喷印控制模块通过喷头驱动模块控制喷头模块进行喷印。

在本发明一实施例中,所述喷头驱动模块采用c8855喷头驱动板。

在本发明一实施例中,所述喷头模块采用热发泡墨盒,喷头驱动模块通过与热发泡墨盒通信,进而控制热发泡墨盒的喷头进行喷印。

在本发明一实施例中,所述下位机单元还包括一用于检测待喷印物体位移与方向的光电模块,所述下位机喷印控制模块还与所述光电模块连接。

在本发明一实施例中,所述系统应用于可变数据的喷印,为提高可变数据的喷印速度,采用定地址更新变量数据的方法,该方法具体实现如下:

步骤s1、识别出待喷印资料中所有的可变数据项并重新生成图片;

步骤s2、计算出下位机单元中sdram存储器中需要被更新替换的地址区域;

步骤s3、下位机单元设计sdram地址控制器,以实现变量数据更新时能够精准写入指定的地址区域。

在本发明一实施例中,所述步骤s1中,采用qt的图形视图框架实现待喷印资料信息编辑功能,对每一数据项的参数信息进行保存,由此识别出属于可变数据项的类型,即计数器、生产日期、有效日期、可变二维码和可变条形码。

在本发明一实施例中,所述步骤s3中,下位机单元将上位机单元发送的可变数据项起始地址及数据更新长度的参数,写入到可变数据项起始地址寄存器和字模数据值寄存器,当数据更新时,下位机通过字模数据计数寄存器对上位机单元发送的字模数据进行计数,把字模数据计数寄存器与字模数据值寄存器进行比较,如果相等则切换到下一可变数据项的起始地址,实现定地址更新变量数据。

相较于现有技术,本发明具有以下有益效果:本发明实现了文本、图案、可变二维条码、可变计数器等信息的喷印,且通过采用定地址更新变量数据的方法,提高了可变数据的喷印速度,并通过qr码生成算法提升qr码的喷印质量及可识别率。

附图说明

图1为本发明高解析喷码机系统的硬件结构框图。

图2为本发明软件的总体设计框图。

图3为本发明下位机单元各模块间信号流示意图。

图4为下位机单元的内部结构简图。

图5为可变数据喷印实现方式流程图。

图6为字模数据处理及传输流程图。

图7为待喷印资料信息的bmp格式截图。

图8为可变数据项生成的bmp格式截图。

图9为可变数据项更新区域示意图。

图10为化繁为简后可变数据项更新区域示意图。

图11为本发明qr码生成程序流程图。

图12为本发明数据位流生成程序流程图。

具体实施方式

下面结合附图,对本发明的技术方案进行具体说明。

本发明提供了一种基于嵌入式linux的高解析喷码机系统,包括上位机单元、下位机单元;

所述上位机单元以arm处理器为核心,搭载嵌入式linux操作系统,所述上位机单元包括上位机喷印控制模块、资料编辑模块、参数设置模块、系统工具模块和状态显示模块;所述上位机喷印控制模块,用于实现待喷印资料信息的字模数据处理和与下位机单元的数据交互;所述资料编辑模块,用于完成信息的生成及编辑功能;所述参数设置模块,用于实现喷印过程中涉及的各种参数的设置;所述系统工具模块,用于实现包括用户权限管理、喷嘴维护、资料备份与恢复、系统日志和屏幕校准的功能;所述状态显示模块,用于实现高解析喷码机系统的状态信息显示;

所述下位机单元以fpga为核心,所述下位机单元包括spi控制模块、数据处理模块、sdram控制模块、下位机喷印控制模块和异常处理模块;上位机单元通过spi总线将数据或指令以串行形式发送spi控制模块,由spi控制模块转换为并行数据输出给数据处理模块进行解析得到的字模数据,并由sdram控制模块将字模数据存储到sdram存储器,下位机喷印控制模块在控制喷头模块喷完一帧后,向sdram控制模块发送数据请求信号,sdram控制模块将字模数据发送给下位机喷印控制模块,下位机喷印控制模块在喷印过程中反馈喷印信息至数据处理模块进行分析,下位机喷印控制模块在喷印完成后向上位机单元发送异步通知信息,请求上位机单元更新数据,当spi控制模块检测到数据发送有误时,通过异常处理模块向spi控制模块、数据处理模块、sdram控制模块、下位机喷印控制模块发送复位信号。

所述arm处理器采用s3c6410。所述fpga采用搭载alteracycloneep4ce10的fpga核心板。

所述下位机单元还包括一喷头驱动模块,所述下位机喷印控制模块通过喷头驱动模块控制喷头模块进行喷印。所述喷头驱动模块采用c8855喷头驱动板。所述喷头模块采用热发泡墨盒,喷头驱动模块通过与热发泡墨盒通信,进而控制热发泡墨盒的喷头进行喷印。所述下位机单元还包括一用于检测待喷印物体位移与方向的光电模块,所述下位机喷印控制模块还与所述光电模块连接。

所述系统应用于可变数据的喷印,为提高可变数据的喷印速度,采用定地址更新变量数据的方法,该方法具体实现如下:

步骤s1、识别出待喷印资料中所有的可变数据项并重新生成图片;

步骤s2、计算出下位机单元中sdram存储器中需要被更新替换的地址区域;

步骤s3、下位机单元设计sdram地址控制器,以实现变量数据更新时能够精准写入指定的地址区域。

所述步骤s1中,采用qt的图形视图框架实现待喷印资料信息编辑功能,对每一数据项的参数信息进行保存,由此识别出属于可变数据项的类型,即计数器、生产日期、有效日期、可变二维码和可变条形码。

所述步骤s3中,下位机单元将上位机单元发送的可变数据项起始地址及数据更新长度的参数,写入到可变数据项起始地址寄存器和字模数据值寄存器,当数据更新时,下位机通过字模数据计数寄存器对上位机单元发送的字模数据进行计数,把字模数据计数寄存器与字模数据值寄存器进行比较,如果相等则切换到下一可变数据项的起始地址,实现定地址更新变量数据。

以下为本发明的具体实现过程。

如图1所示,本发明的一种基于嵌入式linux的高解析喷码机系统的硬件设计,选用搭载三星s3c6410的tiny6410核心板,选用搭载alteracycloneep4ce10的fpga核心板,选用惠普公司的热发泡喷头驱动板,选用7寸触摸屏作为人机交互接口,利用光电传感器采集喷印触发信号,利用光电编码器检测喷印对象的位移和相对于喷头的移动方向,通过spi总线实现arm与fpga间的数据交互。微处理器外围接口电路模块还包括lcd显示模块、usb模块、网卡模块、rs232串口模块等。电源管理模块提供了30v、24v、5v和3.3v的电压。系统存储模块包括1gb的nandflash,用于程序存储,存放系统文件及应用软件;16gb的sdcard用于存储系统启动引导程序及储存空间扩展;256mb的ddrsdram,主要用于系统的内存;32mb的ddrsdram,作为fpga的外扩存储器,用于缓存字模数据;epcs16用于存储fpga的程序代码。

如图2所示,本发明的一种基于嵌入式linux的高解析喷码机系统的软件设计,系统分为以arm处理器为核心的上位机系统和以fpga为核心的下位机系统,上位机系统包括上位机喷印控制模块、资料编辑模块、参数设置模块、系统工具模块和状态显示模块五大部分,下位机系统包括spi控制、数据处理、sdram控制、上位机喷印控制和异常处理等模块。本发明中高解析喷码机的上位机单元与下位机单元通过spi总线进行交互。

一、上位机单元设计

本发明上位机单元选用arm为主处理器,搭载嵌入式linux操作系统,采用qt/embedded作为嵌入式gui开发平台,用c++语言实现软件编写。根据人机界面友好,操作简单方便,系统可扩展等方面的要求,上位机系统采用模块化设计。按照功能将系统分为五个模块,各个模块单独编程,模块之间相互独立。

上位机喷印控制模块主要完成待喷印资料信息的字模数据处理和与下位机的数据交互,同时考虑到机器操作的人性化,需要增加待喷印内容的预览、支持常用喷印参数的修改、喷头的防堵清洗、喷印过程资料信息实时显示、通过关键字查找资料等功能。

资料编辑模块主要完成信息的生成及编辑功能,需要支持文本、计数器、生产日期、有效日期、图案logo、一维条码、二维条码等内容。为了提高资料的编辑效率,满足实际需求,对于喷印条目需要支持预览、复制、二次编辑、重命名、删除等功能,对于编辑项需要支持字高设置、字宽设置、字型设置、位置设置、拖动、旋转等功能。

参数设置模块主要包括喷印参数设置、日期格式设置、计数器设置、本地参数设置、报警信号设置等功能。结合实际应用需求,需要支持连续喷印、反向喷印、编码器、喷头保湿、上下倒置等喷印参数设置。不同用户对喷印的日期格式有不同需求,需要在系统自带的日期格式之外,增加日期格式自定义功能。计数器是喷码机最常用的喷印项之一,不同场合需要进行不一样的设置比如:计数器起始值、计数器步进值、计数器终值、计数器值格式等。本地参数包括系统语言、系统时间校正、休眠时间等设置。报警设置列出了可能出现的故障情况,可选择对应的报警信号,包括红灯亮、蜂鸣器鸣和生产线停止运行。

系统工具模块主要包括用户权限管理、喷嘴维护、资料备份与恢复、系统日志和屏幕校准等功能。高解析喷码机是一个集成系统,有些设置是所有人员均可操作,有些是特定技术管理人员才能使用,为了确保系统不被误操作,需要增加权限管理功能。喷头是高解析喷码机的精密核心部件,为了延长喷头使用寿命,需要对喷嘴进行维护,包括定期切换喷嘴、喷前清洗喷嘴、设置喷头保温等功能。为了避免数据丢失,方便数据转移,需要增加资料的备份与恢复功能。系统日志可以记录设备端操作的过程,包括操作者,提示内容和操作时间。因为使用的触摸屏物理特性不同,有可能出现触摸屏笔触位置不准确的情况,所以需要增加触摸屏校准功能。

界面底部设计状态显示,使用户能快速了解机器的状态信息并在第一时间做出应对措施。高解析喷码机使用的墨盒是封闭不可见的,增加墨盒状态标志用于提示墨盒状态。所使用的惠普热发泡喷头可能出现过热、堵塞等问题,增加机器运行状态标志用于提示存在的潜在故障信息。usb状态标志、编码器状态标志、光电开关状态标志和以太网接口状态标志分别提示相应外设是否成功接入。

二、下位机单元设计

下位机主要围绕alterafpga来设计,采用spi总线协议作为高速数据传输接口,完成与上位机的通信;采用sdram存储器作为字模数据缓存器件;采用惠普热发泡墨盒及其驱动板作为喷印执行部件;采用epcs16存储芯片作为配置器件,存储fpga程序代码;采用altera公司提供的quartusⅱ作为集成开发环境;采用verilog硬件描述语言进行代码编写;采用modelsim软件进行功能仿真验证。按照功能将下位机划分为spi控制模块、数据处理模块、sdram控制模块、喷印控制模块和异常处理模块,各模块间的数据流示意图如图3所示。

如图3所示,过程为上位机通过spi总线将数据或指令以串行形式发送到下位机。过程为spi控制器检测到数据发送有误,通过spi总线向上位机发送指令要求上位机再一次发送数据。过程为spi控制器接收串行数据并转换为并行数据输出,进而数据处理模块对数据进行解析处理。过程为通过sdram控制模块将字模数据存储到sdram存储器。过程为喷印控制模块喷完一帧后,向sdram控制器模块发送数据请求信号。过程为sdram控制器将缓存在sdram存储器中的字模数据发送给喷印控制模块。过程为喷印控制模块将驱动板返回的状态/测量数据发送到数据处理模块进行分析。过程为可变数据喷印完成,喷印控制模块向上位机发送异步通知信号,要求上位机更新数据。过程为异常处理模块向各模块发送复位信号。过程为spi控制器检测到数据发送有误,向异常处理模块发送校验错误信号。

如图4所示,为下位机单元的内部结构简图,下位机单元主要分为spi控制模块、sdram控制模块、异常处理模块、数据处理模块和喷印控制模块,各模块互相配合。spi控制模块接收上位机数据,由内部移位寄存器进行接收,接收8bit后spi_rx_done引脚发出脉冲通知数据处理模块从rx_data总线读数据。如果出现数据校验错误情况,则向异常处理模块发送errflag信号,异常处理模块将reset置低电平,各个模块进入复位状态,同时spi通过miso引脚向上位机传输奇偶校验结果。喷印刚启动,上位机会先发送一串配置参数,由数据处理模块解析并存至相应寄存器,包括喷印速度、喷印长度、编码器功能是否开启,喷头保温功能是否开启,是否为可变数据喷印,各可变数据项的初始地址及所需空间等喷印参数(pri_param)和可变数据项参数(var_param)。通过wr_finish、font_data和deal_done3个信号完成字模数据缓存,通过frame_done和fontdata信号完成喷印数据读取。

下位机单元还包括喷头驱动模块及喷头模块,以实现喷印的完成。

喷头驱动模块,采用c8855驱动板,c8855boem驱动板是一种印刷电路组件,它提供主控器与墨盒之间的电气和逻辑接口,驱动板上的专用集成电路通过串行数据接口与主控器进行通信,将控制指令和字模数据转换为墨盒能够识别的特定信号。c8855驱动板本质上是从设备,主控器要根据实际需求向其发送指令数据,比如数据传输速率、脉冲宽度、输出电压、热设定值等。喷印系统向驱动板传输字模数据,这些数据由驱动板转换为信号,通过这些信号选择并触发墨盒上的各个喷嘴喷出墨滴,最终形成预期文本图案。

喷头模块,采用惠普公司的热发泡墨盒,其由喷墨系统、电气互连组件和墨水组成。它将喷头与墨水进行集成设计,通过52个电气互连触点为所有点火电阻通电,进而控制墨滴喷出。墨盒支持12khz的最大点火频率,喷头部分在12.7mm的垂直高度上排列了2组各150个的微孔喷嘴,在水平和垂直方向上能实现600dpi分辨率的高质量喷印。墨盒内置热敏电阻测量温度并提供脉冲预热的闭环控制,以获得最佳喷印质量和防烧坏保护。

本发明通过光电开关检测待喷印物体的有无,利用其上升沿作为喷印触发信号,通过光电编码器测量待喷印物体的位移与方向,编码器喷印方式作为高解析喷码机的附加功能,用于解决要求喷印速度与传输速度严格匹配的问题,当启动此功能时,系统将屏蔽喷印速度参数和喷印方向参数,通过光电编码器将待喷印物体的位移信息转换为脉冲信号,分析其运行方向,此方式适用于传输带速度不平稳或者喷印质量要求比较高的场合。

本发明的一种基于嵌入式linux的高解析喷码机系统,能够实现可变数据的喷印及其喷印速度优化。

1、可变数据喷印的设计与实现

1.1、可变数据喷印方案设计

本发明采用实时更新的可变数据喷印方式:

用户编辑完资料信息后,如果包含可变数据,系统将生成一条待喷印资料,提取字模数据传输到下位机存至sdram存储器。当光电开关触发时,一方面fpga从sdram存储器取出字模数据启动喷印,另一方面向上位机发送中断实现异步通知,上位机接收到更新信号后,生成下一条待喷印资料,提取字模数据并发送到下位机更新sdram存储器内容,其流程图如图5所示。这种方案可让上下位机建立通信机制,不会因为上下位机互不通信而导致喷印错误,也可以解决数据处理过程出现最短板问题,让系统运行处于可控状态,本文采用此种方案实现可变数据喷印。

为了使上位机数据处理能和下位机喷头喷印同步进行,本文设计在主线程发送完数据之后,提前一拍处理下一条待喷印资料信息,当光电开关触发喷印后,fpga可立即驱动喷嘴喷印,而上位机接收到数据更新信号,可立即启动数据传输,提高了喷印效率。

1.2、异步通知机制

实时更新喷印方式的关键之一是光电开关被触发后,如何成功并及时地更新sdram中的字模数据。光电开关触发后fpga向arm发送中断信号,但此时只是将数据更新信号传到嵌入式linux驱动层,如何在有触发信号时及时调用应用层的数据处理函数。在嵌入式linux操作系统中,可以通过阻塞和非阻塞型操作组合以及select方法对外部信号进行查询,应用程序也可以在应用层使用poll机制来检测外部信号,但都效率低下,没有办法实现及时响应。本文采用异步通知机制加以解决,使应用层能够及时捕获驱动层接收到的中断信号,让应用程序能及时调用指定函数,完成数据更新与传输。

异步通知机制指一旦设备就绪,则主动通知应用程序,不需要应用程序轮询,是一种“信号驱动的异步i/o”,是在软件层次上对中断机制的一种模拟。异步通知的信号从外部硬件发出,首先传到嵌入式linux驱动层,再由驱动层通知应用程序,整个过程需要完成以下两个步骤。

(1)嵌入式linux中断

在嵌入式linux系统中,对底层硬件的管理是通过内核中的驱动程序来实现的,中断机制的合理使用可以有效提高应用程序的效率。设备驱动程序是将底层硬件的工作细节加以隐藏,提供给应用程序一组标准化接口。在linux系统中硬件被抽象成一个设备文件,用户可以向操作普通文件一样来操作硬件设备,linux系统为每个设备分配一个主设备号和次设备号,主设备号标识设备对应的驱动程序,次设备号对应具体设备的实例。可通过misc_register(&misc)函数注册字符设备,其中misc数据结构为

通过对设备文件的i/o函数来实现对设备的操作,通过定义file_operations结构来把驱动程序与设备文件的操作联系起来,本文file_operations结构如下。

将fpga的gpio_l6与arm的irq_eint0相连接,编写嵌入式linux中断驱动程序,实验阶段采用动态加载方式加载到linux内核,发布程序时可直接编译到内核。通过实验验证,当fpga采集到光电开关脉冲信号,可成功触发嵌入式驱动层的中断服务子程序,实现外部硬件与嵌入式linux驱动层之间的通信。

(2)驱动层与应用层间的异步通知

异步通知需要指定信号发送者和信号接收者,本文中嵌入式linux驱动程序是信号的发送者,qt应用程序是信号的接收者。发送者通过kill_fasync函数通知qt应用程序,其函数原型如下,其中eyesignal_fasync结构体里包含了应用程序的进程号pid和发射的信号类型sigio。

kill_fasync(&eyesignal_fasync,sigio,poll_in);

上位机应用程序通过如下程序段设置异步信号处理方式,sigio为指定的信号类型,variabledata_upadata为信号处理函数。

structsigactiondatadealaction;

memset(&datadealaction,0,sizeof(datadealaction));

datadealaction.sa_handler=variabledata_upadata;

datadealaction.sa_flags=0;

sigaction(sigio,&datadealaction,null);

fcntl函数可实现对指定文件描述符的各种操作,f_setown设置当前接收sigio和sigurg信号的进程。

fcntl(async_aeyeirq_fd,f_setown,getpid());

1.3、字模数据处理

1.3.1、字模提取方案

使用者完成资料编辑后,喷码机系统需要根据资料信息提取出相应的字模数据,这是喷码机实现喷印不可绕开的重要环节。本文采用图片解析的字模提取方案:

用户在qt平台的图形视图框架下编辑资料信息后,直接转换为图片格式,再从图片中解析出字模数据。此种方法充分借助qt平台的图形视图框架,能较方便地实现资料信息的多样性,支持多行、个性化logo等类型,支持字高设置、字体选择、旋转、缩放等功能,实现所见即所印。

目前常见的图像格式包括gif、jpeg、png和bmp等,其中bmp图像格式最为简单、仅包括最基本的图像位图数据储存功能,每个像素可由1bit、4bit、8bit或24bit表示,适合高解析喷码机的字模数据处理,故本文选用像素深度为1bit的bmp图像格式存储资料信息。bmp位图文件由4部分组成:位图文件头、位图信息头、调色板和位图的颜色数据。表1为bmp文件的位图文件头和信息头定义。本文通过structbmp_infor结构体表示bmp文件信息,通过getbmpinfo函数获取bmp图像相关信息,通过bmp_read函数获取bmp图像位点数据。

表1

这种提取字模的方案,算法简单高效,不需要采用复杂的图像处理技术,并且能够支持多行信息喷印、多种字体选择、不同字高设置以及个性化logo喷印等,能够较方便实现图片的旋转与缩放等功能,有利于提高可变数据的更新效率,保证高解析喷码机的速度性能。

1.3.2、数据处理及传输

在开启喷印时,需要对字模数据进行二次处理。首先需要分析bmp图片大小并提取bmp图片的有效位点数据,若图像的垂直像素点大于150则必然造成图像失真或缺失,若提取的位点数据不正确则会导致喷印图像走形或错乱,需要进行校验和提示。由于bmp文件位图的数据存储方式是从图像的最下面一行,从左往右扫描,逐行往上,直至图像的第一行,根据dod喷印原理,需要进一步将字模数据按列重组。然后需要根据bmp文件的长度信息获取下位机喷印结束条件,将设置的喷印速度、喷印方向、喷嘴选择、编码器脉冲、连续喷印等参数按照协议要求生成数据包添加到字模数据之前。接着根据形成的数据包生成奇偶校验位,最后通过spi总线将数据包传输至下位机,根据回读的传输错误标志,判断是否需要再次发送。如果是可变数据喷印,则每喷印完一条资料信息,下位机通过异步通知机制要求上位机更新数据并发送新数据。字模数据处理及传输的流程图如图6所示。

2、定地址更新变量数据

本发明的一种基于嵌入式linux的高解析喷码机系统,为了实现可变数据更新时,只更新可变数据项,只对sdram存储器中指定地址区域进行字模数据替换。本发明提出一种定地址更新变量数据的方法,计算可变数据项存储地址,实现存储器内容的局部更新和精准替换,从而提高可变数据的喷印速度。

为了实现定地址更新变量数据需要完成以下三个步骤,第一需要识别出待喷印资料中所有的可变数据项并重新生成图片,第二需要计算出下位机sdram存储器中哪些地址区域需要被更新替换,第三下位机需要设计sdram地址控制器,以实现变量数据更新时能够精准写入指定的地址区域。

2.1、识别可变数据项

图7是用户编辑资料信息后,基于qt图形视图框架(graphicsviewframework)生成的bmp格式截图,像素深度为1bit,垂直方向上为150像素,资料由计数器、文本、生产日期、图案和不变qr码五部分组成,用户在编辑资料时,是以图形项为基本操作单元,上述5部分实际就是5个基本图形项。

为了识别出资料信息中的可变数据项,在用户编辑资料时,需要对每一项进行标记,本发明采用qt的图形视图框架实现资料编辑功能,对每一数据项的参数信息进行保存,包括类型、x坐标、y坐标、数据内容、长度、序号、旋转角度、字型、字高等基本参数,有效日期、计数器位数、计数器终值、纠错等级等特有参数。其中类型参数(variabletype)用于记录每个数据项的类型,数据项与variabletype变量的对应关系如表2所示,表中的计数器、生产日期、有效日期、可变二维码和可变条形码为可变数据项,普通文本、不变二维码、logo图案、不变条形码为固定数据项。

表2数据项与variabletype参数对应表

启动喷印后,系统根据variabletype识别所有的可变数据项,并获取其对应的参数信息,进行数据更新时,只需在qgraphicsscene场景中重新生成可变数据项的bmp图片,数据处理和数据传输都是基于仅包含可变数据项的bmp图片进行。比如喷印图7的资料信息,其中的可变数据项包括计数器和生产日期,进行可变数据更新时将重新生成图8所示图片,图中仅包含计数器和生产日期两个可变数据项,然后对其进行字模数据提取、处理与传输。

2.2、计算可变数据项地址

上位机首次向下位机传输字模数据时需要包括所有数据项,而数据更新时仅传输可变数据项的字模数据,为了实现sdram存储器局部更新和精准替换,需要计算每个可变数据项在存储器中的具体地址。

字模数据在sdram存储器中是按列存放,每列占用22个存储地址,以计算图7中的生产日期图形项的存储地址为例,其x坐标为488,y坐标为20,数据项高度为115,数据项长度为536,生成的字模数据被存储在sdram存储器的536个片段内,如果只更新图9中画框的区域,那么由于更新区域不连续,会使得可变数据项地址计算繁杂、效率低下,同时下位机sdram地址控制器也难以实现。

为了解决这一问题,本发明进行化繁为简,对可变数据项涵盖到的每一列都进行更新替换,比如图7中的生产日期数据项的更新区域为图10中两条竖线中间的全部区域,数据更新时替换sdram存储器中以10736为起始地址,长度为11792的连续存储区域,通过化繁为简可使更新区域地址连续化,方便存储地址的计算,使下位机sdram地址控制器实现起来更加简单。

当资料信息中有多行可变数据发生重叠时,可进行合并处理,以多行可变数据项中x坐标最小的参数计算起始地址,结合x坐标最大的参数计算更新长度,可避免重复更新。当资料信息中存在多行数据项并且有些是固定数据,有些是可变数据时,需要将固定数据的类型转换为可变数据类型,数据更新时也需要添加到qgraphicsscene场景中,避免数据更新时将固定数据项覆盖,导致喷印不完整。

2.3、sdram地址控制器设计及测试

按下启动喷印,上位机需要将可变数据项起始地址及数据更新长度等参数发送给下位机,下位机将参数写入到可变数据项起始地址寄存器和字模数据值寄存器。数据更新时,下位机通过字模数据计数寄存器对上位机发送的字模数据进行计数,把字模数据计数寄存器与字模数据值寄存器进行比较,如果相等则切换到下一可变数据项的起始地址,实现定地址更新变量数据。

最后,在linux下使用timeval函数对优化后的数据传输时间和数据处理时间进行再次测量。分两种情况进行实验,第一种资料长度为1000像素可变数据项占比为20%,第二种资料长度为1000像素可变数据项占比为50%,分别进行5次测量并计算每列平均所需时间,记录数据如表3和表4所示。当可变数据项长度占总资料信息长度20%时,优化后喷印每列平均所需时间为28.12μs。当可变数据项长度占总资料信息长度50%时,优化后喷印每列平均所需时间为61.35μs。

表3可变数据项占比20%的数据传输和处理测量时间

表4可变数据项占比50%的数据传输和处理测量时间

分析可知,通过定地址更新变量数据优化方案,可大大降低数据处理及传输时间。表5列出了优化前后喷印每列平均所需时间的对比,当可变数据项长度占总资料信息长度20%时,优化后比优化前节省了79.5%的时间,优化后喷印每列平均所需时间为28.12μs,小于喷头硬件支持的52.7μs,此时高解析喷码机的喷印速度由喷头性能决定。

表5优化前后喷印每列平均所需时间对比

3、qrcode二维条码编码优化

qr码的编码方法是将数据信息转换为二进制位流,用黑白模块组成的qr码符号进行表示。qr码设有1到40的不同版本,版本越高数据容量越大,对应的模块数就越多,版本1的qr码符号由21×21模块组成,每增加一个版本,纵向和横向各自增加4模块,所以版本40的qr码由177×177模块组成,表6为版本1至版本4的qr码数据容量。对于一组特定的数据信息,选择不同编码模式所得到的二进制位流是不一样的,编码过程需要选择最佳的编码模式,使得位流长度最优化,才能用最低版本的qr码符号表示最多的资料信息。

表6qr码数据容量

对于印刷领域而言,通常能印刷各种版本的qr码符号,而且由于印刷质量高,各种版本的qr码符号均能达到很高的可识别率,但对于喷码领域而言,喷头能支持的最大喷印高度有限,例如本发明的惠普热发泡喷头仅支持12.7mm的喷印高度,这就导致qr码符号版本的变化对qr码的可识别率影响很大。本发明针对这种情况,研究了qr码的编码原理,提出一种最佳编码模式选择算法,提高qr码编码密度,尽可能用最低版本的qr码符号表示最多的喷印资料信息,并编写一套适用于喷码机的qr码生成算法,提高了喷码机喷印的qr码的可识别率。

3.1、最佳编码模式算法

对一组输入数据,qr码提供了多种不同的编码方式,但采用不同模式所转换得到的二进制位流长度是不相同的。由于各模式的字符子集有重叠部分,例如数字可以选择数字模式、字母数字模式或者8位字节模式进行编码,字母可以选择字母数字模式或者8位字节模式进行编码,汉字也可选择8位字节模式或者中国汉字模式进行编码。对可用多于1种模式表示的数据字符进行编码时,需要进行最佳模式选择分析,qr码支持混合模式编码,即数据流开始转换时选择一种编码模式,数据流中间也可进行模式的切换,但是每一编码段均需要包括模式指示符,字符计数指示符,中国汉字编码段还需要包括汉字子集指示符。所以,最佳模式算法不仅需要考虑当前字符序列,也要考虑下一个数据序列以及模式切换所需要的开销。

本发明采用的最佳编码模式算法具体如下:

①选择初始模式

如果初始输入数据是中国汉字,并且字符数少于[2,2,2]个,其后紧跟8位字节专有子集数据,那么选择8位字节模式,否则选择中国汉字模式。

如果初始输入数据是在8位字节的专有子集中,那么选择8位字节模式。

如果初始输入数据是在字母数字的专有子集中,并且字符数少于[6,7,8],其后紧跟8位字节专有子集中的数据,那么选择8位字节模式,否则选择字母数字模式。

如果初始数据是数字,并且数字个数少于[4,4,5]其后紧跟8位字节专有子集中的数据,那么选择8位字节模式,否则如果少于[6,7,8]后紧跟字母数字专有子集中的数据,那么选择字母数字模式,否则选择数字模式。

②在8位字节模式中

如果有不少于[3,4,4]的中国汉字字符序列来自8位字节二进制字符集的专有子集的多个数据前,那么转至中国汉字模式。

如果有不少于[6,8,9]个数字出现在8位字节的专有子集数据前,那么转至数字模式。

如果有不少于[11,15,16]个字母数字专有子集中的数据出现在8位字节的专有子集数据前,那么转至字母数字模式。

③在字母数字模式中

如果有少于[2,2,2]个中国汉字出现并且后面紧跟8位字节专有子集中的数据,那么转至8位字节模式,否则转至中国汉字模式。

如果有8位字节专有子集中的数据出现,那么转至8位字节模式。

如果有不少于[13,15,17]的数字出现在字母数字专有子集的数据前,那么转至数字模式。

④在数字模式中

如果有少于[2,2,2]个中国汉字出现并且后面紧跟8位字节专有子集中的数据,那么转至8位字节模式,否则转至中国汉字模式。

如果有8位字节专有子集中的数据出现,那么转至8位字节模式。

如果有字母数字专有子集中的数据出现,并且字符数少于[6,7,8],其后紧跟8位字节专有子集中的数据,那么转至8位字节模式,否则转至字母数字模式。

3.2、软件实现与移植

在qrcode编码原理的理解与研究基础上,本发明基于qt为高解析喷码机量身编写qr码生成算法,其程序流程图如图11所示。

qr码的纠错码采用reed-solomon码,需要在伽罗华域对数据进行纠错编码,一开始需要完成gf(2^8)伽罗华域与实数域的映射表,为纠错码的生成做准备。数据编码的任务是将输入的数据转换为一串位流,位流中包括各编码段的模式指示符、字符计数指示符、数据信息位,终止位和填充位。输入的数据可能为数字、字母或者汉字等等,在进行二进制位流转换之前,需要进行最佳编码模式选择,本发明通过qrdatacodegene函数实现最佳编码模式选择并将输入数据转换为二进制位流,其流程图如图12所示,位流生成后将根据位流数和qr码的纠错等级确定qr码的版本。由于高解析喷码机支持的喷印字高仅为12.7mm,喷印高版本qr码会出现识别率低的情况,当qr码的版本大于4时,本发明设计的喷码系统会进行提醒并直接返回。不同版本的qr码的数据码块不一样,需要进行判断和分割,数据码块分割完成后再分别生成纠错码块,之后需要将数据码块和纠错码块布置到矩阵中。qr码只对编码区域进行掩模,所以掩模处理需要在布置完数据码字和纠错码字之后,在格式信息和功能图形布置之前,最后根据矩阵中的二进制数,采用qt的qpinter进行qr码符号的绘制。

为了使qr码符号的黑白模块更加均匀,同时为了避免出现类似功能图形的图案出现,需要进行掩模处理,国标中提供了8种掩模图形参考,在qr码生成过程中依次采用8种掩模图形进行异或运算,最后评价选取最优一种,评价过程将耗费较多的处理时间,降低了qr码的生成效率,本发明直接采用掩模0图形参考进行异或运算,不进行掩模评价,从而提高qr码的生成速度。

本发明采用实时更新的可变数据喷印实现方式,利用多线程和异步通知机制传递数据更新请求,基于bmp图像提取字模数据方法。然后提出一种定地址更新变量数据的方法,计算可变数据项存储地址,实现存储器中字模数据的局部更新和精准替换,提高了可变数据的喷印速度。接着阐述了二维条码的编码算法优化,提出一种qr码最佳编码模式选择算法,使得生成的二进制位流长度最优化,提高了qr码编码密度,实现以最低版本的qr码符号表示更多的资料信息。最后编写了一套适用于喷码机的qr码生成算法,并移植到高解析喷码上间接提升qr码的喷印质量,提高其可识别率。

以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1