基于并行接口的动态参数采集系统的设计
扫描二维码
随时随地手机看文章
近些年来,随着军事科学技术的发展,武器装备的结构越来越复杂。为保证武器装备系统在使用过程中的安全性和可靠性,要求对武器装备进行以性能和故障检测为主的技术保障,不仅要能实时、快速、精确地对多种参数进行测试,而且要实时地完成大量的数据和信息处理。动态测试系统所采取的技术途径是测试成本可以承受的,对于掠海飞行导弹以及战略导弹再入大气层过程对常规的遥测系统在传输信息上是无法实现的,这就形成了对动态测试系统的特别需求。因此测试系统在不断地发展以满足现代武器装备发展的要求。它包括获取信息、传输信息、再现信息等。
动态参数采集系统常放置于被测体内,随被测体作高速运动,要求有极高的可靠性设计和能对规定参数的实时采集,为及时查找被测物体在运作中可能发生故障的原因,提供有效的测试手段,为产品设计与问题故障分析提供依据。
2 系统设计
系统采用两组并行的采集系统,分别采用两种不同的采样频率对3路速变信号和16路缓变信号进行采样,并且分别将采集数据存放在各自的存储器中,两套采集系统在统一的启动电路和控制电路的协调下,完成对规定信号的采集。对三路速变信号采用单路83.33KHz的采样率,数据存储器采用16片单片容量为512K的静态存储器,记录时间为33.55秒;对16路缓变信号采用单路976.5Hz的采样率,用单片容量为512K静态存储器存储数据,记录时间为33.55秒。
图1是采集系统总体设计框图,其工作过程为:系统上电后,处于低功耗的待触发状态。当启动电路检测到有效的启动信号后,其它电路的电源接通,时基电路产生系统的基本时钟,供速变通道和缓变通道产生读写信号和地址推动信号;在时钟1和时钟2的统一协调下,三路速变信号和十六路缓变信号通过输入适配网络,依次到三路选一和十六选一电路,然后,分别进入A/D转换电路进行数据采集,并分别将采集数据存入数据存储器一和数据存储器二。当达到设定的采集时间后停止记录,同时使系统处于低功耗的数据保持状态,此时,可通过计算机并行接口读取采集系统的数据。
2.1 启动电路设计
启动电路完成采集电路的可靠启动,具有自动判别有效启动信号的能力,能有效防止误触发。在系统电源接通后,系统处于低功耗待触发状态,系统功耗较小,系统可以完成长时间的等待状态。在此状态下,启动电路对启动线的信号进行判别,当启动信号的电平由低变为高,并且持续时间大于规定时间,启动电路通过记录决策电路启动采集系统开始数据采集,记录决策电路原理如图2所示,5V为系统自带电池供电,VCC为A/D变换电路及其他采集数据电路的供电电压,系统利用如图所示的决策电路控制VCC的供电,保证系统可靠的触发,本系统可保证20V以下不触发。D触发器的1脚和13 脚的输出状态转换图如图3所示,依图可见记录决策电路有效防止了误触发。
2.2 接口电路设计
利用计算机并行接口工作在ECP模式下,其控制端口提供的Auto Linefeed、Strobe和Select Printer 3根控制线,进行合理的组合,产生对速变、缓变信号的选择信号SelDat和读取数据时序信号RD,并产生系统复位信号RESET。SelDat信号输出到中心控制逻辑,产生存储器的片选信号,控制读取速变信号或缓变信号;读信号RD和复位信号RESET控制地址发生电路产生读取存储器所需的地址;RD使能存储器,通过并行接口的数据端口将存储器中的采集数据读到计算机。图4为并行接口ECP模式下接口电路连接框图。
接口电路读取缓变数据时序图如图5所示。
3 系统软件的设计
并行接口应用系统软件设计包括主机操作系统上的客户驱动程序和主机应用程序。客户驱动程序实际上是一系列控制硬件设备的函数,是操作系统中控制和连接硬件的关键模块。主机应用软件通过客户驱动程序与系统外设进行通信,其主要任务是将采集进来的数据流,根据所需处理功能的要求来完成各种基于Windows 程序的处理。
3.1 驱动程序设计
DriverStudio中的DriverWorks为WDM驱动程序提供了一个完整的框架,我们利用其DriverWizard生成驱动程序框架,然后添加各功能函数。在驱动程序*.cpp中,用户只需要自己填写下面函数:
在由Drivestudio生成的*Device.cpp中的*_Handler(I)函数中填写应用程序消息,如(READ_DATA,CTL_RTYPE)等,或将应用程序的值写给端口或把端口值由驱动程序返回给应用程序。在*_Handler(I) 中填写应用程序变量应在*Device.h中先定义,然后在*Device.cpp中的消息处理中填写产生此消息后自己如何处理的代码。
下面是我们驱动程序中类实例:对存储器的读操作功能函数。
NTSTATUS Drv_NUCDevice::DRV_NUC_READ_DATA_Handler(KIrp I)
{
NTSTATUS status = STATUS_SUCCESS;
t << Entering Drv_NUCDevice::DRV_NUC_READ_DATA_Handler, << I << EOL;
unsigned char *pData;
unsigned char tmp, tmp_in1, tmp_in2;
int para_base_address = 0x378; //并行接口地址
int i, j;
pData = (unsigned char*)I.IoctlBuffer();
tmp = _inp(para_base_address+2);
tmp_in1 = tmp & 0xfd;
tmp_in2 = tmp | 0x02;
for(j = 0; j < 1024; j++) //读取1024个字节数据
{
_outp(para_base_address+2, tmp_in2); //向并行接口发控制命令
pData[j] = _inp(para_base_address); //读取并行接口数据到计算机
_outp(para_base_address+2, tmp_in1);
}
I.Information() = 1024;
return status;
}
3.2 用户程序设计
主机应用程序使用Visual Basic6.0编译环境,主要是实现调用*.DLL中的函数,读取采集系统中的数据到计算机,对数据进行存储、显示处理结构及向采集系统发送控制命令等。
而在编写用户程序时,首先要建立与外设的连接,然后才能实施数据的传输。本设计使用Visual C++6.0编译环境中的API函数编译*.DLL连接程序文件:首先查找设备,打开设备的句柄,然后进行控制和读操作,最后关闭设备句柄。程序主要用到两个API函数CreatFile()和DeviceControl()。下面是一个读取外设数据的实例:
DNUCEXPORT int CALLBACK ReadData(unsigned char *pData)
{
ULONG nOutput;
DeviceIoControl(handle,
DRV_NUC_READ_DATA,
NULL,
0,
pData,
1024,
&nOutput,
NULL);
return 1;
}
4 结束语
本文所设计的采集系统已经在工程上应用,为及时查找被测物体工作过程中可能发生故障的原因,提供有效的测试手段,为产品设计与问题故障分析提供依据