编程检测PXI槽位信息



硬件: PXI/CompactPCI

问题:
我使用的PXI系统带有多块PXI板卡。我如何能通过编程方式确定我使用的PXI模块并知道它们安装在哪个插槽?

解答:
PXI使用PCI总线。每个PCI板卡将型号,制造商以及其他特定信息保存在配置寄存器中。板卡的驱动通常会为用户提供获得诸如型号,制造商或者序列号信息的机制。大多数的NI驱动提供了获得这个信息的方式。该文档解释如何使用NI-DAQ,NI-VISA以及Windows注册表从PXI板卡上获取特定信息的方法。

NI-VISA 3.0
如果您正在使用NI-VISA 3.0及其以上版本请使用这一方法。

如果您正在使用NI-VISA 3.0,您可以简单地使用"Slot"属性确定您PXI设备的槽位数。在LabVIEW中,从VISA高级选板中使用VISA Open函数打开一个到您PXI设备的VISA会话。一旦会话打开,可以使用属性节点访问"Slot"属性。这是"Registry Based Settings"属性中的一个。这一方法的实例可以参看程序:Programmatic Slot Detection of PXI Instruments,链接如下。

要求:
  1. 您必须使用NI-VISA 3.0或以上版本。
  2. 在Windows系统目录下安装相应的PXISYS.INI文件。更多信息请参看知识库2CFE965P(链接如下)。
  3. 在测量与自动化浏览器(MAX)中使能PXI VISA。按如下方法进行:启动MAX,选择菜单Tools»NI-VISA»VISA Options。在“General”页面下选择"Show all PXI/PCI devices accessible to VISA"。在“Passport”下选择NiVIPxi.dll。选择View»Refresh
  4. 系统中安装了任意新的板卡之后,启动MAX并点击View » Refresh


优势:
  1. 这是最简单的方法因为它只需要一个单一的属性节点。


限制:
  1. 驱动分配的逻辑驱动号与槽位号的关系是未知的(除非板卡使用NI-DAQ驱动)。
  2. VISA属性不显示序列号。
  3. 根据PXI规范,每个PXI控制器必须支持VISA,但是不是每个PXI板卡的驱动都必须支持VISA。这意味着当且仅当驱动支持VISA并且它们的PXI VISA资源名使用PCI总线名与PCI设备名时,您才能使用这个方法找到PXI板卡安装的槽位。现在,NI数据采集板卡的驱动,模块化仪器板卡的驱动以及开关板卡的驱动都支持PXI VISA资源名。
  4. PXI-GPIB板卡以及PXI串口卡没有PXI VISA资源名,取而代之,它们将分别显示如下的资源名GPIBx::y::INSTR和ASRLx::y::INSTR,其中x和y与PCI总线号和PCI设备号之间没有任何联系。


NI-VISA 2.6及以下版本
如果您正在使用的NI-VISA的版本比3.0早,请使用这些方法。

为确定PXI板卡在PXI机箱中所在的槽位号,需要将必要的信息映射到PXI系统初始化文件(PXISYS.INI)中。信息包括电脑上电后BIOS为每一块PCI总线上的板卡分配的PCI总线号以及PCI设备号。PCI总线号以及PCI设备号唯一地确定了PCI总线的插槽,或者,在这种情况下,PXI机箱的插槽。

PXISYS.INI文件是一个ASCII类型的文本文件,包含了控制器体系结构的信息以及机箱的信息,同时描述了安装的外围模块的物理位置。设备驱动器和其他软件将读取PXISYS.INI文件以确定系统信息。欲了解更多关于PXI系统初始化文件的信息,请参看“知识库1EGB71UI: What Are PXISYS.INI and CHASSIS.INI?”链接如下。

注意:如果在您的Windows目录下没有PXISYS.INI文件,或者您的PXISYS.INI文件与您的机箱/控制器不一致,那么MAX将报告槽位号为“0”,或者其他错误。为了安装正确的PXISYS.INI文件,请参考下列指南“知识库2CFE965P: Slot Detection of PXI Modules”。链接如下。您也可以从其他链接中下载PXISYS.INI文件。

