激光头驱动架构及方法

文档序号:9929392阅读:980来源:国知局
激光头驱动架构及方法
【技术领域】
[0001]本发明涉及系统驱动架构领域,具体涉及一种激光头驱动架构及方法。
【背景技术】
[0002]T30智能采集终端系统是一款基于Wince6.0的定制系统。Wince系统在电力数据采集行业使用较为广泛。激光头作为数据采集的重要元件,在数据采集领域中有着庞大的使用量。
[0003]激光头驱动属于流驱动设备,目前的一般流驱动的架构及T30中激光头驱动的架构中,Wince6.0系统操作系统提供了流接口函数,如XXX_Init()、XXX_0pen()、XXX_Read()、XXX_ffrite()、XXX_Close ()等等。这一类的驱动由Device Manager来管理,它调用ActivateDeviceEx( )函数来加载流驱动。ActivateDeviceEx()的参数是注册表中相应的键,用来设定加载流驱动的属性,如Index、Order、Pref ix等等。流驱动的注册表配置信息一般存放在[HKEY_LOCAL_MACHINE\Drivers\BuiltIn]下。流驱动加载成功后,应用程序通过调用CreateFile()、ReadFile()、WirteFile()等来访问流驱动的设备。流驱动可以动态管理,驱动调试助手就是用来帮助调试这一类驱动的。
[0004]综上所述是流驱动的一般解决方案,下面分析它的利弊。
[0005]一般的流驱动能够满足激光头数据采集的需求。根据多年激光头使用经验,将激光头用一般流驱动进行实现会存在以下问题:
[0006]1.激光头驱动崩溃会导致系统device.exe崩溃,系统很多模块驱动将瘫痪。
[0007]2.激光头型号众多,在性能和使用方式上也存在差异,加大了用户程序编写难度。
[0008]3.一旦激光头型号更换,上层应用程序需要重新改写。
[0009]针对上述问题,本发明提出了新的激光头驱动架构及方法,并使用在T30智能采集终端中。

【发明内容】

