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>
    現在位置:范文先生網>理工論文>計算機信息技術>利用Delphi 3.0開發微機數據采集與處理軟件系統

    利用Delphi 3.0開發微機數據采集與處理軟件系統

    時間:2022-12-05 13:45:22 計算機信息技術 我要投稿
    • 相關推薦

    利用Delphi 3.0開發微機數據采集與處理軟件系統

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

    【利用Delphi 3.0開發微機數據采集與處理軟件系統】相關文章:

    利用ColdFire uClinux實現數據采集和傳輸08-06

    具有故障保護功能的數據采集系統08-06

    基于USB總線的高速數據采集系統08-06

    基于USB接口的數據采集系統設計08-06

    Windows 95下智能數據采集系統08-06

    采用USBN9602的數據采集系統設計08-06

    基于DSP的 USB 口數據采集分析系統08-06

    基于Verilog HDL設計的自動數據采集系統04-12

    基于DSP的USB口數據采集分析系統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>
      亚洲噜噜网站在线观看 | 亚洲性色在线精品视频 | 日本私人免费网站在线观看 | 亚洲乱码中文字幕综合视频 | 亚洲国产欧美一区 | 中文字幕日本一区二区三区 |