新聞中心

EEPW首頁 > 測試測量 > 設計應用 > 基于并行接口的動態(tài)參數(shù)采集系統(tǒng)的設計

基于并行接口的動態(tài)參數(shù)采集系統(tǒng)的設計

作者: 時間:2010-03-05 來源:網(wǎng)絡 收藏

本文引用地址:http://www.2s4d.com/article/195513.htm


3 系統(tǒng)軟件的設計
應用系統(tǒng)軟件設計包括主機操作系統(tǒng)上的客戶驅動程序和主機應用程序??蛻趄寗映绦驅嶋H上是一系列控制硬件設備的函數(shù),是操作系統(tǒng)中控制和連接硬件的關鍵模塊。主機應用軟件通過客戶驅動程序與系統(tǒng)外設進行通信,其主要任務是將采集進來的數(shù)據(jù)流,根據(jù)所需處理功能的要求來完成各種基于Windows 程序的處理。

3.1 驅動程序設計
DriverStudio中的DriverWorks為WDM驅動程序提供了一個完整的框架,我們利用其DriverWizard生成驅動程序框架,然后添加各功能函數(shù)。在驅動程序*.cpp中,用戶只需要自己填寫下面函數(shù):
在由Drivestudio生成的*Device.cpp中的*_Handler(I)函數(shù)中填寫應用程序消息,如(READ_DATA,CTL_RTYPE)等,或將應用程序的值寫給端口或把端口值由驅動程序返回給應用程序。在*_Handler(I) 中填寫應用程序變量應在*Device.h中先定義,然后在*Device.cpp中的消息處理中填寫產(chǎn)生此消息后自己如何處理的代碼。
下面是我們驅動程序中類實例:對存儲器的讀操作功能函數(shù)?!?br />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個字節(jié)數(shù)據(jù)
{
_outp(para_base_address+2, tmp_in2); //向發(fā)控制命令
pData[j] = _inp(para_base_address); //讀取并行接口數(shù)據(jù)到計算機
_outp(para_base_address+2, tmp_in1);
}
I.Information() = 1024;
return status;
}


3.2 用戶程序設計

主機應用程序使用Visual Basic6.0編譯環(huán)境,主要是實現(xiàn)調用*.DLL中的函數(shù),讀取中的數(shù)據(jù)到計算機,對數(shù)據(jù)進行存儲、顯示處理結構及向發(fā)送控制命令等。

而在編寫用戶程序時,首先要建立與外設的連接,然后才能實施數(shù)據(jù)的傳輸。本設計使用Visual C++6.0編譯環(huán)境中的API函數(shù)編譯*.DLL連接程序文件:首先查找設備,打開設備的句柄,然后進行控制和讀操作,最后關閉設備句柄。程序主要用到兩個API函數(shù)CreatFile()和DeviceControl()。下面是一個讀取外設數(shù)據(jù)的實例:
DNUCEXPORT int CALLBACK ReadData(unsigned char *pData)
{
ULONG nOutput;
DeviceIoControl(handle,
DRV_NUC_READ_DATA,
NULL,
0,
pData,
1024,
nOutput,
NULL);
return 1;
}
4 結束語

本文所設計的已經(jīng)在工程上應用,為及時查找被測物體工作過程中可能發(fā)生故障的原因,提供有效的測試手段,為產(chǎn)品設計與問題故障分析提供依據(jù)。


上一頁 1 2 3 下一頁

評論


相關推薦

技術專區(qū)

關閉