新聞中心

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

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

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

        本文引用地址:http://www.104case.com/article/195513.htm


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

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


        3.2 用戶程序設(shè)計(jì)

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

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

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


        上一頁 1 2 3 下一頁

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 同仁县| 明水县| 昆明市| 九台市| 安福县| 本溪市| 犍为县| 日照市| 阿克苏市| 应城市| 巴彦淖尔市| 乐至县| 阜新市| 定南县| 吉安市| 濮阳市| 宁化县| 颍上县| 金沙县| 永福县| 潜江市| 砀山县| 屏南县| 西盟| 腾冲县| 高安市| 屯门区| 衡东县| 武义县| 哈密市| 宜黄县| 芷江| 孟津县| 平凉市| 兴仁县| 盐山县| 湖州市| 余庆县| 奎屯市| 体育| 乐东|