关键词:并口,增强型并口,窗口驱动模式,数据采集
1 引 言
在目前一些流行的上位机和数据采集设备组合的数据采集系统中,数据采集设备和上位机的通讯是一个比较关键的技术。一般的应用系统设计中,数据通讯技术主要采用串行异步通讯方式,但其传输速率受到限制,通常最高波特率设定在9600bps左右〔1〕。而在一些数据采样率比较高的场合,如每秒20k~2M字节的数据通讯速率,使用串口通讯技术是远远达不到要求的,这就需要使用更为快速的数据通讯方案。目前比较合适的通讯技术还有并口和USB通讯方案。本文主要探讨并口的通讯在数据采集中的运用。
当前许多并口数据采集系统都基于Windows98系统平台,由于该系统可以直接访问并口硬件资源,在上位机软件方面比较容易,因此很少被详细而深入地探讨。但随着Windows2000/WinXP操作系统逐渐成为主流的桌面系统,而该操作系统为了保证其稳定性,主机的上层应用程序将无法直接访问并口,这就需要在Windows2000新的窗口驱动模式WDM下,基于Windows2000中现有的驱动体系,开发专有的并口数据采集设备驱动,以支持上位机采集软件的开发和运行。
2 EPP并口通讯
并口通讯技术经历多年的发展,现在已经形成了统一的1284标准。在这个标准中,目前定义了5种并口通讯模式〔2〕〔3〕,见表1。
其中,EPP和扩容并口(Extended ParallelPort,ECP)模式支持双向数据传输,数据传输速率都能够达到1Mbyte/s以上,显然是满足一般的数据采集要求的,这两种模式是一般并口外设和主机广泛支持的并口工作模式。由于EPP模式的操作时序简单,本文将其作为首选数据通讯模式。
而基于EPP协议的硬件和通讯设计,本文主要依据并口通讯的特点,采用中断上传方式,即外设通过nIntr中断来通知主机采集数据上传准备就绪,主机捕获中断后立即从并口读取数据。
由于并口的频繁中断使得系统不稳定,因此,在启用并口中断的时候,一定要尽量减少并口中断的频率,在这里就是要增加每次中断处理的数据传输量。一般的方法是外设采用容量较大的先进先出队列(First InFirst Out,FIFO),并在一次中断中,将这些数据上传主机。
基于EPP协议的硬件设计已经在许多文章得到探讨,这里不再赘述。
3 Windows2000下并口数据采集的软件设计
在Windows2000/WinXP系统中,考虑到系统的稳定性,应用程序已经无法直接访问和操作并口。同时虚拟设备驱动(Virtual Device Driver,VxD)也将为Windows2000下的更为先进的窗口驱动模式体系所取代,因此要在Windows2000/WinXP系统下进行并口数据采集设备的软件开发,就必须进行并口设备的WDM驱动的开发。
3.1 Windwos2000驱动体系
图1显示了在Windows2000/WinXP系统中应用程序调用执行一个硬件的操作的基本过程,从中我们可以看到驱动的位置及其所起到的作用。
WDM是微软公司在Windows NT驱动程序体系的基础上,提出的一个新的设备驱动程序体系。WDM不仅支持即插即用、电源管理、WMI(WindowsManagement Instrumentation)等功能,它强调驱动程序的分层和模块化,拥有更强的可扩展性和可移植性,使用更加灵活,运行更加安全,开发更加快捷,同时,可以很轻易地移植到不同的平台上运行。
3.2 WDM驱动程序的种类和结构
WDM的驱动程序是分层的,一般按照层次分为高层、中间和底层三类〔4〕。顾名思义,高层驱动程序依赖于中间和底层驱动程序完成工作,而中间驱动程序又依赖于底层驱动程序来完成工作。
高层驱动程序主要为请求者提供非物理的抽象,并一次转换为特定的设备请求。比如文件系统驱动程序(File SystemDriver,FSD)。
中间驱动程序是驱动中相对比较丰富的领域,包括了诸如磁盘镜像、类驱动程序、微型驱动程序和过滤器驱动程序。这些驱动程序穿插在高层抽象层和低级物理支持之间。其功能多样,实现方式灵活。
底层驱动程序主要包括诸如硬件总线的控制器等的驱动,这些驱动直接与Windows的硬件抽象层(Hardware Abstract Layer,HAL)和硬件交互,它们包括了物理驱动程序的概念,这些物理驱动程序与一个或多个功能驱动程序发生作用。
3.3 Windows2000中的并口系统驱动环境
Windows2000中已经为并口提供了一些默认的系统驱动,其中一个是Parport,另一个是Parclass,它们的执行映像文件分别对应Parport.sys和Parallel.sys。
Parport是Windows2000提供给并口的系统功能驱动程序,不可取代,它支持WDM的所有的基本特性,负责为每个并行端口创建一个命名的Parport设备对象,并且为每个Parport设备对象分配一个工作队列。同时还与并口设备类驱动如Parclass或其他特定的并口设备功能驱动程序紧密配合,为它们提供如下的服务功能:
(1)并口使用的资源,如端口、中断等等资源。
(2)总线接口信息。
(3)给其他驱动提供一些回调过程的指针,通过这些回调过程可以控制一个并口设备。
Parclass是挂接在并口上的并口设备的类驱动,它依赖于Parport提供的服务,同时,它也是一个即插即用的并口设备的总线驱动。Parclass首先创建一个总线功能设备对象,它代表一个硬件独立的Parclass总线控制器,同时为每个挂接在并口上的即插即用设备在Parclass总线上创建子对象,或者直接为并行端口创建一个遗留设备对象。
同样,Parclass也给一些更高层的驱动程序提供一些回调过程和内部IO控制指令,以控制和访问Parclass总线下的子设备。Parclass目前支持对Parclass子设备的裸访问,同时支持的并口模式有标准并口、IEEE1284兼容并口、ECP和EPP并口等。
以上两个驱动是Windows2000/WinXP系统中为并口以及并口设备提供的系统驱动程序,它构成了其他并口以及并口设备驱动开发的基础和环境。
3.4 并口采集驱动的设计
并口数据采集驱动的结构设计主要如图2所示。
本文并口数据采集驱动程序结构设计主要有以下要点:
(1)为了避免驱动程序设计过于复杂,减少驱动调用的层次,本驱动直接构建在并口驱动程序Parport之上,而没有在Parclass上构建本文的驱动,直接利用Parport提供的基本的并口操作实现本文驱动的功能。
(2)驱动工作在EPP高速通讯模式。
(3)驱动不采用轮询模式去查询并口,而是等待并口外设的中断事件,通知主机外设数据上传准备完毕,驱动中断伺服例程或者延迟例程,完成并口设备采集数据的读取。
(4)本系统没有数据的双向通讯,对上层应用程序和驱动程序而言,只有驱动程序到应用程序的数据流,因此它们之间的通讯模式采用了事件模式,即驱动在采集数据到达或者数据缓冲区已满时,通过事件通知上层应用程序,再由上层应用程序来从驱动的系统缓冲区中读取采集上来的数据。
3.5 并口驱动的实现
并口驱动的实现主要是按照WDM驱动的规范和接口来实现,这些接口有层次的分为如下几个部分:驱动程序的初始化(DriverEntry入口函数)和卸载例程(DriverUnload)、驱动设备的添加例程(AddDevice)和主要IO请求的派发例程、即插即用(Plug and Play,Pnp)处理例程(其中包括驱动设备的启动、停止和卸载等等子例程)、控制IO子请求的处理例程、电源管理处理例程、WMI和NT事件通知处理例程。驱动的设计的和实现在许多书籍和文章上都有详细的介绍〔4〕〔5〕,其一般通用的设计和实现这里不再赘述。这里主要阐述一些与并口操作有着紧密联系的关键实现。
3.5.1 并口的获取和访问
在Windows2000操作系统中,并口驱动Parport自动为每个并口生成一个设备对象,一般最常用的一个并口设备对象的内部设备名为“\Device\ParllelPort0”,本驱动就是通过这个内部设备名来获得并口对象的。同时,应该注意在设备的卸载时删除相应的并口设备指针。得到这个设备对象后,就可以通过内部控制IO请求和回调函数来控制并口操作。具体代码如下
在获得并口对象之后就通过底层的Parport驱动发送内部控制IO IOCTL INTERNAL PARALLEL PORT ALLOCATE,或者也可以调用PARALLEL PORT INFORMATION的PPARALLEL TRY ALLOCATE ROUTNE例程来占用并口,这样驱动程序就可以获得并独占并口的资源,与并口数据采集设备通讯了。
3.5.2 并口模式的设置
首先这里强调的是,主机的并口必须支持EPP模式的通讯方式,具体地说,就是主机的基本输入输出系统(Basic Input Output System,BIOS)中要将并口模式设置为EPP模式或者EPP+ECP混合模式。在此基础之上,驱动程序才能正确设置并口工作模式。一般在EPP模式下时,驱动不用设置并口工作模式,但如果在EPP+ECP工作模式下,则需要驱动程序检测并设置并口工作模式,这时就需要通过向Parport驱动程序发送IOCTL INTERNAL PARALLEL SET CHIP MODE内部控制IO,或调用TrySetChipMode回调例程设置并口为EPP工作模式。同时,应注意如果BIOS中设为EPP+ECP混合模式,在卸载本驱动设备后要将并口模式恢复为原有的模式。
3.5.3 并口中断的挂接
挂接并口中断,不推荐直接调用IoConnectInterrupt例程,而只需要向Parport驱动程
序发送内部控制IO(IOCTL INTERNAL PARALLEL CONNECT INTERRUPT)来挂接所指定中断例程。
3.5.4 并口驱动与应用程序的通讯
主要的方法就是由上层应用程序创建一个事件,然后通过IO MJ DEVICE CONTROL的设备控制IO将此事件句柄作为一个参数传给驱动程序,之后应用程序本身就进入等待这个通知事件触发的状态之中。驱动程序获得这个通知事件句柄,将其保存在自己的设备扩展之中,当并口有数据到达需要向上层应用程序发送数据的时候,就触发这个事件,则上层应用程序将会得到通知,继而从驱动中读取数据。
4 结束语
本文驱动是在Windows2000设备驱动程序开发包(Device Drivers Kit,DDK)和VC6下开发完成的,由Numage公司的SoftIce调试工具调试通过。
本驱动程序采用了增强型并口模式作为并口设备驱动的工作模式,此模式下并口开发相对比较容易,而且极大地扩展了并口通讯容量和速度。同时,本驱动构建在Windows2000为并口提供的系统功能驱动Parport之上,通过Parport提供的各项功能来访问和控制并口,既减少了本驱动的开发的难度,又增强了系统的整合性和稳定性。目前,实测数据采集速率峰值达到1Mbyte/s以上,稳定运行时也可达到400K~500Kbyte/s的速度,同时,上层的应用程序耗用的资源相当少,运行平稳,效果良好,为Windows2000/WinXP系统下开发并口数据采集设备的软件系统提供了一些有意义的尝试和经验。
参考文献
2 IEEEStd 1284-1994.IEEEStandard Signaling Method fora Bidirectional Parallel Peripheral Interface for Personal Computers.1994
3 宋大雷,张东来,等.IEEE1284标准简介.电子计算机与外部设备,2000,24(1):21~24
4 (美)Art Baker,Jerry Lozano著.Windows2000设备驱动程序设计指南.施 诺,等译.北京:机械工业出版社,2001,9:8~10
5 姜 江,柳 泉,等.基于Windows2000的WDM设备驱动程序的开发.应用科技,2002,29(7):45~47
评论
查看更多