LOCATEPCI 工具说明

返回
 

LOCATEPCI功能说明

由于 PCI 接口的板卡具有自动分配 IO 、 MEM 、 IRQ 等资源的特性,在不同的配置下、插在不同的 PCI 槽上,系统都会动态分配一套可用的资源,这提供相当的灵活性和适应性。但若用户需要操作具体的板的底层硬件资源时,就必须动态地确定这些硬件资源。同时,若用户同时使用多块采集卡、开关量卡,如何区分、确定这些卡,这些就是 LocatePCI 工具要解决的问题。

具体地说, LocatePCI 可以对瑞博华公司提供的各种采集、开关量控制卡进行电子编号、按编号查询各板使用的硬件资源,从而,即使多个卡混合使用,插在任意 PCI 槽上,用户程序也可正确区分、定位、使用每块卡。

LocatePCI 以 DLL 方式提供,在内部它依赖于 IOTOOLS 工具。因此,使用 LocatePCI.DLL 前应正确安装 IOTOOLS 工具。

LocatePCI 和 IOTools 一样,分为 Windows 9x/Me 专用的版本和 Windows 98/2000/XP 通用的 WDM 版本,使用时请注意。

为配合 LocatePCI 使用,瑞博华公司还通过一个实用软件工具 PCICard ,由它进行 PCI 卡的编号、资源查询和设定工作。

使用 LocatePCI 时,有两个概念需要确定,一是 PCI 板的顺序号 (Order) ,它依赖于板所在的 PCI 槽的位置,和它之前的槽有几块 PCI 卡;另一概念是 PCI 卡的编号 (CardNo) ,它是通过本工具对每块卡设置的一个编号,保存在卡上的非散失性内存中,应用程序应依赖它来区分和定位各 PCI 卡,未设置前可能为 0xffff 。 LocatePCI 可以设定各卡的编号,并查询各编号的卡的硬件资源 (I/O 基地址 ) 。详情可参见 5.3 节。

编程示例

瑞博华公司提供 C++Builder 编制的 PCICard 的源程序。并提供 VB 下使用 LocatePCI 的示例程序。在 IO700 的 VC 和 VB 使用示例中,也使用了 LocatePCI 。

C/C++ 下使用 LocatePCI 需要的头文件为 LocatePCI.H 。 VC 下需要的库文件为 LocatePIC.LIB 。 C++Builder 下需要的库文件为 _LocatePCI.LIB 。 VB 下编程需要的模块文件为 LocatePCI.BAS 或 LocatePCIDef.BAS 。

演示 IO700 板功能的 VC 示例程序 VC_Test700 综合使用了 IOTools 和 LocatePCI 工具。同样功能的 VB 版演示程序见 VB_Test700 , Delphi 版的演示程序见 Dtest700 。

LocatePCI函数详解

机器上安装的 RBH 公司 PCI 卡的数量 FindPCICard

C/C++ 下的原型定义:

int __stdcall FindPCICard(WORD * CardNoArray); //CardNoArray[10]

C/C++ 下的使用示例:

WORD CardNoArray[10];

I = FindPCICard(CardNoArray);

VB 下的定义

Declare Function FindPCICard Lib "LocatePCI.DLL" Alias "_FindPCICard@4" (ByRef CardNoArray As Integer) As Long ' //Dim CardNoArray[10] as Integer

VB 下的使用示例

Dim CardNoArray(10) as Integer

I = FindPCICard(CardNoArray(0))

功能及参数说明:

本函数返回当前计算机上安装的瑞博华公司的 PCI 卡的数量,并把各卡的编号返回在 CardNoArray 中。若当前计算机上未安装瑞博华公司的 PCI 卡,函数返回 0 。

CardNoArray 的容留为至少 10 个短整数。 CardNoArray[] 反映了安装顺序与卡编号的关系,即 CardNoArray[Order] 代表安装顺序为 Order 的卡的编号。

返回指定卡号的 PCI 卡的资源 GetIOBaseByCardNo

C/C++ 下的原型定义:

int __stdcall GetIOBaseByCardNo(WORD CardNo,WORD * IOBase, WORD * IRQNum);

C/C++ 下的使用示例:

WORD CardNo, IOBase, IRQNum;

I = GetIOBaseByCardNo(CardNo, &IOBase, &IRQNum);

VB 下的定义

Declare Function GetIOBaseByCardNo Lib "LocatePCI.DLL" Alias "_GetIOBaseByCardNo@12" (ByVal CardNo As Integer, ByRef IOBase As Integer, ByRef IRQNum As Integer) As Long

VB 下的使用示例

I = GetIOBaseByCardNo(CardNo, IOBase, IRQNum)

功能及参数说明:

若当前计算机上存在编号为 CardNo 的 PCI 卡,本函数返回 1 ,且返回它的 IO 基地址于 IOBase 中,使用的中断号于 IRQNum 中;若无卡号为 CardNo 的 PCI 卡存在,本函数返回 0 。而卡号 CardNo 为通过函数 ChangeCardNo() 或函数 SetCardNoByOrder() 、或工具软件 PCICard 设置的编号。

返回指定安装顺序的 PCI 卡的资源 GetIOBaseByOrder

C/C++ 下的原型定义:

int __stdcall GetIOBaseByOrder(WORD Order,WORD * IOBase, WORD * IRQNum);

C/C++ 下的使用示例:

WORD Order, IOBase, IRQNum;

I = GetIOBaseByOrder(Order, &IOBase, &IRQNum);

VB 下的定义:

Declare Function GetIOBaseByOrder Lib "LocatePCI.DLL" Alias "_GetIOBaseByOrder@12" (ByVal Order As Integer, ByRef IOBase As Integer, ByRef IRQNum As Integer) As Long

VB 下的使用示例:

I = GetIOBaseByOrder(Order, IOBase, IRQNum)

功能及参数说明:

本函数返回安装顺序为 Order 的 PCI 卡的 IO 基地址于 IOBase 中,使用的中断号于 IRQNum 中,若成功,函数返回 1 ;若 Order 不正确,本函数返回 0 。 Order 的范围从 0 开始递增,安装顺序依赖于 PCI 卡安装的 PCI 槽的位置。

改变指定卡号的 PCI 卡的卡号 ChangeCardNo

C/C++ 下的原型定义:

int __stdcall ChangeCardNo(WORD OldCardNo,WORD NewCardNo);

C/C++ 下的使用示例:

I = ChangeCardNo(OldCardNo, NewCardNo);

VB 下的定义

Declare Function ChangeCardNo Lib "LocatePCI.DLL" Alias "_ChangeCardNo@8" (ByVal OldCardNo As Integer, ByVal NewCardNo As Integer) As Long

VB 下的使用示例

I = ChangeCardNo(OldCardNo,NewCardNo)

功能及参数说明:

本函数把编号为 OldCardNo 的 PCI 卡的编号改为 NewCardNo ,若成功 ( 存在编号为 OldCardNo 的 PCI 卡 ) 则返回 1 ,否则,返回 0 。

设定指定安装顺序的 PCI 卡的卡号 SetCardNoByOrder

C/C++ 下的原型定义:

int __stdcall SetCardNoByOrder(WORD Order,WORD NewCardNo);

C/C++ 下的使用示例:

I = SetCardNoByOrder(Order,NewCardNo);

VB 下的定义

Declare Function SetCardNoByOrder Lib "LocatePCI.DLL" Alias "_SetCardNoByOrder@8" (ByVal Order As Integer, ByVal NewCardNo As Integer) As Long

VB 下的使用示例

I = SetCardNoByOrder(Order, NewCardNo)

功能及参数说明:

本函数把安装顺序为 Order 的 PCI 卡的编号设置为 NewCardNo ,若成功 ( 存在安装顺序为 Order 的 PCI 卡 ) 则返回 1 ,否则,返回 0 。安装顺序 Order 的范围从 0 开始递增,其值依赖于 PCI 卡安装的 PCI 槽的位置。