王宏文,王志华,李晓燕
(河北工业大学 控制科学与工程学院,天津 300130)
王宏文(教授),主要研究方向为现代传动控制系统与智能化工程装备、单片机与嵌入式系统。
喷码机是一种通过软件控制,使用非接触方式在产品上进行标识的设备。它能够以非接触、高速、墨水快于的方式准确地在不同材料(如金属、玻璃、塑料等)的物体表面喷印商标、防伪图案、生产日期、保质日期、批号、规格、条形码等标识。喷码机一般均具备自动计数、时间日期自动更新等功能,广泛应用于饮料、食品、烟酒、医药、化工、电子电器、铝塑管材等行业。随着喷码机的普及,喷码技术也呈现出智能化、人性化、中文化以及高处理能力和低维修率的趋势。
本文通过测试8位单片机W77E58控制下的喷头输入/输出波形,获得喷头工作原理,编写喷头的驱动程序,添加人机交互模块,使喷码机能够在脱离上位机的情况下喷印信息。
通过对喷码机控制系统的研究,分析了在其实现过程中的关键技术,研究并设计关键技术的实现细节,包括上下位机数据传输方法、打印数据转换算法、喷头的控制。
喷码机喷头接收的数据为电压值矩阵,打印信息包含了数字、图片、文字等,首先将打印信息经过一定的算法转换成点阵数据,点阵数据中的点根据自己所处位置转换成相应的电压值,这些电压值就是打印的时候所需的数据。
打印信息转换成点阵信息需要借助于点阵字库。点阵字库是一个数据文件,在这个数据文件里面保存了汉字字符或者英文字符的点阵数据。点阵字库是把每个字符都分成x×y个点,每个点的虚实用一个二进制位来表示,虚用0表示,实用1表示。汉字点阵字库是根据区位码的顺序进行存储的,因此可以根据区位码来获取一个字符的点阵在字库中的存储位置,获取点阵起始存储位置后,就可以从这个位置读取出一个字符的点阵信息。例如若需要喷印一个16×16的中文汉字“好”,根据汉字点阵结构,“好”字的点阵结构如图1所示,图中左上角虚线中为该16×16点阵汉字的逐列扫描方式下的一个字节数据,其高低位的放置需要根据喷头的串行接收数据方式相关,喷头在接收128位数据时,高位在前,所以在提取图像点阵数据时应把低位放在前面,该汉字点阵左上角虚线中的字节如图1右半部分所示,其十六进制值为0x10。
图1 汉字点阵
喷头接收喷印信息和反馈信息是通过串行通信完成的。串行通信需要专门的接口控制器,由于CPU与接口控制器之间按并行方式传输,接口控制器与外设之间按串行方式传输,因此在串行接口中,必须要有“接收移位寄存器”(串→并)和“发送移位寄存器”(并→串)。
RS-232的流控制分为两种,分别是硬件流控制和软件流控制。本文RS-232通信采用软件流控制方式。实现软件流控制,必须有接收缓冲,当接收端的输入缓冲区内数据量超过设定的高位时,就向数据发送端发出XOFF字符,发送端收到XOFF字符后就立即停止发送数据,当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出XON字符。发送端收到XON字符后就立即开始发送数据。
WinCE下开发串口通信,首先打开串口并进行初始化。使用创建文件函数CreateFile打开指定的串口,以获取串口操作句柄m_hComm,如果打开成功,读取串口的DCB结构体变量,根据需要通过DCB对串口进行相应的设置。调用函数SetupComn设置接收与发送的缓冲区大小,调用SetComnTimeouts函数设置串口接收与发送超时参数,用函数PurgeComn函数清除该串口的收发缓冲区。然后可以调用函数ReadFile和WriteFile对串口进行操作。串口使用函数CreateThread创建串口接收线程。以下为串口通信部分代码:
本文主要涉及的硬件是由赛尔(XAAR)公司生产的XJ128按需喷印喷头,喷头前有一列共128个喷嘴,并以“二态”形式动作,即数据传输为1时喷墨,为0时不动作。其电气接口共有30个引脚,但是其中有10个是保留接口,8个为电源和接地引脚。其他12个引脚为信号引脚。电气接口与主控制电路的连接采用15针的RS232串行通信,为了方便操作和便于连接,其内部采用转换电路,把30针引脚转换为15针。以下为15针引脚的信号说明:
1 GNDH电源高压地线
2 MISO输出串口数据输出
3 VDD电源5V逻辑供电
4 nRESET输入驱动芯片逻辑复位
5 VPPH电源35V高压供电
6 nFIRE输入点火触发信号
7 CLK输入系统主时钟
8 PHO输入相位序列选取
9 SCK输入时钟信号,nSS2输入 MOSI/MISOA芯片
10 选取芯片2
11 READY输出“准备就绪”信号,nSS1输入 MOSI/MISOA芯片
12 选取芯片1
13 MOSI输入串口数据输入
14 nFAULT输出高温预警信号
XJ128喷头的内部有两个64位的数据移位寄存器,通过MOSI引脚给喷头传输数据时,当READY信号变为低电平时,先选中片选信号nSS2,128位数据中的高64位数据暂存在数据寄存器中,再选中片选信号nSS1,低64位数据存在另一个寄存器中。数据装载完成后,就可以触发nFIRE信号,使寄存器中的数据喷出。MOSI引脚配合SCK的上升沿就可将数据装载到寄存器中。由于喷头中的寄存器是双缓冲移位寄存器,所以可以在喷印的同时,给寄存器装载下一组要喷印数据。采用日本HIOKI 8855记忆示波器分组采样对比15通道的信号波形,测试出通道信号如图2所示,图3为XJ128喷头的控制时序图。
图2 通道信号测试图(部分)
图3 XJ128喷头的控制时序图
本设计的软件设计部分主要由驱动、应用程序设计组成,其系统软件结构如图4所示:
图4 软件结构图
上位机应用软件作为用户对系统进行人机交互操作的桥梁,是整个喷码机系统中重要的一环。上位机应用软件向用户提供符合其操作习惯的友好界面,丰富的交互信息提示。根据喷码机的特点,本系统的应用软件主要包括三个子系统:编辑界面子系统、系统设置子系统、打印控制子系统。
2.1.1 编辑功能的设计
编辑界面的功能主要实现信息的创建,或对已有信息进行编辑。在编辑界面,用户可以编辑自己想要打印的信息,可以在打印信息位置插入序列号,日期时间,文字,图片等,可以对信息进行具体的设置,比如字体的格式、大小、信息反转、打印次数。图5为条形码属性编辑对话框。
图5 条码属性编辑
2.1.2 打印控制功能的设计
打印控制功能主要包括打印速度的设定,打印喷头的选择,打印信息的状态。有些信息并不是固定不变的,比如在信息中插入时间信息和序列号。这样每条打印信息会随着时间和打印信息条数实时改变。用户可以通过打印信息界面清楚观察到打印信息的变化情况,并且可以停止或者启动当前打印、编辑当前打印信息或者重置打印计数器等操作。图6为打印信息状态窗口。
图6 打印信息状态
2.1.3 系统设置功能的设计
系统设置子系统提供一个喷码机系统工作特性设置的界面,包括喷头与串口选择、语言文件的选择等,如图7所示。产品打印计数器设置界面可以选择计数器、设置计数初值、累计值等参数。
图7 系统选项
WinCE提供流式接口驱动程序管理流式设备。在流式接口驱动程序中,驱动程序负责把外设抽象成一个文件,而应用程序则使用操作系统提供的API对外设进行访问。当系统启动后,设备管理器就会枚举[HKEY_LOCAL_MACHINE\Drivers\BuiltIn]下所有键值,并调用相应驱动的XXX_Init函数。如果函数调用成功,设备管理器就会将该驱动的信息写入[HKEY_LOCAL_MACHINE\Drivers\Active]。WinCE提供流式接口驱动程序管理流式设备。应用程序使用文件API对设备进行访问,文件API被操作系统转发到FileSys.exe进程中,然后FileSys.exe发现是对设备的操作,就会把执行交给设备管理器处理;接着设备管理器根据具体的请求,调用流式接口驱动程序中暴露的接口。最终,驱动程序负责与硬件交互。以下是驱动程序中部分函数:
驱动除了进行数据传递之外,还要向喷码机提供时钟信号,发出点火信号等,以下是与喷头连接引脚的寄存器设置:
当系统不再使用该设备时,应用程序可调用DeactivateDevice()函数把该驱动程序卸载。设备管理器会负责将sampledev.dll从device.exe的虚拟地址空间中移除,并且从 HKEY_LOCAL_MACHINE\Drivers\Active键下,移除对该设备驱动的记录。
本文设计了一款基于S3C2440处理器和WinCE操作系统下的高解析喷码机图形编辑软件。采用模块化的编程分别实现了模块的功能,并编写了喷头的驱动程序,界面设计简洁美观,便于用户操作,具有很好的应用前景。
[1]方耀湘.基于FPGA的高解析喷码机控制器设计与实现[D].长沙:湖南大学,2008:8-13.
[2]庄晓奇,张莉君,方敏.基于ARM9的嵌入式喷码机控制系统设计与实现[J].计算机测量与控制,2010,18(8):1799-1801.
[3]陈诚.连续喷墨式喷码机的设计[D].武汉:武汉理工大学,2009:9-39.
[4]谢剑操.基于ARM7的喷码机控制系统开发[D].杭州:浙江大学,2006:1-27.
[5]曹景胜.基于WINCE的高解析喷码系统上位机设计与实现[J].辽宁工业大学学报,2010(5).
[6]汉字点阵字库原理[OL].[2013-10].http//blog.csdn.net/zixu/article/details/2045164.
[7]何宗健.Widows CE嵌入式系统[M].北京:北京航空航天大学出版社,2006.