>
首页 » 技术文章 » PCI-DIO-96在武器控制仿真系统中的应用

PCI-DIO-96在武器控制仿真系统中的应用

作者:乔凤兰,张宗玉  时间:2007-01-24 23:45  来源:

摘 要:介绍了多功能静态数字数据采集卡PCI-DIO-96的配置和功能,并以其在武器控制半实物仿真系统中的应用为例,阐述了在VC++6.0环境下测控系统软件的开发。

关键词:PCI-DIO-96;数据采集;VC++

引言

PCI-DIO-96是美国NI公司生产的、基于PCI总线的高性能、多功能静态数字数据采集卡。该卡可提供96通道5V/TTL数字量的输入/输出,其数据传输速率为400Kbit/S。由于PCI-DIO-96具有完善的软件支持,可在VB、VC、DELPHI、LabVIEW、LabWindows/CVI等多种软件开发环境下使用,因而在测控领域得到了广泛应用。

PCI-DIO-96卡硬件简介

PCI-DIO-96共有96根引脚,其中96根输入/输出引脚被分成12个端口,其端口分配如表1所示,其中,每个端口中引脚号0~7分别为对应口的8根线的序号。

PCI-DIO-96使用方便,安装数据采集卡的驱动程序后,将卡插入计算机的PCI插槽,计算机自动给数据采集卡分配设备号(本系统分配的设备号为1)。该卡可以将每个引脚作为一个通道单独使用,也可以以端口(port)为单位使用,每个引脚或每个端口都可以单独作为输入或输出通道(端口)使用,但需在使用前用设置函数定义引脚或端口的方向。

VC++6.0环境下软件的开发

PCI-DIO-96数字数据采集卡的驱动程序NI-DAQ是以Windows标准动态链接库(nidaq.dll)的形式给出的,其中包含对PCI-DIO-96进行初始状态设置、对卡的端口或引脚进行输入/输出操作的有关函数等。因此,在VC++环境下,通过调用动态链接库中的函数很容易对数据采集卡进行I/O操作。在VC++应用工程中引入nidaq.dll动态连接库的过程如下:

l 将文件nidaq.dll、nidaq.lib、nidaq.h复制到工程所在目录下。

l 将nidaq.lib文件加到工程文件列表中。

l 在VC++应用工程的源程序(.cpp文件)中通过包含语句包含头文件nidaq.h。

这样就可以使用动态链接库中定义的功能函数了。调用动态连接库中功能函数的流程图如图1所示。

下面对动态链接库中几个常用函数的语法作一简单说明。

1、status=DIG_Prt_Config(deviceNumber,port,dir);

用途:设置指定口中所有8根线的方向为输入还是输出。

参数的意义:deviceNumber:16位整数,设备号,由插卡占PCI插槽的位置决定;port:16位整数,数字I/O口序号,PCI-DIO-96卡的取值为0~11;dir:16位整数,数字口中各线的方向,dir=0,表示该口中各线均用于输入,为默认值,dir=1,表示该口中各线均用于输出。

2、status=DIG_Line_Config(deviceNumber,port,line,dir);

用途:设置指定口的指定线的方向为输入还是输出。

参数的意义:deviceNumber、port的意义同上;line:16位整数,数字线的序号,取值为0~7;dir:16位整数,数字线的方向,dir=0,表示该线用于输入,为默认值,dir=1,表示该线用于输出。

3、status=DIG_In_Line(deviceNumber,port,line,&state);

用途:返回指定口的指定线的数字逻辑状态。

参数的意义:deviceNumber、port、line的意义同上;line为要读数的数字输入线的序号;state为一逻辑变量,用于存放返回的指定线的数字逻辑状态,为0,表示该线处于逻辑低状态,为1,表示该线处于逻辑高状态。

4、status=DIG_Out_Line(deviceNumber,port,line,state);

用途:设置或清除指定数字口的指定输出线。

参数的意义:deviceNumber、port、line的意义同上;line为要写数的数字输出线;state:为新的要写入指定线的数字逻辑状态,state=0,表示要将指定的数字线设置为逻辑低,state=1,表示要将指定的数字线设置为逻辑高。

应用实例