测量与自动化浏览器(MAX)在“Devices and Interfaces”下显示NI板卡。每块板卡的驱动为每块NI的板卡分配一个逻辑设备号。LabVIEW使用这个逻辑设备号指向硬件板卡。MAX读取这个逻辑设备号并显示,同时也读取PXISYS.INI文件,提取必要信息以显示每块板卡连接到的PXI机箱上的槽位号。驱动分配为每块板卡分配的逻辑设备号并不总对应着槽位号,而且用户可以在MAX中手动修改逻辑设备号。

据我们所知,通过从操作系统得到每块板卡的PCI总线号以及PCI设备号,并将这些信息与PXISYS.INI文件进行比较,我们可以找到板卡所安装的槽位号。参见第一种方法的优势与限制。

另一个方法是使用PXI VISA仪器描述符获取PCI总线号以及PCI设备号。这个方法使用在实例程序“PXI Slot Identification Using PXI VISA Resource Names”中,链接如下。

根据PXI规范,每个PXI系统控制器模块都支持VISA。但是不是每个PXI板卡的驱动都必须支持VISA。如果PXI板卡的驱动支持VISA,并且其PXI VISA资源名遵循下段描述的相同的模式,那么NI的配置软件测量与自动化浏览器(MAX)就可以显示所有的PXI VISA资源名。如果您看不到VISA资源名,遵循下列指南“知识库2CMCAHLS: How Can I Get the ”PXI System“ Entry Back in MAX?”链接如下。

VISA资源名将会是如下形式PXIx::y::INSTR。第一个数字x是PCI总线号,y是PCI设备号,确定了PXI板卡位于的PXI槽位号。PXI VISA仪器描述符中的PCI总线号以及PCI设备号的值可与PXISYS.INI文件中的信息相映射,同时也可以发现槽位号。更多信息在“知识库2IJ896LS: What is the Format of VISA Resources for PXI Devices”。参看第二种方法的优势与限制。



第一种方法

如果板卡使用NI-DAQ驱动,驱动为板卡分配的设备号(您可以在MAX中看到,并且使用设备号调用任何NI-DAQ API函数时都会指向板卡)对应于PXI机箱中的槽位号。更多详细信息请参看“知识库2E1AJUQI: Correlation of PXI DAQ Device Number to PXI Slot Number”,链接如下。

PXI机箱的控制器通常会安装在PXI机箱的第一个槽位上,所以MAX能够分配给PXI板卡的设备号从“Device 2”开始到PXI机箱最大的槽位数。因此,对于使用NI-DAQ 6.9.2的系统中的PXI-DAQ板卡来说,驱动不会为任何一块板卡分配“Device 1”。

要求:
  1. 在Windows系统目录下安装正确的PXISYS.INI文件。
  2. 系统中安装好新的板卡后,启动测量与自动化浏览器,进入View菜单并选择Refresh。


优势:
  1. 您可以使用“Get DAQ Device Information.vi”以找到板卡不同特性,如设备名,序列号,NI-DAQ版本等。该VI位于选板Functions>>Data Acquisition>>Calibration and Configuration。如果槽位上没有任何板卡,或者插入的板卡没有使用NI-DAQ驱动,VI将返回-10401错误(特定设备不是NI的产品),因为驱动不能识别该板卡。
  2. 在这种情况下,槽位号与设备号的关系是已知的,即二者是相同的。


限制:
  1. 当使用MXI-3接口用PC控制PXI机箱时,在电脑中您不能使用多于1块的PCI-DAQ,PCI-Motion或者PCI-MI的NI板卡。这是因为驱动将分配“Device 1”给这块PCI板卡。如果您有多于1块的板卡,我们不能保证PXI机箱中的逻辑设备号与它们安装的槽位相匹配。PC中的第二块板卡可能会被分配为“Device 2”,然后PXI机箱中第二个槽位上的板卡将不得不使用空余的设备号,比如“Device 64”。
  2. 用户可以在MAX中手动更改逻辑设备号,并打破板卡安装位置的槽位号与驱动分配给板卡的设备号之间的联系。
  3. 这个方法只适用于使用NI-DAQ的NI板卡(这包括DAQ卡以及几乎所有的MI板卡)。PXI-Switch板卡不使用这个驱动。
  4. 这个方法不适用于PXI-PCMCIA载板,PXI-Ethernet板卡,PXI-GPIB板卡以及PXI-Serial板卡。
  5. 这个方法并不灵活,因为它依赖于特定的驱动。对于任意的第三方板卡,您就不能使用这个方法确定板卡安装的槽位。




