您的位置:控制工程论坛网论坛 » 电机与运动控制 » 基于PCI总线运动控制卡WDM驱动程序设计

jshfq

jshfq   |   当前状态:在线

总积分:17995  2024年可用积分:0

注册时间: 2007-08-06

最后登录时间: 2013-11-04

空间 发短消息加为好友

基于PCI总线运动控制卡WDM驱动程序设计

jshfq  发表于 2008/7/24 7:42:32      788 查看 0 回复  [上一主题]  [下一主题]

手机阅读









基于PCI总线运动控制卡WDM驱动程序设计

 
摘  要: 本文给出了一种使用DriverStudio设计WDM驱动程序的方法,用以实现数控系统应用程序对运动控制卡的访问。文中以基于PCI总线的运动控制卡为对象,在构架其硬件结构的基础上,阐述了设计WDM驱动程序的主要步骤,开发了WDM驱动程序,在Windows环境下进行测试,达到了预期目的。 


关键词:WDM; PCI; DriverStudio


0 引言


  目前,开放式数控系统正得到日益广泛的应用,其中,基于Windows和PC机的开放式数控系统将成为数控技术发展的趋势。本文研究的数控系统采用NC嵌入PC的开放式结构,并以Windows 2000操作系统为平台。NC嵌入PC型数控系统是指将运动控制卡插入计算机的扩展槽中,由PC机完成非实时性处理任务,实时控制则由运动控制卡来承担。由于在Windows环境下,用户态的应用程序不能直接访问硬件,而要通过调用执行于核心态的设备驱动程序间接地访问硬件资源,因而,应用程序要对该数控系统中的运动控制卡进行访问,必须为其开发设备驱动程序。


  本文以该数控系统中基于PCI总线的DSP运动控制卡为研究对象,主要讨论该运动控制卡在Windows 2000环境下的WDM驱动程序的设计。


1 WDM驱动程序的结构及开发工具简介


  1.1 WDM驱动程序的结构


  Windows Driver Model (WDM)驱动程序是一种PnP(即插即用)驱动程序,它同时还遵循电源管理协议,并能在Windows 98,Windows 2000和Windows XP间实现源代码级兼容。在WDM驱动程序模型中,每个硬件设备至少有两个驱动程序。其中一个驱动程序称为功能驱动程序,负责初始化I/O操作,处理I/O操作完成时带来的中断事件,并为用户提供一种连接设备的控制方式;另一驱动程序称为总线驱动程序,它负责管理硬件与计算机连接[1]。


  WDM驱动程序采用分层的结构模型,如图1所示[2]。图1中左边是一个设备对象堆栈,设备对象是操作系统为帮助软件管理硬件而创建的数据结构。处于堆栈最底层的设备对象称为物理设备对象,简称为PDO。在设备对象堆栈的中间有一个对象称为功能设备对象,简称为FDO。在FDO的上面和下面还会有一些过滤器设备对象,简称为FiDO。位于FDO上面的过滤器设备对象称为上层过滤器,位于FDO下面的过滤器设备对象称为下层过滤器。在单个硬件的驱动程序堆栈中,总线驱动程序管理计算机与PDO所代表的设备的连接。功能驱动程序管理FDO所代表的设备。过滤器驱动程序用于监视和修改I/O请求包(IRP)流。



点击看大图
图1 WDM设备对象和驱动程序的层次结构


  1.2 开发工具简介


  开发驱动程序的软件很多,如NuMega公司的DriverStudio、Jungo公司的WinDriver和Microsoft公司的DDK等。在使用中,虽然利用DDK开发的驱动程序代码非常简洁,结构清晰,效率也高,但是开发难度较大[3]。利用DriverStudio、WinDriver等第三方开发工具则使用简单,开发速度较快。因此选用NuMega公司提供的DriverStudio作为开发工具。


  NuMega公司的DriverStudio是一套用来简化微软Windows平台下设备驱动程序的开发、调试和测试的工具包。DriverStudio包括DriverWorks、DriverNetworks、SoftICE和VToolsD等工具模块。其中,DriverWorks包含一个非常完善的源代码生成工具(DriverWizard)以及相应的类库和驱动程序样本,它提供了在C++下进行设备驱动程序开发的支持。


2 运动控制卡的硬件结构


  所设计的运动控制卡采用TI公司的TMS320LF2407 DSP芯片为核心处理器。该运动控制卡的硬件系统包括PCI接口子模块、数字信号处理器(DSP)子模块和轴控制接口子模块。


  该运动控制卡的PCI接口采用PLX公司的PCI9052接口芯片,这是PLX技术公司为扩展适配板卡推出的能提供一种混合高性能PCI总线目标模式的接口芯片。它可与多种局部总线相连,并具有异步操作、中断产生器、FIFO等特点。运动控制卡与上位PC机通过PCI总线进行连接,PCI接口子模块通过双端口存储器RAM器件IDT7026与DSP子模块连接。双端口存储器(RAM)是一个双向FIFO数据存储器,起数据缓冲的作用。轴控制接口子模块则通过CPLD(复杂可编程逻辑器件)与DSP子模块连接。运动控制卡硬件结构示意图如图2所示[4]。



点击看大图
图2 运动控制卡硬件结构示意图


