您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于VISA库的任意波形发生器驱动程序的开发设计
南京航空航天大学硕士学位论文19第三章基于VISA库的驱动程序的研究本章简介:VXI总线以其良好的测控性能成为虚拟仪器的一个重要发展方向,作为一个开放式的测控系统,虚拟仪器软件结构(VISA)为不同厂商的VXI器件的驱动程序提供了统一的软件基础。本文通过对VISA库及VXIplug&play规范的介绍来阐述仪器驱动程序的开发,并描述了VXI总线寄存器基器件任意波形发生器驱动程序的设计与实现。3.1VISA简介随着VXI仪器的广泛使用,出现了相应的的I/O控制软件,由于不同厂商的硬件提供的I/O库不同,仪器驱动程序不兼容,仪器之间很难集成。VXIplug&play联盟的宗旨是通过开放的、不同厂商的VXI系统使得VXI技术的最终用户可简便使用VXI仪器。联盟制定了VirtualInstrumentSoftwareArchitecture,即虚拟软件结构(VISA)。VISA是一个标准的独立于硬件设备、接口、操作系统、编程语言和网络环境的I/O控制库,目的是处理计算机与仪器间物理连接的通信细节。通过VISA,由不同硬件接口(如GPIB、VXI或RS232等)连接的设备可以集成到一个系统中,由一个软件完成所有仪器设备的控制。因此,VISA是生成虚拟仪器驱动程序的软件基础。本文所介绍的仪器驱动程序是在LabWindows/CVI环境下开发的。LabWindows/CVI为基于C语言的应用程序开发环境(ADE)。ADE通过驱动程序头文件,获得有关仪器驱动程序函数的必要信息。LabWindows/CVI提供了VISA库的各类函数,用户在开发驱动程序时可方便的调用其中的函数。3.1.1VISA资源模板VISA模板为所有应用程序提供基本的资源控制服务,包括控制与资源或器件间的通话使用期和控制资源特性等。1使用期控制VISA控制器件通话、查找列表和事件的使用期。当这些控制使用完毕之后,可用viClose()释放与之相关的系统资源。2访问控制应用程序可以同时打开多个与VISA资源的通话,也可以同时通过不同的通话句柄同时访问资源。在某些情况下,访问VISA资源的应用程序希望禁止别的应用程序访问该资源。为此,VISA定义一种锁定机制来限制对资源的访问。锁定资源的操作是调用函数viLock(),解锁的操作是调用函数viUnLock()。访问控制服务viLock(ViSessioninstr,ViAccessModelockType,ViUInt32timeout,ViKeyIdrequestedKey,ViKeyIdaccessKey);基于VXI总线的任意波形发生器的研究20LockType表示请求锁定的类型,它有两个值,要么是VI_EXCLUSIVE_LOCK,表示独占锁定;要么是VI_SHARED_LOCK,表示共享锁定。timeout表示超时设置,即在设定的时间内未完成操作,则返回错误码。否则忽略此参数,此时timeout值取VI_NULL。viUnLock(ViSessioninstr);该操作取消对指定资源的锁定。3.1.2VISA资源管理函数VISA资源管理器为应用程序提供基本服务,包括查找资源和打开与资源的通话。下面简述这些服务:访问函数和操作资源管理器允许打开与资源的通话,通话由应用程序请求而建立。在应用程序关闭通话或功能失常时系统负责释放与通话相关的全部系统资源。viOpenDefaultRM(ViPSession&defaultRM);该函数必须在调用任何VISA操作之前调用。第一次调用该函数使VISA系统初始化,包括初始化默认资源,同时返回与该资源的通话。对函数的再次调用返回与默认资源的另一唯一通话。许多VXIplug&play仪器驱动程序要求输入作为通话句柄的参数以便识别目标仪器。为了给开发者提供使用模型的一致性,必须定义这个参数的类型和位置,VISA要求这种函数的通话句柄定义为ViSession类型,并要求它是参数表中的第一个参数。ViPSession型数据为ViSession型数据的地址。viOpen(ViSessiondefaultRm,ViRsrcrsrcName,ViAccesssModeaccessMode,ViUInt32timeout,ViPSessioninstr)本操作打开与指定器件的通话并返回调用此器件其它操作的通话标识符instr。defaultRM为由viOpenDefaultRM()返回的与VISA默认资源通话的唯一逻辑标识符。在参数表中用到两个通话标识符defaultRM、instr,ViOpen()是在已知的资源上操作,defaultRM为与该资源通话的标识符,相当于与此资源的通讯的通道,而实际上我们想与具体的器件通话,这就是返回的与该器件通话的标识符instr,即与该器件通讯的通道。这就象打长途电话,先拨区号,再拨你想要的用户号码,这样就可进行通讯。rsrcName为器件的唯一符号名称。该参数为一字符串,可唯一标识这一器件资源。表3-1为一些较典型器件资源的描述符。地址字符串说明VXI0::1::INSTRVXI接口0槽模块上逻辑地址为1的VXI器件GPIB-VXI::9::INSTRGPIB-VXI控制系统中逻辑地址为9的VXI器件GPIB::1::0::INSTRGPIB接口0上主地址为1,副地址为0的GPIB器件ASRL1::INSTR位于端口COM1上的串行器件南京航空航天大学硕士学位论文21VXI::MEMACC对VXI接口板级寄存器的访问GPIB-VXI1::MEMACC对1号GPIB-VXI接口板级寄存器的访问表3-1器件资源描述符VXI0槽为VXI仪器总线的运行提供所需要的硬件资源。它们为外部通信接口与VXI总线之间提供转换,并提供协议。VXI0槽模块还可以提供访问VXI仪器的功能。在一些情况下串行器件(ASRL)的命名规则会混淆,在WINDOW平台上,ASRL1对应COM1,而在Macintosh平台上ASRL1对应调制解调器端口。accessMode为访问指定器件资源的模式,值为VI_EXCLUSIVE_LOCK表示通话开启后立即获取独占锁定,如果锁定未能获得,就关闭通话并返回错误码;如果值为VI_LOAD_CONFIG,表示用外部组态应用程序设定属性值,否则用VISA规范定义的缺省属性值VI_NULL,可以用以上两值的“位或”表示同时使用两种访问模式。若accessMode请求锁定,timeout表示错误码返回之前这一操作等待的最长时间间隔,单位为毫秒。查找此服务用于查找器件并与之建立通讯联系。VISA资源管理器查找与接口相关的所有资源,而不是对各资源分别定位和查找。执行此操作后,用户可查找到所有可利用的接口硬件资源。3.1.3VISA存储器I/O服务在讨论存储器访问时,在速度与复杂性,软件开销与封装之间要折衷考虑。高级访问的目的与低级访问相似。两者的区别在于高级访问具有更大的软件开销,因为它要封装用于存储器访问的绝大部分代码,如窗口映射和错误检验。通常,高级访问的速度低于低级访问的速度,但封装了进行访问的所需要的操作,因此比低级访问更安全。低级访问服务通过降低软件开销提高访问速度,但它要求进行更多的编程工作。为减少存储器访问的开销量,低级访问服务在操作中不返回任何错误信息。低级访问服务允许对接口上支持直接存储器访问的器件进行寄存器级访问,在应用程序使用接口总线的低级服务访问之前,应利用viMapAddress()映射一个地址范围,将寄存器映射到内存中,再利用viPeek()、viPoke()进行读写,这样就可以用对内存的操作代替对模块寄存器的操作。虽然资源可以处理对窗口的分配和操作,但在低级访问完成时,应调用viUnmapAddress()清除窗口。只有这样,系统才能对窗口进行重新分配。由于一批数据的传输只使用了一次映射,因此大大节省了操作时间,提高了数据传输速度。高级访问服务允许对接口上支持直接存储器访问的器件进行寄存器级访问,编程人员可利用简单的操作,如viIn16()、viOut16()访问接口总线上的存储器。这些操作封装了低级服务中的map/unmap和peek/poke。因此没必要明确的把存储器映射成一个窗口。基于VXI总线的任意波形发生器的研究22viIn8[16、32](ViSessioninstr,ViUIntspace,ViBusAddressoffset,ViUInt8[16、32]val);该操作通过使用指定的地址空间方式从指定的器件偏移地址offset(以字节为单位)读取8、16、32位无符号的整数。space表示指定的地址空间,下表列出指定的地址空间的有效入口。space取值说明VI_A16_SPACE寻址VXI/MXI总线的A16地址空间VI_A24_SPACE寻址VXI/MXI总线的A24地址空间VI_A32_SPACE寻址VXI/MXI总线的A32地址空间表3-2VXI器件的地址空间viOut8[16、32](ViSessioninstr,ViUIntspace,ViBusAddressoffset,ViUInt8[16、32]val);该操作通过使用指定的地址空间方式从指定的偏移地址写入8、16、32位无符号的整数3.2VXI仪器驱动程序3.2.1VXIplug&play对仪器驱动程序的要求与规范在虚拟仪器系统中,仪器驱动程序是连接仪器与用户界面的桥梁,是测试系统设计的重要一环。在规定仪器驱动程序设计标准时,需遵守三个主要结构原则。第一,仪器驱动程序以源代码形式提供,以便用户自己能开发和优化操作。第二,结构应是模块式的应为函数提供多层访问,以便用户可使用各个驱动函数的子集。最后,不同厂商的VXIplug&play仪器驱动程序结构是相似的,因此在读懂一个仪器驱动程序时所得到的知识可用于其它VXIplug&play仪器驱动程序中。虚拟仪器驱动程序VXI总线即插即用系统联盟规范要求、仪器供应商在提供以VXI为代表的虚拟仪器硬件模块的同时,必须提供相应的仪器驱动程序、仪器软面板及相关文档。VXI总线即插既用规范详细定义了仪器驱动程序的内部设计模型与外部接口模型,规定了仪器驱动程序的设计要求及与系统中其它程序模块之间的相互关系。虚拟仪器驱动程序的外部接口模型如图3-1所示,包括函用户应用程序仪器驱动程序(函数体)子程序接口VISAI/O接口编程式开发者接口交互式开发者接口图3-1驱动程序的外部接口模型南京航空航天大学硕士学位论文23数体、子程序接口、VISAI/O接口、交互式开发者接口与应用程序开发者接口。函数体仪器驱动程序函数体是驱动程序源代码。可采用标准的编程语言或图形化编程语言(G语言,例如LabVIEW和HPVEE)编写。I/O接口在VXIplug&play结构中,I/O接口由标准的并能在多平台上使用用的的独立软件层提供。VISA含有一控制VXI、GPIB、RS-232、以太网和其它类型仪器的接口库。它能对所有VXI功能提供访问,包括消息基和寄存器基编程、中断和事件处理,并能直接访问VXI底板。子程序接口VXIplug&play仪器驱动程序使用标准化编程技术和层次化设计,因此驱动程序可通过子程序接口访问使用其它库的函数。子程序接口是驱动程序调用其它软件模块的机构,这些模块完成驱动程序的任务。其它软件模块包括高级分析库和格式化I/O库。编程式开发者接口编程式开发者接口是更高级软件程序调用驱动程序的机构。最终用户的测试系统程序是由几个仪器驱动程序的调用组成,每个调用使用多个参数。交互式开发者接口交互式开发者接口通常是一图形接口,这种接口有利于软件开发者理解仪器驱动程序函数的作用和如何使用该接口调用驱动程序中的函数。交互式开发者接口的一个例子是Windows中使用的函数面板,函数面板文件代表仪器驱动程序中的函数、函数的参数名和数据类型及相关的帮助文件。函数面板文件的树形结构VPP规范要求,仪器驱动程序应包括C源代码(.h文件、.c文件)、动态链接库文件(.dll)、函数面板(.fp文件)及其他相关文档,例如
本文标题:基于VISA库的任意波形发生器驱动程序的开发设计
链接地址:https://www.777doc.com/doc-2572762 .html