APP下载

高解析喷码机嵌入式系统的设计与实现

2013-09-10王宏文王艺伶高维国

自动化仪表 2013年4期
关键词:驱动程序调用解析

王宏文 王艺伶 高维国

(河北工业大学控制科学与工程学院,天津 300130)

0 引言

随着消费者对产品的质量意识日益增强,政府相关部门不断出台新的法律法规对市场进行严格的规范和管理,加上进出口贸易规模的不断扩大,客观要求国内商品标示及识别技术与国际标准接轨。喷码机以其非触喷印的特点,非常适合在各种不同规格的产品本身或外表进行喷印,它适合自动化流水线的生产方式,使其成为各行业生产商的首选方式[1]。喷码机系统的发展正是嵌入式系统发展的典型代表。

针对早期高解析喷码机系统体积大、效率低、速度慢等缺点,本文开发出基于WinCE+ARM9的嵌入式系统。WinCE操作系统环境下的应用程序可直接进行数据处理,驱动程序传输数据,提供喷头所需信号。该程序完善精简了整个喷码机系统,提高了喷码效率,具备小型便携、通用性强、机动性高、可靠性好等特点;且光电编码器能够实现对传送带速度及方向的检测,实现了实时测控。

1 喷码机系统的硬件设计

按工作方式划分,喷码机可分为连续式喷印和按需喷印。但是连续式喷印废墨,质量较低,所以选择按需喷印的高解析喷码机[2]。高解析喷码机为无压力驱动工作,其通过墨水自身的重力自行喷出,喷印的字体类似于打印机,解析度高,字体清晰[3]。

1.1 工作原理

高解析喷码机的喷印头由一系列紧密排列的细小喷嘴组成,油墨从喷嘴中喷出,可以喷出喷嘴宽度的二进制二位图形。所以喷头每次所需的数据是可以喷印一列的数据,而位图数据信息是按照左下角到右上角的顺序排列的,所以在把位图转换成二进制位图后,需要旋转图形数据信息,才能够读出位图一列的数据。处理后位图的高低位的放置与喷头的串行接收数据方式相关,喷头在接收128 bit数据时,高位在前,所以在提取图像点阵数据时应把低位放在前面[4]。

1.2 系统硬件设计

赛尔(Xaar)公司的按需喷墨技术目前在包装印刷领域特别是条码标识喷印方面,日益成为一种主流技术。

喷印头技术也在迅速改进,更大的喷印头被研制出来,以适应更大的覆盖面,并具有更高的分辨率和更多的墨滴大小变化,以达到更好的喷印效果。系统采用的喷头型号是赛尔XJ128喷头。

1.2.1 总体硬件设计

喷码机系统采用天嵌TQ2440开发板。底板上必须包括的电路有:33 V供电电路、复位电路、Jtag电路和Nor/Nand启动选择电路,否则可能导致开发板不能正常启动。

处理器选用三星公司生产的具有ARM9内核的S3C2440,LCD选用天嵌14.33 cm触摸屏作为操作界面,开发板和喷头之间使用串行外设接口(serial peripheral interface,SPI)总线通信,主要用于将应用程序处理好的数据传输给喷头。喷头可以接收并喷印该数据,光电传感器用于检测传输带的速度和方向并反馈给处理器,定时器向喷头发送时钟信号。根据应用的需要,本系统采用了3种存储器:①NOR Flash,用于存放系统引导程序等;②NAND Flash,作为程序存储器,存放WinCE操作系统和应用软件等;③SDRAM,用作系统的内存。

系统硬件结构如图1所示。

图1 系统硬件结构框图Fig.1 Block diagram of the system hardware structure

1.2.2 SPI总线接口原理与协议

S3C2440A的SPI接口为串行数据传输接口。S3C2440A包括两个SPI接口,每个接口分别有两个8位的数据移位器用于发送和接收。传输8位串行数据的频率由相应的控制寄存器设置决定。同步信息移位和数据线的数据采集采用串行时钟线。SPI分主设备和从设备,两者通过SPI协议通信。SPI有4种模式,从设备的模式决定了主设备的模式。当主设备的模式和从设备相同时,即可正常通信[5]。

2 喷码机系统的软件设计

WinCE是高度模块化的嵌入式操作系统,用户可通过PB(PowerBuilder)工具根据具体的应用需要,选择需要的操作系统功能组件,然后生成操作系统运行时的映像,同时导出特定的软件开发工具包(software development kit,SDK)。

2.1 应用程序设计

高解析喷码机是点阵喷印,XJ128型号的喷嘴一列有128个喷眼,即喷印的图形需转换成一列共128个点(1代表有墨,0代表没墨),一次性向喷码机输送128个数据。

喷码机系统的应用程序按喷印信息分为6个模块,分别是中英文文本模块、位图模块、日期时间模块、有效期模块、序列号模块和条形码模块[6]。系统需要处理的对象分为矢量字体和位图。

对于矢量字体,需要将其转化为点阵以便喷码机喷印,系统利用API函数TextOut实现矢量字体的显示和转化。在微软基础类(Microsoft foundation classes,MFC)中调用 Create-CompatibleDc和 CreateDIBSection函数可以创建一个兼容DC和兼容位图,pDC->TextOut可以显示矢量字体,然后将这个DC保存为位图,就可以得到矢量字体的点阵数据[7]。