[0010]为解决现有技术存在的不足,本发明公开了激光头驱动架构及方法,本申请对激光头的支持采用了新的架构和模式。该架构没有通过流驱动的方式实现,主要通过Windows服务技术进行实现。
[0011]为实现上述目的,本发明的具体方案如下:
[0012]激光头驱动架构,包括:统一接口模块、驱动管理模块及驱动模块;
[0013]所述统一接口模块用于接收用户层发送的命令并对该命令进行解析,并将解析后的数据发送至驱动管理模块;
[0014]驱动管理模块对解析后的命令进行分析并执行,执行命令时调用驱动模块,驱动模块驱动激光头的动作。
[0015]进一步的,所述激光头驱动架构应用在智能采集终端中。
[0016]进一步的,智能采集终端为基于Wince6.0定制系统的智能采集终端,带有采集设备,包括激光头、红外设备、蓝牙设备。
[0017]激光头驱动架构的工作方法,包括以下步骤:
[0018]步骤一:用户层发动命令至管理层;
[0019]步骤二:管理层分析命令并将分析结果发送至驱动层;
[0020]步骤三:驱动层执行命令驱动激光头并返回数据至管理层,
[0021]步骤四:管理层将激光头返回的数据返回至用户层,
[0022]步骤五:用户层接收激光头数据。
[0023]进一步的,管理层中设有只有用户层可见的API层,在系统Windows目录下添加动态库,在动态库中存储有提供给用户的激光头的调用函数,通过加载此动态库,然后利用提供的激光头调用函数实现对激光头的操作。
[0024]进一步的,API层通过系统信息中的硬件版本号来区分当前设备的型号,然后根据设备型号从驱动层调用相应的激光头驱动程序,驱动层编写激光头驱动程序时调用API层提供好的统一接口即可。
[0025]进一步的,驱动层中包含多个激光头的驱动程序,用于适应不同种类的激光头。
[0026]进一步的,在动态库中,通过增加和修改Wince系统的注册表下内容实现注册服务,Wince系统启动时services.exe进程会根据注册表中的配置信息自动加载动态库到内存中。
[0027]进一步的,动态库中定义了多个导出函数,当系统加载动态库时会首先调用相应的函数,在此API层中实现对激光头所用串口的初始化操作,当服务被卸载时会调用相应的函数,利用该函数实现对激光头进行了释放工作。
[0028]进一步的,在系统中添加第二动态库,第二动态库主要作用是给应用程序加载调用激光头,第二动态库存储了多个函数,激光头驱动程序运行在T30Service服务中,在第二动态库中通过相应的函数来获得T30Service服务的句柄,根据该句柄,使用相应的函数来访问运行在T30SerVice服务里的激光头驱动程序。
[0029]进一步的,第二动态库中,驱动层编程使用激光头前应先调用相应的函数初始化激光头,初始化激光头包括激光头型号的判断和激光头驱动和串口链路层的初始化。
[0030]进一步的,激光头型号的判断是通过设备硬件版本号进行的,硬件版本号是写在T30智能终端中的一组数字组合,该组数字组合每位代表不同的含义。首先去读取设备来获得硬件版本号,然后根据硬件版本号的命名规则分析这台智能终端的硬件配置,其中就有激光头型号的确定,一旦确定了激光头的型号,相应的函数调用T30SerViCe服务中与之类型相同的激光头驱动代码来初始化激光头驱动,最终完成激光头驱动的初始化。
[0031]进一步的,第二动态库中,还包括关闭激光头驱动的步骤,关闭激光头函数的主要逻辑也是调用到T30SerViCe服务里去释放激光头资源,不使用激光头模块时应该调用关闭激光头函数去释放激光头。
[0032]进一步的,第二动态库中,还包括使能激光头出光扫码并返回所扫描到的条码的步骤,当驱动层调用相应的函数时,该函数会根据初始化中判断好的激光头型号去调用相应的激光头扫码函数。
[0033]进一步的,第二动态库中,还包括设置激光头配置参数的步骤,对激光头的出光时间、扫码类型、安全等级均是用相应的参数来控制的,驱动层配置激光头的参数。
[0034]本发明的有益效果:
[0035]1.脱离流驱动,采用Windows服务技术实现=Windows服务运行流程是在系统开机后自动加载并在后台运行。当激光头驱动出现问题崩溃,服务会自动重启,不会影响到驱动device.exe。
[0036]2.多种型号的激光头驱动集成在服务中:常用的几种激光头驱动集成在了服务中,如明德Ue966和新大陆的Em3000等等。
[0037]3.智能调用正确型号的激光头驱动:为了区分各种不同型号的激光头,在T30系统中植入了硬件版本号这一机制。此机制原理是通过自助研发的写号工具向T30终端Flash中写入版本号。当调用激光头驱动时首先通过驱动版本号来判断激光头型号,然后API层会选择调用服务中的相应的激光头的驱动程序,最终实现智能化调用。
[0038]4.API层统一的激光头函数:针对用户层编程问题,API层屏蔽了激光头的型号问题,用户编程是用的是统一的激光头调用函数,如ZZ_LaSer_Init()等等函数接口。与激光头型号相关的复杂问题都在API层以下被处理了,保证了用户程序的可移植性。
【附图说明】
[0039]图1本发明的功能架构图;
[0040]图2本发明的方法流程图;
[0041]图3本发明的程序实现框图。
【具体实施方式】
:
[0042]下面结合附图对本发明进行详细说明:
[0043]T30全称T30智能采集终端,是振中公司推出的一款智能采集终端。该款设备主要在电力行业工作中使用。在T30智能采集终端系统中使用了新的激光头驱动架构。
[0044]智能终端T30实现了对各种外设的支持(如摄像头,wifi,蓝牙等等)。其中对激光头的支持采用了新的架构和模式。该架构没有通过流驱动的方式实现,主要通过Windows月艮务技术进行实现。
[0045]如图2所示,激光头驱动架构的工作方法,包括以下步骤:
[0046]步骤一:用户层发动命令至管理层;
[0047]步骤二:管理层分析命令并将分析结果发送至驱动层;
[0048]步骤三:驱动层执行命令驱动激光头并返回数据至管理层,
[0049]步骤四:管理层将激光头返回的数据返回至用户层,
[0050]步骤五:用户层接收激光头数据。
[0051]Windows服务是运行在后台没有界面的服务程序,Wince6.0服务程序的建立方法主要是按照规则编写动态库DLL文件,T30智能终端的激光头驱动就编写在T30Service.dll动态库中,然后通过增加和修改Wince系统的注册表HKEY_LOCAL_MACHINE\Services\Service下内容实现注册服务。这样Wince系统启动时services.exe进程会根据注册表中的配置信息自动加载T30Service.dll动态库到内存中。这就是T30Service后台服务的实现。
[0052]T30Service.dll一共定义了如下导出函数:
[0053]ZZS_Init()
[0054]ZZS_Deinit()
[0055]ZZS_0pen()
[0056]ZZS_Close()
[0057]ZZS_Read()
[0058]ZZS_Write()
[0059]ZZS_10Control()
[0060]以上函数就是T30Service.dlI中导出的接口函数。当系统加载T30Service.dll时会首先调用ZZS_Init(),在此API中我们做了对激光头所用串口的初始化操作,这样作保证了系统启动后会第一时间将激光头打开。与之相反的当服务被卸载时会调用ZZS_Deinit(),在这个函数对激光头进行了释放工作。这样就将激光头驱动完美融合在自定义服务T30SeriVice生命周期中,保证了激光头驱动运行在内存中。而且服务进程一旦崩溃就会重新启动,并不会影响到激光头和其它模块的使用。
[0061]以上所述会将激光头驱动运行在服务里,为了进一步方便
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1