新闻中心

EEPW首页 > 测试测量 > 设计应用 > 基于并行接口的动态参数采集系统的设计

基于并行接口的动态参数采集系统的设计

作者: 时间:2010-03-05 来源:网络 收藏

本文引用地址:https://www.eepw.com.cn/article/195513.htm


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 结束语

本文所设计的已经在工程上应用,为及时查找被测物体工作过程中可能发生故障的原因,提供有效的测试手段,为产品设计与问题故障分析提供依据。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