对于位图,尽管其已经是点阵数据,但是由于位图的位深度各有不同,而喷印需要的数据仅仅是一位图,因此为了可以喷印各种位图,必须先进行位图的数据处理。WinCE操作系统中的API函数是Windows API函数的子集,在MFC中同样没有可以处理数字图形的类,因此需要用类向导添加一个Cdib类,用于处理数字图形[8]。

主要成员函数如下。

数据处理完成后,将处理好的点阵数据存储到数组中,通过串口通信喷头进行字体喷印。

由于喷码机需要不断地传输二进制码,所以驱动程序是典型的流式驱动,WinCE提供流式接口驱动程序管理流式设备。在流式接口驱动程序中,驱动程序负责把外设抽象成一个文件,而应用程序则使用操作系统提供的API对外设进行访问[9]。下面是程序的部分代码。

数据处理流程图如图2所示,这一部分是喷码机应用程序的重要功能。

图2 数据处理流程图Fig.2 Flowchart of data processing

2.2 驱动程序设计

为了便于驱动程序的维护和移植,驱动设计采用分层驱动,包括模型设备驱动层(model device driver,MDD)和平台相关驱动层(platform dependence diver,PDD)。MDD层包含某一类型的驱动程序所通用的相关代码,PDD层包含特定的硬件或平台专用的代码。操作系统通过设备驱动程序接口(device driver interface,DDI)函数调用MDD,MDD通过设备驱动程序服务接口(device driver service interface,DDSI)函数调用PDD[10]。SPI驱动设计具体介绍如下。

操作系统需要通过DDI接口与驱动MDD层交互。MDD层暴露的DDI函数GetRegistryData用来得到保存在注册表中的硬件信息、获取通信模式、时钟极性、时钟相位以及分频值;函数InternalMapRegisters的功能是将SPI寄存器、GPIO寄存器、时钟寄存器物理地址映射为虚拟地址,方便系统的调用和统一管理。SPI_Open的功能为打开设备进行读/写操作,该函数在调用API函数CreateFile()时调用;SPI_Close的功能为关闭设备,该函数在调用API函数CloseHandle时调用。这些DDI函数需要调用PPD层暴露的DDSI函数实现与硬件的交互。分层驱动程序调用流程图如图3所示。

图3 分层驱动程序调用流程图Fig.3 Flowchart of hierarchical driver calls

MDD层通过调用DDSI接口函数实现与硬件的交互。PDD层中的HW_Init函数将MDD层获得的参数传递给SPI寄存器赋值,并且初始化模式和传输数据。SPI驱动程序传输数据流程图如图4所示。

图4 SPI驱动程序传输数据流程图Fig.4 Flowchart of SPI driver data transmission

当系统启动后,设备管理器就会枚举[HKEY_CAL_CHINEDriversBuiltIn]下的所有键值,并调用驱动的SPI_Init函数。如果函数调用成功,设备管理器就会将该驱动的信息写入到[HKEY_LOCAL_MACHINEDriversActive]。当系统不再使用该设备时,应用程序可调用DeactivateDevice()函数把该驱动程序卸载。设备管理器会负责将sampledev.dll从vice.exe的虚拟地址空间中移除,并且从HKEY_CAL_MACHINEDriversActive键下移除对该设备驱动的记录[11]。

3 试验结果

测试表明,系统稳定性强,喷印速度较快,喷印效果清晰。喷印图样如图5所示。

图5 喷印样品Fig.5 Printed samples

4 结束语

本文研究和开发了工业生产应用中的喷印控制系统,包括硬件系统模块化设计、图形处理、界面开发、SPI总线协议的实现、流式驱动程序的编写。系统将ARM9强大的处理和控制能力和WinCE的实时性、可剪裁性等特点结合起来,满足系统微型化、高性能、实时性强的要求。

[1]菲尔·依威斯.喷墨印刷技术的发展[J].印刷工业,2007(3):12.

[2]李小虎,王宝生.浅谈喷码机的使用和维护[J].包装与食品机械,2006,24(5):50 -52.

[3]姚晶,王尚伟.数字化喷码技术的应用与发展[J].丝网印刷,2007(2):40-42.

[4]方耀祥.基于FPGA的高解析喷码机控制器设计与实现[D].长沙:湖南大学,2007.

[5]陈淑珍,石波.基于Windows多线程环境下的串口通信[J].武汉大学学报:自然科学版,2000,15(3):373 -374.

[6]曹景胜,霍春宝,王海星,等.基于WINCE的高解析喷码系统上位机设计与实现[J].辽宁工业大学学报:自然科学版,2010,30(5):281 -284.

[7]周师亮.嵌入式喷印系统的设计与实现[D].长沙:湖南大学,2005.

[8]周长发.精通Visual C++图像处理编程[M].北京:电子工业出版社,2006.

[9]秦红勇,魏守水,徐从娟,等.基于ARM 和WinCE系统的圆图无纸记录仪的设计[J].自动化仪表,2011,32(2):81 -83,86.

[10]何宗健.Widows CE嵌入式系统[M].北京:北京航空航天大学出版社,2006.

[11]莫雨.WindowsCE大排档[M].北京:北京航空航天大学出版社,2011.

猜你喜欢

驱动程序调用解析
三角函数解析式中ω的几种求法
核电项目物项调用管理的应用研究
阻止Windows Update更新驱动程序
系统虚拟化环境下客户机系统调用信息捕获与分析①
计算机硬件设备驱动程序分析
睡梦解析仪
电竞初解析
对称巧用解析妙解
利用RFC技术实现SAP系统接口通信
妙用鼠标驱动