admin 管理员组文章数量: 887021
2023年12月18日发(作者:免费网站大全下载划)
低压电器(2005№9)基于WinDriver的PCICAN板卡Windows驱动程序开发基于WinDriver的PCICAN板卡Windows驱动程序开发刘 勇, 佟为明, 林景波(哈尔滨工业大学电气工程及自动化学院,黑龙江哈尔滨150001)摘 要:为了实现由PC机及其CAN板卡构成的上位机与底层CAN节点之间的实时数字通信,用WinDriver开发了PCICAN板卡的Windows驱动程序。阐述了Win2Driver下开发驱动程序的设计思想及过程,即首先构造API专用函数库,然后构造用户第一作者:刘勇(1968-),男,副教驱动程序,最后实现用户功能。重点分析了处理中断时应特别注意的几个问题。在自行开发的CAN总线实验系统上实际应用表明,所开发的驱动程序及监控软件功能强大、界面友好、实时性强。使用WinDriver开发Windows设备驱动程序,周期短、性能高、可移植性好、易于分发。关键词:CAN总线;PCI总线;WinDriver;驱动程序;中断中图分类号:TP393.04 文献标识码:A 文章编号:100125531(205授,博士,主要从事现场总线及其控制系统、电机与电器数值分析等方面的研究。DevelopmentofWindowsDriverforPCICANCardBasedonWinDriverLIUYong, TONGWei2ming, LINJing2bo(SchoolofElectricalEngineeringandAutomation,HarbinInstituteofTechnology,Harbin150001,China) Abstract:InordertorealizetherealtimedigitalcommunicationbetweenthesupervisorycomputercomposedofPCandCANcard,andthelowlevelCANnodes,thealandprocessofdevelopingthedriveronWinDriverweredescribed,2ly,theAPIspecialfunctionlibrarywasconstructed,thentheuserdriverswasconstructed,finally,oblemsthatshouldbepaidspecualapplicationresultontheexperimentalCANfieldbustobedevelopedbyusshowsthatthedevelopeddriverandmonitoringsoftwarefeaturespowerfulfunctions,gWinDrivertodevelopWindowsdriver,theadvantagesofshortdesigncycle,highperform2ances,ds:CANfieldbus;PCIbus;WinDriver;driver;interrupt0 引 言CAN总线具有多主传输、非破环性总线仲裁、短帧传输等诸多特点,并以其突出的可靠性、实时性和灵活性被广泛应用。在通过CAN总线构造的工业控制网络系统中,大部分数据采集功能和控制策略都可以被装载在现场设备上。然而,较为复杂的监视功能或需要人机交互进行高级决策时,在底层设备上实现起来则很复杂,故常—36—[1]使用PC机作为上位机。作为上位机的PC机与作为低层设备的CAN节点的通信,目前一种方法是采用CAN/RS-232转换模块,另一种是采用带有CAN接口的PC机CAN板卡。前一种方法通信速率不高,不适合实时性要求较高的场合;后一种方法通信速率高,且可与PC机合为一个完整的整体,PC机CAN板卡与PC机主板的接口主要有ISA和PCI总线接口。随着技术的飞速发展,ISA接口在新一代PC机上越来越难觅踪迹© 1995-2006 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
基于WinDriver的PCICAN板卡Windows驱动程序开发低压电器(2005№9)了,取而代之的是支持即插即用、133MHz带宽的PCI总线。本文在介绍PCICAN板卡硬件的基础上,说明了Windows设备驱动程序开发与一般用户程序开发的区别,对几种常用的Windows设备驱动程序开发工具进行了比较,给出了Windows设备驱动程序开发的一般过程,重点阐述了在Windows设备驱动程序开发中处理中断时应特别注意的几个问题。用PCI总线专用芯片,如PLX公司的PCI9052。本文采用的是后一种方法,其硬件框图如图1所示。CAN独立控制器采用SJA1000,它与PCI9052的连接采用地址/数据复用模式,相比于非复用模式,节省了成本,提高了PCICAN板卡的运行速度。CAN驱动芯片采用PCA82C250。设计时CAN通路采用2路冗余,使得当一个CAN总线接口出现故障时,可以很方便地切换到另一个CAN总线接口,从而提高了板卡的可靠性。采用电源隔离和光电隔离电路,以减少CAN总线上的浪涌冲击及各种故障所造成的危害。PCI板卡设计时采用四层板结构,中间两层布电源和地线,以增强板卡的抗干扰能力。串行EEPROM用于配置PCI地址空间。1 PCICAN板卡硬件简介PCICAN板卡用于将PC机与CAN总线底层设备网络连接起来,它插在PC机的PCI插槽里,通过露在外面的CAN接口与CAN总线相连。目前主要有两种PCI板卡设计方法,一种是采用微控制器加CPLD构建PCI总线接口,另一种是采图1 PCI9052复用模式CAN板卡硬件框图2 驱动程序开发Windows2000及其后的微软操作系统为了访问硬件。设备驱动程序开发不仅仅在于实现硬件功能,一般还要为用户应用程序提供专用的API函数库,以方便其构造适合自身硬件驱动模安全的目的已将绝大部分需要与硬件直接打交道的入口保护起来。运行在ring3层的用户应用程序无法直接访问硬件,特别是不能提供中断服[2]务,必须通过运行于ring0层的设备驱动程序式的用户驱动程序。最终的用户功能往往是在用户驱动程序上实现的。以查询模式访问硬件比较简单,但是难以适应实时性要求较高的场合,只能作为辅助方式;以硬件中断为主导的驱动模式,则—37—© 1995-2006 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
低压电器(2005№9)基于WinDriver的PCICAN板卡Windows驱动程序开发既可以满足实时性要求,又可以使得用户程序的设计具有灵活性,但是需要开发人员对Windows操作系统的内核机制有深入的理解,又要对所设计的系统有深入的研究。在Windows下开发VxD、KMD或WDM设备驱动程序,可以使用DDK或DriverWorks设备驱动程序开发工具,但学习周期较长,开发与调试过程不能完全在用户模式下进行,对普通硬件设计人员来说,门槛较高。Win2Driver的出现就是为了解决这个问题,其开发过其他参考文献,对此也没有明确说明。Jungo公司2004年8月最新推出的WinDriverv6.22版的用户手册对此这样描述:通常,针对电平敏感的PCI卡,其中断句柄需要在内核级执行一组传送命令,以使中断电平变低,即应答中断。此传送命令应能写PCI卡的工作寄存器,用来清除硬件中断。在中断等待函数xxx_IntWait()返回之前,为了执行上述操作,应保证一组用来清除硬件中断的传送命令代码已经准备好,并放在xxx_IntEnable()[5]函数体中。本文所设计的PCICAN板卡使用的是PLX公司的PCI9052芯片,这里的工作寄存器实际上就是指“中断控制/状态寄存器”。通过在DriverWizard中将其I/O端口地址映射为一个寄存器,并在编辑中断信息时将其与中断应答相关联,且规定在应答时向该寄存器写数值“0”,DriverWizard就可以在xxx_IntEnable()函数体中自动加入能使中断电平变低的一组传送命令代码,使WinDriver内核在中断等待函数捕捉到中断后,调用中断句柄的过程中,清除PCICAN卡产生的硬件中断,使中断得到正确应答。如果未在DriverWizard建立驱动工程阶段就正确指定此工作寄存器,那么在有硬件中断发生时,中断句柄返回后,中断电平仍然有效,操作系统会重新调用WinDriver内核的中断句柄,进入死循环,引起系统死机。xxx_IntEnable()函数体简列如下:xxx_IntEnable(hCANBOARD,funcIntHandler)//中断程的编码和调试都可以在用户模式下进行。若想进一步提高性能,还可使用Kernel2PlugIn技术。在用户模式下,WinDriver通常能每秒捕捉到5000~10000次中断,Kernel2PlugIn模式下可以达到10万次。用WinDriver开发的驱动程序,可以很容易地移植到Windows95、98、NT、2000和XP上。目前WinDriver的最高版本为6.22。下面给出用WinDriver开发PCICAN板卡Windows设备驱动程序的过程。2.1 使用DriverWizard生成专用WinDriverAPI函数库WinDriver的DriverWizard向导程序,可以按[3]芯片及VendorID和DeviceID找到PCICAN板卡,并生成INF安装文件。INF安装文件是Win2dows即插即用标准的重要部分。在这里该文件向Windows提供设备描述及WinDriver驱动程序内核的位置,以便操作系统能正确安装该设备的驱动程序。为了生成我们所设计的PCICAN板卡的专用WinDriverAPI函数库,首先要在DriverWizard中新建一个驱动工程文件。DriverWizard会根据在EEPROM中对PCICAN板卡的设置,自动识别出PCICAN板卡的配置空间,并允许用户对I/O空间、内存空间进行读写测试。如果在PCICAN板卡的设计和使用中不涉及中断,至此就可以直接生成专用WinDriverAPI函数库,这在文献[4]及其他文献中都给出了较详细的描述。但是,由于PCICAN板卡是为工业场合设计的,担负着实时数字通信的作用,离不开中断。遗憾的是,文献[4]中仅指出应“指定一个已定义的寄存器给该设备分配的中断号,以监听中断。对于ISA设备,要在定义时选中‘EdgeTriggered’;对于PCI设备,则选中‘LevelSensi2tive’”,并没有指出如何定义这个寄存器。很多—38—使能函数{ …… //下面的几行语句用于清掉中断源,否则遇到中断发生PC机将被挂起,造成死机 addrSpace=xxx_Register0_SPACE;//对应于中断控制寄存器 …… hxxx->[0].=0x0;//写0用于清中断 …… //下面语句用于向系统注册用户中断服务程序funcIntHandler hxxx->tHandler=funcIntHandler; ……}经过上述完整配置以后,DriverWizard就可以按用户选择的编程语言(如VC)生成支持中断的© 1995-2006 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
基于WinDriver的PCICAN板卡Windows驱动程序开发低压电器(2005№9)专用WinDriverAPI函数库。用这些函数,可以在用户模式下对所设计的PCICAN板卡实现I/O空间、内存空间以及中断的操作。2.2 以中断为主导模式的PCICAN板卡设备断控制寄存器进行重新赋值,因为WinDriver内核在执行传送命令对其清0时,实际上是一个关中断的过程,需要在用户中断服务程序中再开中断。具体程序流程如图2所示。驱动程序通过调用专用WinDriverAPI函数可以轻松实现PCICAN板卡的用户驱动代码。为了实现工业用途的PCICAN板卡的实时数字通信,采用以中断为主导模式、以I/O空间直接读写为辅助的用户中断设计,不仅可以满足工业实时性的要求,而且可以方便用户软件结构的实现。这里首先要指出的是,如前所述,由于WinDriver在用户模式下每秒可以处理中断的次数下限为5000次,那么考虑到CAN总线短帧传输的特点,其位数较少的错误帧只有14bit,为了不丢失中断,应使CAN总线的通信速率控制在70kb/s以内。若想使用更高的通信速率,应使用WinDriver提供的Kernel-PlugIn技术,将用户模式下的中断服务代码移入到内核模式下,此模式下每秒可以处理中断次数下限为10万次,同样以错误帧作考虑,那么可以支持到1.4Mb/s的通信速率,实际上CAN总线的最高通信速率只有1Mb/s,所以在内核模式下,足以胜任CAN总线最苛刻的通信要求。为了在WinDriver下提高系统处理中断的能力,在编写用户中断服务程序时,应尽量使代码既全面又简练。PCICAN板卡中断服务程序的功能主要是处理CAN总线通信任务。来自于PCICAN板卡的中断有接收中断、溢出中断和错误中图2 中断服务程序流程图2.3 用户监控程序本文所设计的PCICAN板卡从CAN总线接收到的各种监测数据被捕捉到用户中断服务程序里,并以DBF格式分别被保存于磁盘文件中。上位机的用户监控程序要取得监测数据,只需读取相应的磁盘文件即可。当需要对某些下位机节点进行控制或查询时,可以直接使用专用WinDriverAPI函数写PCICAN板卡的I/O端口。本系统的监控程序采用VisualC++6.0MFC类库编程,分为初始化、系统监视、数据管理、系统配置、控制、帮助六大模块。初始化模块的主要工作是按照系统配置模块设置好的通信参数和一定的系统内含规则对PCICAN板卡的相应寄存器进行配置,使PCICAN板卡按规定的要求处于工作或关闭状态;系统监视模块实现对各被检测量的实时和历史走势提供友好的视图界面;数据管理模块实现按照规定的格式,此处用的是DBF格式,转入和转出数据;系统配置模块实现操作员参数、通信参数、监控品种、查看方式等内容的灵活配置;控制模块实现可选的上位机控制策略;帮助模块提供必要的帮助信息。—39—断。一旦发生错误中断,这时CAN控制器处于复位状态,已经不能和CAN总线系统上的其他节点相互通信,必须在用户中断服务程序中使其恢复到工作状态;溢出中断的处理要把接收中断的处理和CAN控制器的状态寄存器的溢出位结合来考虑,是一个循环的过程。接收中断属于正常中断,需要从接收缓冲区读走数据,并释放接收缓冲区。尤其应该注意的是在中断服务程序中应读一次CAN控制器的中断寄存器,目的是使造成PCI9052中断的独立CAN控制器SJA1000的引[6]脚从激活状态(低电平)复位(变成悬浮电平)。否则,PCI9052会被同一个中断事件循环中断,造成系统死机。另外,还需要对PCI地址空间的中© 1995-2006 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
低压电器(2005№9)基于WinDriver的PCICAN板卡Windows驱动程序开发2.4 程序分发开发完的用户驱动及上位机应用程序可能会被要求能够运行在多个Windows平台,如98/NT/2000/XP,由于使用了WinDriver技术和MFC类中断为主导驱动模式的复杂用户驱动程序。基于以上思想所开发的PCICAN板卡驱动程序及在其基础上开发的用户监控程序已在自行开发的CAN总线实验系统上获得了成功的应用,显示了库,故分发时需要一些格外的注意。这里以在Windows2000Professional下开发的本应用实例移植到WindowsNTWorkstation4.0平台为例,说明具体步骤(其他平台参看文献[5]):(1)准备好程序分发包,包括:应用程序、MFC支持文件、、。(2)将以及MFC支持文优良的性能。【参考文献】[1] 阳宪慧.现场总线技术及其应用[M].北京:清华大学出版社,1999.[2] 李卫忠,王建勋.利用WinDriver开发Windows设备驱动程序[J].计算机应用,2001,(8):245.[3] 潘伟峰,江 渝,刘和平,等.用WinDriver开发ISA件拷贝到winntsystem32drivers目录下。(3)使用工具wdreg把加入到Windows启动时装载的设备驱动列表中,格式为:wdreginstall。总线数据采集卡驱动程序[J].电测与仪表,2003,(6):49.[4] 吕琦鹏,顾 红,苏卫民.用WinDriver开发适合多平台的设备驱动程序[J].单片机与嵌入式系统应用,2003,(5):80~83.[5] verV6.22User’sGuide[EB/OL]./support/documentation/,2004-08-17:199-214.[6] tspecification:Stand-aloneCANcontrollerSJA1000[EB/OL]./acrobat/datasheets/SJA1000_,2000-01-04:17.3 结 语使用WinDriver开发Windows设备驱动程序,其开发过程的编码和调试都可以在用户模式下进行,开发周期短,可移植性好,易于分发。对于一般的实时性要求,所开发的驱动程序都可以满足,还可使用Kernel-PlugIn技术进一步提高性能。使用专用WinDriverAPI函数,可以构造以收稿日期:2005201213(上接第35页)设计了一种基于Modbus协议的智能控制器。该系统不仅能实现较好的保护功能,还实现了测量、通信、监控等功能。系统自身带有丰富的串口有利于扩展其他的通信总线,如CAN、DeviceNet等,具有广阔的应用前景。【参考文献】[1] 曾庆军,刘 阳,金升福,等.基于CAN总线的低压备,2005,(1):15~18.[3] 王汝文,宋政湘,杨 伟.电器智能化原理与应用[M].北京:电子工业出版社,2003.[4] 尹天文,周积刚,朱守云.从德国工业博览会看世界低压电器的发展趋势[J].低压电器,2003,(1):3~5.[5] 胡景泰,曾 萍,朱文灏,等.可通信智能化控制与保护开关电器的发展与应用[J].低压电器,2004,(8):37~41.[6] DsPIC30F5011DataSheet[Z].2004.[7] MaShaohua,eSwitch[A].IntelligentIntegratedLowIEEEBolognaPowerTechnology断路器新型可通信智能控制器研制[J].低压电器,2004,(10):28~32.[2] 路艳艳.第四代低压电器蓄势待发———专访上海电器科学研究所副总工程师何瑞华[J].电力系统装Conference[C].Bologna,Italy:[s.n.],2003.收稿日期:2005205218—40—© 1995-2006 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
版权声明:本文标题:基于WinDriver的PCICAN板卡Windows驱动程序开发 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1702896316h435072.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论