武器控制半实物仿真系统,即用计算机屏幕上的虚拟面板代替飞机座舱中武器控制面板,通过接口与外部武器系统相连,武器状态信号经接口传入计算机,对武器的控制信号经接口传送给武器系统,接口选用NI公司的静态数据采集卡PCI-DIO-96。下面以PCI-DIO-96在武器控制半实物仿真系统中的应用为例具体阐述该卡在VC++环境下的应用,详细步骤如下:

(1) 安装好软件开发平台VC++6.0后,安装PCI-DIO-96的驱动程序NI-DAQ,此时PCI-DIO-96的动态连接库及相应的头文件、库文件已存在于相应的目录中。

(2) 将PCI-DIO-96数据采集卡插入计算机的PCI插槽中,计算机自动给数据采集卡分配设备号。

(3) 在VC++环境下建立一个单文档应用工程,工程名为“Jzwqkz” 。

(4) 将文件nidaq.dll、nidaq.lib、nidaq.h复制到工程所在目录下,并将nidaq.lib文件加到工程文件列表中。方法为:选择Project菜单的Add To Project/Files子菜单,在弹出的对话框中“文件名”一栏输入“nidaq.lib”并确定。

(5) 在头文件“JzwqkzView.h”中声明程序中所需要的变量,代码如下:

public:

short iState;

int iDevice,iPort,iLine, iStatus;(分别为采集卡的设备号、口、线、状态)

(6) 在源文件“JzwqkzView.cpp”的视构造函数中包含动态连接库的头文件,代码为:#include “nidaq.h”

并对各变量进行初始化,代码如下:

iStatus=0;

iDevice=1;//本系统中计算机为PCI-DIO-96分配的设备号为1

iLine=0;

iPort=0;

for(int i=0; i<8; i++) iState[i]=0;

初始化采集卡各口或线的方向,本系统设置4口为输入口,用于采集外部挂弹架的状态,其中的六条线与外部六个挂弹架相连,模拟挂弹时,线上输入为1,不挂弹时,线上输入为0;设置2口为输出口,当按下“发射”按钮时,用于向外部发出投弹指令。代码如下:

iStatus=DIG_Prt_Config(iDevice,4,0,0);

iStatus=DIG_Prt_Config(iDevice,2,0,1);

(7) 利用类向导生成一个定时器函数OnTimer(),用于定时采集并显示外部挂弹架的状态,采集挂弹状态的代码如下:

for(int i=0;i<6;i++)

iStatus=DIG_In_Line(iDevice,4,i,&iState[i]);

线的状态为1时,显示对应挂弹指示灯亮的位图,为0时,显示对应指示灯灭的位图。

另外,定时器函数中还定时采集投弹按钮的状态,武器控制面板上的投弹按钮被按下,则输出投弹指令,即对应输出线输出1。

(8) 窗口关闭前将输出口各线的状态置低电平,并清除定时器。方法是利用类向导在视图类中增加DestroyWindow()处理函数,在该函数中将输出口各线的状态置低电平,并清除定时器。代码如下:

BOOL CJzwqkzView::DestroyWindow()

{

iStatus=DIG_Out_Prt(iDevice,1,0);

KillTimer(m_timer);// 清除定时器

return CView::DestroyWindow();

}

(9) 编译并运行程序,可以从屏幕上看到由挂弹指示灯状态表示的外部挂弹状态,当按下投弹按钮时,外部模拟炸弹被投下,对应挂弹指示灯熄灭。

结束语

以VC++6.0为软件开发平台,利用PCI-DIO-96数据采集卡研制武器控制半实物仿真系统,充分利用了VC++6.0方便、灵活、界面友好的优势,应用数据采集卡动态连接库中的标准函数实现输入/输出操作,简化了程序设计,也提高了系统接口的标准化水平,缩短了研制周期,提高了工作效率。

相关推荐

基于Web的MCF5249数据采集系统的设计

Web  MCF5249  数据采集  2011-08-18

探地雷达信号的数据采集与显示研究

数据采集  探地雷达  2011-08-18

基于Virtex5的PCI-Express总线接口设计

PCI  Virtex5  2011-08-16

多路跟踪滤波同步数据采集系统的研究

AD73360L  数据采集  2011-08-01

为铁路谐波干扰的研究搭建一个数据采集和监控系统

数据采集  2011-07-25

外接PCI-E标准计划挑战Thunderbolt

PCI-E  hunderbolt  2011-06-24
在线研讨会
焦点