一种PCI运动控制卡驱动的开发方法与流程

文档序号:16086828发布日期:2018-11-27 22:31阅读:1203来源:国知局

本发明涉及计算机和自动化控制领域,更具体的,涉及一种基于PCI总线型运动控制卡的驱动开发方法。



背景技术:

在现代化工业制造中,设备自动化一直是其中重要的环节,为满足机械设备的自动化加工,基于 PC机的各种高性能运动控制卡应运而生,支持PCI总线的运动控制卡,也得到了越来越广泛的应用。PCI 总线是个人电脑中常用的物理总线,因其具有可扩展性强、速度快等特点,已经成为PC机和外围设备通信的重要方式。工控机通过PCI总线传递控制指令到运动控制卡,控制卡执行相应的动作,同时将信息通过PCI总线反馈至工控机,已经成为了PC自动化控制的常用手段。因此,开发适合运动控制卡使用的PCI 驱动,显得尤为重要。目前常见的控制卡PCI驱动开发方法有通过微软的WDM工具开发的,因其开发步骤繁琐,开发周期较长,在新的WINDOWS系统中已经被微软放弃。还有直接使用第三方工具开发驱动的,例如使用Jungo公司的Windriver工具进行开发,该方法首先加载第三方的PCI驱动程序,在驱动的开发、安装和使用过程中都非常繁琐。在PCI驱动在驱动识别方法上,目前基本是通过唯一的GUID进行识别的,导致不同的运动控制卡的驱动程序代码也大不相同,兼容性不强。尤其在使用Windriver工具的时候,因为该工具为了兼容大部分的PCI驱动程序,对底层驱动代码进行了封装,导致在开发驱动的过程中,不能直接对硬件进行操作,需要使用该工具提供的接口对硬件进行操作,这进一步限制了开发人员的的自由度,同时该工具价格昂贵,而且有时间限制,因此,开发具有自主知识产权的驱动程序,对于运动控制卡设备商,尤为重要。同时,由于WINDOWS操作系统不断升级,目前已经出现了新老系统共用的局面,这更需要运动控制卡制造商开发兼容性强的PCI驱动,以兼容不同的操作系统,因此,使用微软提供的WDF驱动开发工具,做到一套代码适配常用的操作系统,显得更为必要和迫切。



技术实现要素:

本发明的目的是提供一种PCI运动控制卡驱动的开发方法,以克服上述不足,从而提高运动控制卡驱动的开发效率、使用便捷性和兼容性。

本发明实例提供一种PCI运动控制卡驱动的开发方法,具体步骤包括:

安装微软最新的WDF开发环境,编写基础WDF驱动代码框架;

在WDF的初始化阶段,在EvtDevicePrepareHardware回调函数内,编写驱动程序硬件初始化代码;

自定义两个IOCTL控制代码,在WDF驱动的事件响应EvtIoDeviceControl回调函数内,编写识别控制代码的程序,能够识别控制命令并响应;

随机生成GUID号码,并将该号码的后半部分修改为控制卡的类型并注册该号码,该号码不仅能够用来区分不同设备的驱动,还能够根据后半部分的号码,扫描识别工控机中所有的同类的运动控制卡。

编写驱动程序接口,当驱动程序正确加载,通过GUID号码,搜索该驱动程序并打开设备,同时可以使用DeviceIoControl接口和IOCTL控制代码,与驱动程序进行通信;

编写该驱动程序的设备安装文件(INF文件),能够通过WINDOWS的设备管理器进行识别安装;

使用上述方法开发的驱动程序及其配套的接口,相比使用第三方工具,有以下优点:开发者不需要考虑到第三方工具的版本,也不需要为第三方工具付费,即可开发具有自主知识产权的驱动程序代码,并且能够对PCI总线进行自由控制。开发的驱动具有极强的兼容性,能够一套代码兼容XP、VISTA、WIN7 和WIN10等系统,能够同时识别、打开和控制多种不同种类的运动控制卡,极大的扩大了控制卡的应用范围,简化了开发流程,提高了开发效率。

附图说明

图1为本发明的开发流程图。

具体实施方式

为了提高基于PCI运动控制卡驱动的开发效率,提升驱动的兼容性,从而提高用户使用体验,本发明提供了一种控制卡驱动的制作方法,利用该方法制作的PCI控制卡驱动,不需要使用第三方工具,既可以做到一套代码兼容主流操作系统,并且能够区分不同的卡类型和卡数量,满足一台工控机上安装识别多个控制卡并同时使用。

如附图1所示,本发明实施例中,PCI控制卡驱动的详细开发流程如下:

步骤101:编写标准的WDF驱动框架,包括驱动入口函数、硬件初始化回调函数、事件处理回调函数;

步骤102:在硬件初始化函数,编写控制卡硬件识别代码,并识别控制卡资源,如果为IO资源,保存资源地址和长度,该地址将作为基地址,将在数据传输时使用。如果没有找到合适的资源,返回错误供计算机进行错误提示;

步骤103:自定义IOCTL_PCI_READPORT和IOCTL_PCI_WRITEPORT(也可以是其他类似操作码),在事件处理回调函数使用,若接收到IOCTL_PCI_READPORT事件,解析事件中的偏移地址,并通过READ_PORT_USHORT读取指定地址的数据,若收到IOCTL_PCI_WRITEPORT事件,解析事件中的偏移地址和输入数据,送入WRITE_PORT_USHORT以向PCI总线发送数据;

步骤104:随机生成128位GUID号码,并将其中后16位替换为运动控制卡的类型,例如0x89,0x69, 通过该GUID能够准确寻找特定种类的运动控制卡,并将该号码注册;

步骤105:编写应用程序接口,接口包括通过GUID寻找打开设备的设备操作接口和通过IOCTL 操作代码进行读写的设备通信接口;

步骤106:编写INF文件,并安装驱动程序,安装成功后,即可通过应用程序接口与运动控制卡通信。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1