3 运动控制卡驱动程序的设计


  使用DriverWorks为该运动控制卡开发WDM驱动程序主要有三个步骤:创建WDM驱动程序框架;实现驱动程序的具体功能;生成WDM驱动程序。下面是借助DriverWorks设计运动控制卡WDM驱动程序的具体方法。


  3.1 使用DriverWizard生成WDM驱动程序框架


  DriverWizard是DriverWorks创建WDM框架程序的工具。在创建一个PCI设备的WDM驱动程序框架时,共有十一步,其中以下几点需特别注意:


  (1)第四步:选择硬件设备所支持的总线类型,这里选PCI,并根据具体硬件填写PCI Vendor ID、PCI Device ID、PCI Subsystem ID和PCI Revision ID。这些参数可以从硬件生产厂家得到,如果所填写的参数和目标PCI设备寄存器中不一致的话系统将安装不上此驱动程序。


  (2)第六步:选择驱动程序支持的功能项,选中Read、Write、Device IO Control和Clean up四个复选框。


  (3)第七步:选择I/O请求IRP处理的方式,选择DriverManaged,由驱动程序管理的StartIO处理排队队列,并选择读写请求分别进行排队队列处理。


  (4) 第九步:选择设备文件中的类名和接口类型,类名通常取默认值,选择GUID接口方式作为应用程序打开设备的方式。在资源栏中分别点击Add IO Port (s)、Add Memory Range. . .和Add IRQ. . .声明所需的资源。


  (5) 第十一步:为了调试方便和更好地了解WDM驱动程序的运行过程,选择让系统生成控制台测试程序和用SoftICE调试的跟踪代码 (Trace Code)。


  至此,驱动程序框架已形成。DriverWizard生成了两个类:一个是驱动程序文件中的类,主要完成WDM的DriverEntry和AddDevice例程;另一个是设备文件中的类,主要完成与硬件交互的例程。


  3.2 驱动程序功能的实现


  DriverWizard创建的WDM驱动程序框架中包含了很多例程。这些例程可分为两种:必需的基本例程和根据需要可选择的扩展例程。根据需要修改相应的例程即可实现该运动控制卡驱动程序的具体功能。


  3.2.1初始化驱动程序——DriverEntry例程


  DriverEntry例程负责驱动程序的初始化,所有的驱动程序都必须包含DriverEntry例程。当装载驱动程序时,PnP管理器为每个驱动程序调用一次DriverEntry例程。DriverEntry用以初始化驱动程序范围的数据结构和资源。


  DriverEntry例程主要有以下三个功能:


  (1) 设置AddDevice、Unload、Dispatch和其他例程的入口指针


  (2) 可以从注册表中获取一些必要的信息以初始化驱动程序


  (3) 初始化其他的在驱动程序范围内的数据结构和资源


  3.2.2 串行读例程——SerialRead例程


  在该驱动程序中,对IRP进行串行处理采用的是由驱动程序管理的IRP队列。当硬件设备处于忙状态时,将IRP排队;当硬件设备处于空闲状态时,将排队的IRP取出处理。SerialRead例程是扩展例程,向SerialRead例程中添加功能代码就可以实现PC机对运动控制卡的串行读操作,应用程序可以通过该WDM驱动程序读取双端口RAM中的数据及参数。


  3.2.4 串行写例程——SerialWrite例程


  在该驱动程序中,要实现PC机对运动控制卡的串行写,需要使用SerialWrite例程。串行写操作主要负责处理运动函数原型的解读,并将解读后的指令写入双端口RAM中。


  3.3 生成WDM驱动程序


  设计完成后的WDM驱动程序将生成一个工作区 (Workspace)和两个工程 (Project),生成的工作区包括了驱动程序工程和应用程序工程。分别选择两个工程,并分别将其设置成为当前活动工程,用Visual C++6.0对其进行编译。对于驱动程序的编译,不用进行任何设置,单击Build图标即可生成后缀名为.sys的驱动程序文件。


4 运动控制卡驱动程序的安装与应用


  生成后缀名为.sys的驱动程序后,安装之前,首先要修改INF文件,然后将其拷贝到“. .\sys\objchk\i386”目录下。修改INF文件只要将文件双引号中的提示改为相应的内容即可生成设备信息文件。对该驱动程序的INF文件作如下修改:


  [Strings]


  ProviderName =“数控研究中心” //公司名称


  MfgName =“华南理工大学机械与工程学院” //硬件制造商名称


  DeviceDesc =“高级运动控制卡V3.2” //设备描述


  DeviceClassName =“高级运动控制” //设备类描述


  SvcDesc="运动控制" //服务描述


  使用控制面板中的添加新硬件来搜索新硬件,根据提示指定INF文件和编译后生成的.sys驱动程序文件,系统就可以自动安装新硬件的驱动程序。


  驱动程序安装好之后,在Windows 2000环境下对运动控制卡及其设备驱动程序进行实际测试[4]。测试结果表明,此设备驱动程序能使运动控制卡在Windows 2000环境稳定工作,并能对多轴的运动位置和速度进行准确控制。同时,将该驱动程序移植到Windows 98/XP系统中,也能驱动运动控制卡正常工作。


5 结束语


  传统的驱动程序都是用DDK开发,开发效率不高。本文以基于PCI总线的运动控制卡为研究对象,以DriverWorks为工具,方便快捷地设计完成了设备驱动程序。在Windows环境下对运动控制卡及其驱动程序进行测试,结果表明,此驱动程序能使该运动控制卡在Windows环境下稳定工作。实质上,驱动程序仍满足DDK对WDM的要求,调用的仍是DDK所提供的基本函数。利用DriverStudio对数控系统中的运动控制卡开发驱动程序,对数控系统实现开放式软件结构及人机界面具有重要意义。


  本文作者创新点:利用DriverStudio来设计运动控制卡的WDM驱动程序,实现了在Windows 2000环境下,上位机和运动控制卡的正常通讯,并能根据上位机的指令通过运动控制卡对多轴运动位置和速度进行准确控制。

1楼 0 0 回复