1. <code id="ya7qu"><span id="ya7qu"><label id="ya7qu"></label></span></code>

    <b id="ya7qu"><bdo id="ya7qu"></bdo></b>
    <wbr id="ya7qu"><optgroup id="ya7qu"><strike id="ya7qu"></strike></optgroup></wbr>
  2. <u id="ya7qu"><bdo id="ya7qu"></bdo></u>
    現(xiàn)在位置:范文先生網(wǎng)>理工論文>計算機信息技術(shù)>利用Delphi 3.0開發(fā)微機數(shù)據(jù)采集與處理軟件系統(tǒng)

    利用Delphi 3.0開發(fā)微機數(shù)據(jù)采集與處理軟件系統(tǒng)

    時間:2022-12-05 13:45:22 計算機信息技術(shù) 我要投稿
    • 相關(guān)推薦

    利用Delphi 3.0開發(fā)微機數(shù)據(jù)采集與處理軟件系統(tǒng)

      張建軍(中國人民解放軍合肥炮兵學院研究生系)
      
      摘要:結(jié)合開發(fā)“無線電話務(wù)模擬訓練系統(tǒng)”Win32版軟件的實例,本文詳細介紹利用Delphi3.0開發(fā)微機數(shù)據(jù)采集與處理軟件系統(tǒng)的方法。
      
      
      關(guān)鍵詞:DelphiADCDAC
      
      微機數(shù)據(jù)采集與處理系統(tǒng)簡介
      數(shù)據(jù)采集與處理是計算機應(yīng)用的一個重要分支,主要研究信息數(shù)據(jù)的采集、存貯、處理及控制等內(nèi)容。70年代以來,由于微機技術(shù)的快速發(fā)展及其在軍、民用工程領(lǐng)域的廣泛應(yīng)用,尤其是適于通用微機(如IBMPC系列)使用的板卡級數(shù)據(jù)采集產(chǎn)品的大量出現(xiàn),以微機為核心的可編程數(shù)據(jù)采集與處理技術(shù)得到迅速發(fā)展。現(xiàn)在的微機,只需在其擴展槽內(nèi)插上一塊數(shù)據(jù)采集板,并輔以應(yīng)用軟件,即可組成一套微機數(shù)據(jù)采集與處理系統(tǒng),實現(xiàn)信息處理和實時控制功能。
      
      數(shù)據(jù)采集與數(shù)據(jù)處理
      
      
      數(shù)據(jù)采集與處理技術(shù)主要研究模數(shù)、數(shù)模轉(zhuǎn)換(A/D、D/A)、數(shù)據(jù)處理等問題,需要計算機硬件電路和軟件編程知識。
      
      數(shù)據(jù)采集:為對溫度、壓力、流量、速度、位移、振動、噪聲等物理量進行測控,首先通過傳感器把上述物理量轉(zhuǎn)換成模擬電信號,而后由A/D—D/A板將模擬電信號轉(zhuǎn)換成時間、數(shù)值上量化且離散的數(shù)字量輸入計算機系統(tǒng)。數(shù)據(jù)采集的核心是A/D轉(zhuǎn)換。
      
      數(shù)據(jù)處理:計算機根據(jù)被測控對象的需要,對采集到的數(shù)據(jù)進行數(shù)學分析運算,處理結(jié)果一方面送至顯示器、打印機等外設(shè),一方面由A/D—D/A板將數(shù)字量轉(zhuǎn)換成模擬電信號輸出,對外部物理量進行實時監(jiān)控。數(shù)據(jù)處理的核心是數(shù)值處理和D/A轉(zhuǎn)換。
      
     。、微機數(shù)據(jù)采集與處理系統(tǒng)硬件組成
      
      系統(tǒng)主要由被測控對象(設(shè)備)、A/D—D/A通道、開關(guān)量I/O通道、微機等組成,如圖1所示。較復雜的系統(tǒng)包括單片機等多機系統(tǒng)。
      
      
      
      圖1微機數(shù)據(jù)采集與處理系統(tǒng)硬件組成
      
     。、與IBMPC兼容的板卡級數(shù)據(jù)采集產(chǎn)品
      
      利用IBMPC系列微機及其兼容機I/O通道開放的設(shè)計特點,許多廠商已經(jīng)設(shè)計出采用板卡級結(jié)構(gòu)的數(shù)據(jù)采集產(chǎn)品。這類產(chǎn)品在一塊印刷電路板上包括了模擬多路開關(guān)(MUX)、采樣保持電路(S/H)、模數(shù)、數(shù)模轉(zhuǎn)換器(ADC、DAC)等部件(有的板型還提供并行I/O接口8255,定時/計數(shù)器8254/8254等通用可編程芯片),采用IBMPC總線,可直接插入微機任一擴展槽。本文介紹臺灣AXIOM公司生產(chǎn)的AX5412高速數(shù)據(jù)采集板,以及利用Delphi開發(fā)該產(chǎn)品A/D—D/A接口軟件的方法。
      
      軟件系統(tǒng)設(shè)計
     、、預(yù)備知識
      
      軟件開發(fā)工具的選擇
      為開發(fā)基于Windows95/NT/98操作平臺的32位數(shù)據(jù)采集與處理系統(tǒng),軟件設(shè)計應(yīng)符合以下需求:
      
      ⑴具有在Windows下實時訪問80x86CPUI/O端口、硬件中斷調(diào)用等功能;
      
      ⑵支持32位編程;
      
     、谴a執(zhí)行速度快、界面友好、使用方便;
      
     、乳_發(fā)周期短、代碼可重用性好、效費比高。
      
      綜上所述,根據(jù)VC5.0、VB5.0、Delphi3.0(或其最新版Delphi4.0)三種流行RAD工具的不同特點,作者在開發(fā)Windows版“無線電話務(wù)模擬訓練系統(tǒng)”軟件過程中選擇了Delphi3.0,利用Delphi的IDE環(huán)境編寫VCL構(gòu)件,結(jié)合虛擬設(shè)備驅(qū)動程序(.vxd)實現(xiàn)⑴的功能。
      
      2、VCL構(gòu)件主要屬性、方法、事件、過程介紹
      
     、磐ㄓ脤傩浴⒎椒、過程
      
      ·ActiveHW:Boolean:該屬性只讀且運行時有效,如果虛擬設(shè)備驅(qū)動程序正常工作,則ActiveHW為True,否則為False。
      
      ·OpenDriver:該方法加載虛擬設(shè)備驅(qū)動程序,為其分配內(nèi)存,使程序具有直接訪問系統(tǒng)硬件的能力。如果虛擬設(shè)備驅(qū)動程序加載成功,ActiveHW屬性被設(shè)置為True,否則為False。
      
      ·CloseDriver:該方法關(guān)閉虛擬設(shè)備驅(qū)動程序,釋放為其分配的內(nèi)存。如果虛擬設(shè)備驅(qū)動程序關(guān)閉成功,ActiveHW被設(shè)置為False。
      
     、艻/O端口訪問
      
      ·HardAccess:Boolean:該屬性決定虛擬設(shè)備驅(qū)動程序采用何種方式訪問I/O端口。如果HardAccess為False,I/O訪問速度較快,但若指定I/O地址已被其它驅(qū)動程序占用,I/O訪問可能失;如果HardAccess為True,I/O訪問速度稍慢,但能保證若指定I/O地址已被其它驅(qū)動程序占用,I/O訪問仍能進行。
      
      ·Port[Index:Word]:Byte:該方法數(shù)據(jù)類型為Byte—字節(jié)。(讀/寫指定地址的I/O端口,參數(shù)Index為指定I/O端口地址,數(shù)據(jù)類型為Word—字,下同)
      
      ·PortW[Index:Word]:Word:該方法數(shù)據(jù)類型為Word—字。
      
      ·PortL[Index:Word]:dWord:該方法數(shù)據(jù)類型為DWord—雙字。
      
      I/O讀寫代碼實例:
      
      withmyPortdo
      
      begin
      
      {...}
      
      Port[$2F0]:=$47;//向地址為2F0H的I/O端口寫一個字節(jié)的數(shù)據(jù)47H
      
      {...}
      
      myInpute:=Port[$2F9];//從地址為2F9H的I/O端口讀一個字節(jié)的數(shù)據(jù),并賦給變量
      
      //myInpute
      
      {...}
      
      end;
      
     、怯布袛嗾{(diào)用
      
      與DOS不同,在Windows操作系統(tǒng)中,硬件中斷調(diào)用功能被隱藏或屏蔽起來,Windows一般不允許直接調(diào)用硬件中斷。為此,需使用以下屬性、事件、方法:
      
      ·OnHwInterrupt:TnotifyEvent:該事件通知系統(tǒng)一個硬件中斷已經(jīng)被調(diào)用。應(yīng)將中斷服務(wù)程序放在該事件中。
      
      ·IRQNumber:Byte:該屬性指定欲調(diào)用的中斷號(IRQ1—15),不支持0號中斷(IRQ0—系統(tǒng)時鐘)。
      
      ·SetIRQ:該方法將IRQNumber指定的中斷分配給OnHwInterrrupt過程,并將IsIRQSet屬性設(shè)置為True。
      
      ·UnmaskInterrupt:該方法解除Windows對IRQNumber指定中斷的屏蔽,當中斷產(chǎn)生時,將調(diào)用OnHWInterrupt事件,并將Masked屬性設(shè)置為False。
      
      ·MaskInterrupt:該方法恢復Windows對IRQNumber指定中斷的屏蔽,并將Masked屬性設(shè)置為True。
      
      ·DestroyIRQ:該方法釋放為解除屏蔽由IRQNumber指定中斷分配的內(nèi)存空間,并將IsIRQSet屬性設(shè)置為False,Masked屬性設(shè)置為True。
      
      ·IsIRQSet:Boolean:該屬性只讀,如果SetIRQ設(shè)置中斷成功,IsIRQSet屬性被設(shè)置為True,否則為False。
      
      ·Masked:Boolean:該屬性只讀,如果中斷設(shè)置成功,Masked為False,否則為False。
      
      3、AX5412數(shù)據(jù)采集板性能簡介
      
      與其它產(chǎn)品(如MS1215)相比,AX5412具有許多優(yōu)越性能。限于篇幅,本文無法對產(chǎn)品特性、開關(guān)描述、用戶連接、引腳功能、板上寄存器結(jié)構(gòu)和格式等逐一介紹,僅簡要介紹與接口編程有關(guān)的重要部分,以便閱讀下文所述程序時理解。
      
      ⑴采用12位A/D轉(zhuǎn)換器,A/D轉(zhuǎn)換時間為9us。
      
     、瓶删幊淘鲆婵刂。
      
     、情_關(guān)選擇單端16通道模擬輸入或差動8通道模擬輸入(可抑制嗓聲,得到高精度A/D轉(zhuǎn)換結(jié)果)。
      
     、日加16個連續(xù)I/O端口地址,通過板上基地址選擇開關(guān)設(shè)置基地址,默認為300H。
      
      ⑸`定時器基頻率選擇開關(guān)(J3):AX5412自帶一片8254計數(shù)/定時器,8254中的計數(shù)器1和計數(shù)器2在內(nèi)部串聯(lián)起來產(chǎn)生一個固定周期信號作為A/D轉(zhuǎn)換的觸發(fā)源。有兩個基頻率1MHZ或10MHZ通過J3選擇,默認為1MHZ。級聯(lián)定時器的頻率由下式確定:
      
      除數(shù)1和除數(shù)2分別對應(yīng)于8254計數(shù)器1和計數(shù)器2設(shè)定的計數(shù)值(2~65535,計數(shù)器是16位的)。計數(shù)器1和計數(shù)器2值串聯(lián)相當于一個32位的計數(shù)器,可以用于時間很長的定時。
      
      ⑹A/D數(shù)據(jù)寄存器(基址+0和基址+1)
      
      ·基址+0(讀):低4位說明進行A/D轉(zhuǎn)換的通道號(0~15);高4位是A/D轉(zhuǎn)換值的低4位。
      
      ·基址+0(寫):寫任意值即實施軟件觸發(fā)開始A/D轉(zhuǎn)換。
      
      ·基址+1(讀):A/D轉(zhuǎn)換值的高8位。
      
      ⑺轉(zhuǎn)換通道控制寄存器(基址+2,讀/寫):低4位表示多通道A/D轉(zhuǎn)換的開始通道,高4位表示多通道A/D轉(zhuǎn)換的結(jié)束通道。如低4位和高4位寫入的值相同,表示單一通道連續(xù)采樣。
      
     、0通道D/A輸出(基址+4和基址+5,寫)
      
      ·基址+4:寫該寄存器高4位輸出D/A0低4位,該寄存器低4位無效。
      
      ·基址+5:寫該寄存器8位輸出D/A0高8位。
      
     、1通道D/A輸出(基址+6和基址+7,寫)
      
      ·基址+6:寫該寄存器高4位輸出D/A1低4位,該寄存器低4位無效。
      
      ·基址+7:寫該寄存器8位輸出D/A1高8位。
      
     、螤顟B(tài)寄存器(基址+8)
      
      ·讀:第7位(A/D轉(zhuǎn)換完成位)EOC表示A/D轉(zhuǎn)換是否完成。若EOC=0,A/D轉(zhuǎn)換已完成,可以讀取A/D轉(zhuǎn)換數(shù)據(jù);若EOC=1,A/D轉(zhuǎn)換未完成。當開始讀取數(shù)據(jù),EOC被重新置1。
      
      ·寫:向該寄存器寫任何值清除中斷請求。在實際中斷服務(wù)程序中,在開中斷前應(yīng)先清中斷,再利用控制寄存器(基址+9)開中斷。
      
     、峡刂萍拇嫫鳎ɑ+9)
      
      ·0~1位:控制啟動A/D的觸發(fā)源。
      
      ·2位:為1,DMA方式有效;為0,DMA方式無效。
      
      ·4~6位:選擇中斷級別。(PC機8259中斷控制器管理的中斷中,中斷2系統(tǒng)未用,一般選2級中斷)
      
     、卸〞r器控制寄存器(基址+10,寫)
      
      ·0位:若為1,表示AX5412板上8254計數(shù)器中由計數(shù)器1和計數(shù)器2串聯(lián)成的定時器觸發(fā)起作用;否則,不起作用。
      
     、言鲆婵刂萍拇嫫鳎ɑ+11,讀/寫):低4位組合表示增益。
      
     、妗⒕幊虒嵗
      
      以下程序均以AX5412為例。
      
      1、軟件啟動,查詢管理
      
      ·A/D輪換:
      
      設(shè)有一模擬輸入信號單端輸入,輸入10通道,現(xiàn)對其進行A/D轉(zhuǎn)換,輸入計算機。
      
      {...}
      
      var
      
      constBasea:Word=$300;//AX5412默認基地址為300H
      
      {...}
      
      procedureAdc:Integer;//A/D轉(zhuǎn)換
      
      var
      
      state:Byte;//讀取A/D轉(zhuǎn)換完成位
      
      al:Byte;//A/D轉(zhuǎn)換低4位
      
      ah:Byte;//A/D轉(zhuǎn)換高8位
      
      adval:Integer;//A/D轉(zhuǎn)換結(jié)果
      
      begin
      
      withmyPortdo
      
      begin
      
      Port[Basea+2]:=$AAH;//10通道單通道連續(xù)采樣,170D=AAH
      
      Port[Basea+11]:=0;//增益為1
      
      Port[Basea+9]:=0;//軟件啟動A/D轉(zhuǎn)換
      
      Port[Basea]:=0;//開始A/D轉(zhuǎn)換
      
      repeat
      
      state:=Port[Basea+8];
      
      untilband$80=$80;//檢測A/D轉(zhuǎn)換完成情況
      
      al:=Port[Basea];//讀A/D轉(zhuǎn)換值低4位
      
      ah:=Port[Basea+1];//讀A/D轉(zhuǎn)換值高8位
      
      adval:=(al/16)or(ah*16);//計算12位A/D轉(zhuǎn)換結(jié)果
      
      Adc:=adval;//返回值
      
      end;
      
      end;
      
      ·D/A轉(zhuǎn)換:
      
      設(shè)將一模擬控制電壓Volt從D/A1通道輸出,控制某一對象。
      
      說明:AX5412數(shù)字量輸出滿量程(即12位均為1時,數(shù)字值為4095D)時輸出的模擬電壓為5伏。
      
      procedureDac(Volt:Float);//D/A轉(zhuǎn)換
      
      var
      
      al:Integer;//D/A轉(zhuǎn)換低4位
      
      ah:Integer;//D/A轉(zhuǎn)換高8位
      
      daval:Float;
      
      begin
      
      daval:=4095/5*Volt;//將欲輸出的模擬電壓值近似為數(shù)字值
      
      ah:=Int(daval/16);//A/D轉(zhuǎn)換高8位
      
      al:=Int(daval-ah*16)*16;//A/D轉(zhuǎn)換低4位
      
      withmyPortdo
      
      begin
      
      Port[Basea+6]:=al;//取D/A通道1,輸出D/A轉(zhuǎn)換值低4位
      
      Port[Basea+7]:=ah;//輸出D/A轉(zhuǎn)換值高8位
      
      end;
      
      end;
      
      定時啟動,中斷管理
      設(shè)采樣點數(shù)為1024,采樣頻率為3000HZ,32位定時器采用1MHZ基頻率,連接PC機8259的2級中斷。
      
     、旁O(shè)定采樣參數(shù)
      
      Point:=1024;//采樣點數(shù)為1024
      
      Count:=1000000/3000;//采樣頻率為3000HZ,Count為計數(shù)器1和計數(shù)器2級聯(lián)成的
      
      //定時器的計數(shù)值
      
      Count1:=2;//設(shè)定計數(shù)器1的計數(shù)值為2
      
      Count2:=Int(Count/2);//計算計數(shù)器1的計數(shù)值
      
      Low1:=2;//計數(shù)器1計數(shù)值的低字節(jié)
      
      High1:=0;//計數(shù)器1計數(shù)值的高字節(jié)
      
      Low2:=Count2mod256;//計數(shù)器2計數(shù)值的低字節(jié)
      
      High2:=Count2/256;//計數(shù)器2計數(shù)值的高字節(jié)
      
      withmyPortdo
      
      begin
      
      Port[Basea+11]:=0;//增益為1
      
      Port[Basea+2]:=$11H;//通道1單通道連續(xù)采樣
      
      Port[Basea+15]:=$74H;//選擇計數(shù)器1為工作計數(shù)器,按方式2工作,對計數(shù)器進
      
      //行2次讀/寫操作,先低字節(jié),后高字節(jié)
      
      Port[Basea+13]:=Low1;//寫計數(shù)器1計數(shù)值的低字節(jié)
      
      Port[Basea+13]:=High1;//寫計數(shù)器1計數(shù)值的高字節(jié)
      
      Port[Basea+15]:=$B4H;//選擇計數(shù)器1為工作計數(shù)器,按方式2工作,對計數(shù)器進
      
      //行2次讀/寫操作,先低字節(jié),后高字節(jié)
      
      Port[Basea+13]:=Low2;//寫計數(shù)器2計數(shù)值的低字節(jié)
      
      Port[Basea+13]:=High2;//寫計數(shù)器2計數(shù)值的高字節(jié)
      
      end;
      
     、凭帉懼袛喾⻊(wù)程序
      
      procedureTForm1.myPortHwInterrupt(Sender:TObject);//中斷服務(wù)程序
      
      {...}
      
      ImportHigh:=Port[Basea+1];//讀A/D轉(zhuǎn)換高8位
      
      ImportLow:=Port[Basea];//讀A/D轉(zhuǎn)換高8位
      
      Sample[i]:=ImportHigh*16orImportLow/16;//計算12位A/D轉(zhuǎn)換結(jié)果,并賦值給采
      
      //樣數(shù)組
      
      i:=i+1;
      
      Port[Basea+8]:=0;//清中斷
      
      end;
      
      ⑶設(shè)置中斷
      
      withmyPortdo
      
      begin
      
      ifActiveHWthenCloseDriver
      
      else
      
      begin
      
      OpenDriver;
      
      ifnotActiveHWthen
      
      begin
      
      MessageBeep(0);
      
      Application.MessageBox('系統(tǒng)發(fā)現(xiàn)指定I/O端口未能成功打開!',
      
      '請注意!',mb_OKormb_ICONHAND);
      
      end
      
      else
      
      begin
      
      IRQNumber:=2;
      
      SetIRQ;
      
      end;
      
      end;
      
      end;
      
     、乳_中斷,進行采樣
      
      Port[Basea+9]:=$A3H;//選擇定時器觸發(fā),連接PC機2級中斷,開中斷
      
      Port[Basea+8]:=1;//選擇定時器觸發(fā)
      
      i:=0;
      
      whilei<>Pointdo;//等待中斷,每中斷一次采樣一個數(shù)據(jù),直至采滿Point個點
      
      ⑸退出系統(tǒng)前關(guān)閉中斷
      
      procedureTForm1.FormClose(Sender:TObject;varAction:TCloseAction);
      
      begin
      
      {...}
      
      myPort.CloseDriver;
      
      {...}
      
      end;
      
      在實際工作中,讀者應(yīng)根據(jù)具體數(shù)據(jù)采集板的硬件特性,參考上述方法,編寫數(shù)據(jù)采集、分析、輸出代碼。
      
      參考文獻
      
      
      
      沈蘭蓀.數(shù)據(jù)采集技術(shù).中國科學技術(shù)大學出版社.1990
      FrankEngo.使用Delphi3編程.電子工業(yè)出版社.1997
      一九九九年一月
      
      
      
      作者通信地址:(230031)安徽省合肥市炮兵學院研究生系97級張建軍(收)
      
      作者電話:(0551)5560324(宿舍直撥)(0551)5562566轉(zhuǎn)68750(研究生系值班室)
      
      
      
      
      

    【利用Delphi 3.0開發(fā)微機數(shù)據(jù)采集與處理軟件系統(tǒng)】相關(guān)文章:

    利用ColdFire uClinux實現(xiàn)數(shù)據(jù)采集和傳輸08-06

    具有故障保護功能的數(shù)據(jù)采集系統(tǒng)08-06

    基于USB總線的高速數(shù)據(jù)采集系統(tǒng)08-06

    基于USB接口的數(shù)據(jù)采集系統(tǒng)設(shè)計08-06

    Windows 95下智能數(shù)據(jù)采集系統(tǒng)08-06

    采用USBN9602的數(shù)據(jù)采集系統(tǒng)設(shè)計08-06

    基于DSP的 USB 口數(shù)據(jù)采集分析系統(tǒng)08-06

    基于Verilog HDL設(shè)計的自動數(shù)據(jù)采集系統(tǒng)04-12

    基于DSP的USB口數(shù)據(jù)采集分析系統(tǒng)08-06

    国产福利萌白酱精品tv一区_日韩亚洲中字无码一区二区三区_亚洲欧洲高清无码在线_全黄无码免费一级毛片
    1. <code id="ya7qu"><span id="ya7qu"><label id="ya7qu"></label></span></code>

      <b id="ya7qu"><bdo id="ya7qu"></bdo></b>
      <wbr id="ya7qu"><optgroup id="ya7qu"><strike id="ya7qu"></strike></optgroup></wbr>
    2. <u id="ya7qu"><bdo id="ya7qu"></bdo></u>
      中文AV免费在线 | 亚洲女优中文字幕 | 婷婷精品五月天在线观看 | 五月天伊人久久大香线焦 | 在线精品国精品国产3d | 综合色在线97se |