第二种方法

参见实例程序“PXI Slot Identification Using PXI VISA Resource Names”。链接如下。

您可以使用“VISA Find Resources.vi”(Functions>>Instrument I/O>>VISA>>VISA Advanced palette)找到PXI机箱中安装的每块板卡的PXI资源,并将其列出。每个PXI VISA资源名将显示PCI设备号以及PCI总线号。您能使用属性节点为列表中的每个内容打开一个VISA会话并找出型号名,制造商以及其他PXI属性。

一旦您确定了VISA资源名,您就可以用每块板卡的PXI VISA资源名与PXISYS.INI文件中的信息做比较从而确定板卡安装的槽位号。

要求:
  1. 在Windows系统目录下正确安装PXISYS.INI文件。更多信息请参见知识库2CFE965P。
  2. 在测量与自动化浏览器(MAX)中允许PXI VISA。启动MAX,进入菜单Tools>>NI-VISA>>VISA Options,在General下选择“Show all PXI/PCI devices accessible to VISA”,在Passport下选择NiVIPxi.dll。进入View菜单并选择Refresh。
  3. 系统中安装新的板卡后启动MAX,进入View菜单并选择Refresh。


优势:
  1. 如果第三方提供的PXI板卡驱动支持VISA,同时也遵循NI在创建PXI VISA 2.2时使用的同样的模式,您就可以利用资源名确定板卡安装的槽位(注意:PXI VISA资源名目前没有定义在PXI规范中)。


限制:
  1. 驱动分配的逻辑设备号与槽位号的联系是未知的(除非板卡使用NI-DAQ驱动)。
  2. VISA属性不显示序列号。
  3. 根据PXI规范,每个PXI控制器必须支持VISA,但是不是所有的PXI板卡驱动都必须支持VISA。这意味着当且仅当板卡的驱动支持VISA并且它们的PXI VISA资源名使用PCI总线号以及PCI设备号的时候,您才能使用该方法找出PXI板卡安装的槽位。目前,NI的数据采集板卡的驱动,模块化仪器的驱动以及开关板卡的驱动是支持PXI VISA资源名的。
  4. PXI-GPIB板卡以及PXI-Serial板卡没有PXI VISA资源名,取而代之,它们的资源名分别显示GPIBx::y::INSTR以及ASRLx::y::INSTR,其中x和y与PCI总线号和PCI设备号没有任何联系。



Windows注册表
如果您正在使用Windows2000或者XP同时没有使用NI-DAQ或者NI-VISA,请使用这种方法。

PXI设备的信息可以在如下的Windows注册表键值下找到:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\PCI。所有NI的PXI设备都以“VEN_1093…”开头。在开发者园地中的实例程序(链接如下)通过搜索注册表的方式返回NI PCI/PXI设备的信息。

要求:
  1. 上面提到的实例程序只在Windows 2000以及Windows XP机器下测试通过。


优势:
  1. 实例代码已经写好(链接如下)。


限制:
  1. 如果使用MXI接口,程序将需要返回所有设备的列表,但是远端设备上的PXI板卡将显示为MXI板卡的槽位号。
  2. 如果您需要访问实例程序中没有提到的属性,那么手动搜索Windows注册表会非常麻烦。


相关链接:
Knowledge Base 1EGB71UI: What Are PXISYS.INI and CHASSIS.INI?
KnowledgeBase 2CFE965P: Slot Detection of PXI Modules
KnowledgeBase 2CMCAHLS: How Can I Get the "PXI System" Entry Back in MAX?
KnowledgeBase 2IJ896LS: What is the Format of VISA Resources for PXI Devices
KnowledgeBase 2E1AJUQI: Correlation of PXI DAQ Device Number to PXI Slot Number
Developer Zone Example: Programmatic Slot Detection of PXI Instruments

附件:





报告日期: 03/23/2006
最近更新: 02/14/2008
文档编号: 2MDFG2WD