超低頻任意波形信號發(fā)生器設(shè)計_第1頁
超低頻任意波形信號發(fā)生器設(shè)計_第2頁
超低頻任意波形信號發(fā)生器設(shè)計_第3頁
超低頻任意波形信號發(fā)生器設(shè)計_第4頁
超低頻任意波形信號發(fā)生器設(shè)計_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

PAGE超低頻任意波形信號發(fā)生器設(shè)計(LabVIEW)摘要本文介紹了廣泛應(yīng)用于虛擬儀器程序設(shè)計的LabVIEW圖形化集成開發(fā)平臺,指出了它相對于傳統(tǒng)程序設(shè)計語言的優(yōu)點。探討了在LabVIEW環(huán)境下,基于LabJackU12數(shù)據(jù)采集卡的任意波形發(fā)生器的設(shè)計,描述了LabJackU12的功能、特性、驅(qū)動及軟硬件開發(fā)環(huán)境。并給出了該波形發(fā)生器在上述硬件的基礎(chǔ)上,利用LabVIEW來編寫驅(qū)動程序和軟面板的方法。系統(tǒng)主要功能包括產(chǎn)生各種標(biāo)準(zhǔn)波形,利用鼠標(biāo)繪制任意波形,波形編輯,波形的模擬輸出等,具有操作簡單、人機(jī)界面友好、軟件可讀性、可維護(hù)性好和系統(tǒng)易于升級等特點,能滿足實際測試的各種需要?;谔摂M儀器技術(shù)的測量儀器設(shè)計方法,是設(shè)計虛擬儀器系統(tǒng)以替代傳統(tǒng)儀器,實現(xiàn)儀器快速開發(fā)的有效途徑,有效地解決了在超低頻率情況下信號發(fā)生的問題。關(guān)鍵詞:超低頻任意波形LabVIEWLabJackU12數(shù)據(jù)采集卡DesignofUltra-lowFrequencyArbitraryWaveformSignalGenerator(LabVIEW)ABSTRACTItcombinedcomputerhardware,measurementanditshardware,andsoftwareofvirtualinstrument.LabVIEW,agraphicsintegrateddevelopmentenvironmentwidelyusedinvirtualinstrumentsdesign,isintroduced.Itsadvantagesrelativetothetraditionalprogramlanguagesarepresented.Inthispaper,TheDesignofArbitraryWaveformGeneratorwasanalyzedbaseonLabJackDAQcard,withLabVIEW.LabJackU12’sfunction,peculiarity,driversandconditionofsoft-hardwarewaswritten.Basedonthesehardware,themethodthatThearbitrarywaveformgeneratorappliesgraphprogramminglanguageLabVIEWtoprogramdriveandsoft-panelwasintroduced.Themainfunctionsofthesystemincludesgeneratingconventionalwaves,usingmousetodrawarbitrarywaves,editingwaveformandwaveformanalogout,andsoon.Andithasadvantagesofsimpleoperation,kindinterfacebetweencomputerandusers,readableandmaintainableblockprogram,andeasilyupgrade.Thesystemcansatisfytherequirementsofmanypraticaltesting.Finally,ThedesignmethodofanalyzedinstrumentsbasedonVirtualinstrumenttechnologyistheavailabilitywayofceleritydevelopmentinstruments,thispaperhelpstheinstrumentsinstead,ToeffectivelysolvetheultralowfrequencysignalinthecaseoftheproblemKeyWords:Ultra-lowFrequencyArbitraryWaveformGeneratorLabVIEWLabJackU12DAQ(Dataacquisition)Card目錄TOC\o"1-3"\h\u1603第一章概述 111241.1課題設(shè)計的意義及要求 1266821.1.1意義 1143261.1.2要求 1258001.2虛擬儀器的概念及特點 275011.2.1虛擬儀器的概念 2216231.2.2虛擬儀器的特點 21.3超低頻的概況和實現(xiàn)方法···························································································31.3.1超低頻概念·······································································································31.3.2超低頻實現(xiàn)方案和推到公式·············································································31.3.3超低頻在程序中的應(yīng)用····················································································314845第二章LabVIEW和LabJack 4305632.1LabVIEW簡介 4284642.1.1LabVIEW概念 4185632.1.2LabVIEW編程語言的特點 4185042.2LabJack數(shù)據(jù)采集卡 5317212.2.1硬件安裝 514462.2.2軟件安裝 55802.2.3硬件說明 526585第三章方案的選擇與設(shè)計 6271313.1方案的選擇 6152023.1.1任意波形發(fā)生器簡介 6118983.1.2非虛擬的任意波形發(fā)生器 849243.1.3虛擬的任意波形發(fā)生器 838453.2設(shè)計的原理以及模塊的劃分 8125273.2.1硬件部分 843693.2.2軟件部分 9199653.2.3儀器總體設(shè)計思想 10129113.2.4設(shè)計模塊的劃分 1023013第四章任意波形發(fā)生器的軟件設(shè)計 11127544.1任意波形發(fā)生器前面板的設(shè)計 1264164.1.1波形圖指示器的創(chuàng)建以及屬性的設(shè)置 12185464.1.2功能按鈕的創(chuàng)建以及屬性的設(shè)置 13134184.1.3數(shù)字控件和指示器的創(chuàng)建以及屬性的設(shè)置 13178824.1.4通道編輯菜單的創(chuàng)建以及屬性的設(shè)置 14182184.2任意波形發(fā)生器框圖程序的設(shè)計 1566494.2.1while循環(huán) 15197874.2.2本地變量 16122954.2.3case結(jié)構(gòu) 16209724.2.4創(chuàng)建波形 1750174.7任意波形繪制VI前面板的設(shè)計 22189814.7.1輸入控件的創(chuàng)建以及屬性的設(shè)置 2269534.7.2輸出指示器的創(chuàng)建以及相應(yīng)功能的實現(xiàn) 2237924.7.3用來繪制并顯示波形的簇的創(chuàng)建以及相關(guān)的注意事項 23291044.8任意波形繪制VI框圖程序的設(shè)計 24311704.8.1初始波形簇通道的創(chuàng)建 24207124.8.2不同通道波形顏色的分配 25146144.8.3初始化波形圖的屬性 25175684.8.4判斷波形圖中的鼠標(biāo)位置是否移動 26284034.8.5記憶鼠標(biāo)的前一次位置值 27321474.8.6波形的顯示和輸出 2729684.9繪制新點子VI前面板的設(shè)計 28194034.10繪制新點子VI框圖程序的設(shè)計 28175674.10.1判斷數(shù)組中是否存在波形數(shù)據(jù) 2913524.10.2數(shù)組中不存在波形數(shù)據(jù)的情況 30316364.10.3繪制新點方向的確定 307104.10.4數(shù)組中存在波形數(shù)據(jù)的情況 315307第五章系統(tǒng)的運行與調(diào)試 32217475.1調(diào)試中遇到的錯誤 324284第六章結(jié)論 3419890參考文獻(xiàn) 3526624致謝 36天津理工大學(xué)2012屆本科畢業(yè)設(shè)計說明書PAGE36第一章概述1.1課題設(shè)計的意義及要求1.1.1意義儀器設(shè)計是電信專業(yè)的一個主要分支,而虛擬儀器技術(shù)是儀器技術(shù)和計算機(jī)技術(shù)深層次相結(jié)合的產(chǎn)物,已經(jīng)成為21世紀(jì)測試技術(shù)和儀器技術(shù)發(fā)展的主要方向。波形發(fā)生器作為一種常用的信號源,是現(xiàn)代測試領(lǐng)域內(nèi)應(yīng)用最為廣泛的通用儀器之一。在研制、生產(chǎn)、測試和維修各種電子元件、部件以及整機(jī)設(shè)備時,都需要有信號源,由它產(chǎn)生不同頻率不同波形的電壓、電流信號并加到被測器件或設(shè)備上,用其他儀器觀察、測量被測儀器的輸出響應(yīng),以分析確定它們的性能參數(shù)。信號發(fā)生器是電子測量領(lǐng)域中最基本、應(yīng)用最廣泛的一類電子儀器。它可以產(chǎn)生多種波形信號,如正弦波,三角波,方波等,因而廣泛用于通信、雷達(dá)、導(dǎo)航、宇航等領(lǐng)域。1.1.2要求1、課題說明:本課題要求采用虛擬儀器方式設(shè)計超低頻任意波形發(fā)生器。虛擬儀器是將傳統(tǒng)儀器由硬件實現(xiàn)的數(shù)據(jù)分析、處理與顯示等功能改由功能強(qiáng)大的計算機(jī)來完成,通過配置數(shù)據(jù)采集卡設(shè)備和實現(xiàn)不同功能的軟件所構(gòu)成的儀器。硬件采用多功能數(shù)據(jù)采集卡和軟件采用LabVIEW開發(fā)環(huán)境。2、技術(shù)指標(biāo):模擬輸出:雙路輸出電壓范圍:0~+5V輸出頻率范圍:0~20Hz分辨率:10位用鼠標(biāo)繪制任意波形。波形編輯。輸出波形可在函數(shù)發(fā)生器屏幕上同步顯示3、其它要求:(1)查找相關(guān)資料,了解課題要求。(2)使用多功能數(shù)據(jù)采集卡(3)設(shè)計對模擬輸出通道控制的接口驅(qū)動程序。(4)使用LabVIEW開發(fā)環(huán)境(5)儀器面板設(shè)計(要求輸出波形同步顯示)(6)主框圖程序設(shè)計1.2虛擬儀器的概念及特點1.2.1虛擬儀器的概念虛擬儀器是傳統(tǒng)儀器功能與外形的模塊化和軟件化。虛擬儀器主要由通用的計算機(jī)資源、應(yīng)用軟件和儀器硬件等構(gòu)成。使用者利用應(yīng)用軟件將計算機(jī)資源和和儀器硬件結(jié)合起來,通過友好的圖形界面來操作計算機(jī),完成對測試信號的采集、分析、判斷、顯示和數(shù)據(jù)處理等功能。在虛擬儀器系統(tǒng)中,硬件僅僅是為了解決信號的調(diào)理、以及輸入、輸出問題。軟件才是整個儀器系統(tǒng)的關(guān)鍵,主要用于實現(xiàn)對數(shù)據(jù)的讀取、分析和處理、顯示以及對硬件的控制等功能,這些功能在傳統(tǒng)電子儀器中往往通過硬件來實現(xiàn)。任何一個使用者都可以通過修改軟件的方法,很方便地改變、增減儀器系統(tǒng)的功能與規(guī)模,所以有“軟件就是儀器”之說[1]。常見的虛擬儀器組建方案如圖1.1所示:圖1.1常見的虛擬儀器的組建方案1.2.2虛擬儀器的特點虛擬儀器與傳統(tǒng)儀器相比,其特點歸納為:1.軟件是虛擬儀器的核心,虛擬儀器的硬件確立后,它的功能主要是通過軟件來實現(xiàn)的,軟件在虛擬儀器中具有重要的地位。2.虛擬儀器的性價比高。3.虛擬儀器具有良好的人機(jī)界面。4.儀器或系統(tǒng)的功能、規(guī)模由用戶自己定義,加上虛擬儀器的開放性和功能軟件的模塊化,組建系統(tǒng)變得更加靈活、簡單,技術(shù)更新較快。5.易于構(gòu)建網(wǎng)絡(luò)化的測量儀器,基于計算機(jī)網(wǎng)絡(luò)技術(shù)和接口技術(shù),虛擬儀器系統(tǒng)具有方便、靈活的互聯(lián)性。6.虛擬儀器的軟、硬件都具有開放性、模塊化、可重復(fù)使用及互換性等特點[2]。1.3超低頻的概況及實現(xiàn)方法1.3.1超低頻的概況超低頻信號在醫(yī)學(xué)、科研和實驗教學(xué)中有廣泛的應(yīng)用。傳統(tǒng)的低頻信號發(fā)生器用RC文氏電橋振蕩器作為主振器,再經(jīng)過放大器和輸出衰減器后得到信號。這種信號發(fā)生器結(jié)構(gòu)簡單,輸出頻率在幾百-幾千赫茲范圍內(nèi)波形較好,但當(dāng)要求輸出頻率較低時(如零點幾赫茲-幾十赫茲),輸出波形不穩(wěn)定,也不精確。1.3.2超低頻實現(xiàn)方案和推導(dǎo)設(shè)緩沖區(qū)內(nèi)的周期為T,頻率為f。AOUpdata的執(zhí)行時間為20ms,,,假定至少要10個點確定一個波形,那么,由于理論上規(guī)定最少2個點以上確定一個波形,那么20Hz就是頻率的上限。以上若用兩個點,除三角波外無法構(gòu)成任意波形,實際值至少十個點構(gòu)成標(biāo)準(zhǔn)波形,任意波形要用到更多的點,所對應(yīng)的頻率上限也就越低。頻率下限的確定:設(shè)f≤1/(1024×(執(zhí)行時間+△t)),執(zhí)行時間=20ms,總時長=執(zhí)行時間+△t(通過在程序中加入一個延時程序來實現(xiàn))當(dāng)t延時=0時,f=0.0488Hz;當(dāng)f=0.00488Hz時,t延時=184.8ms;當(dāng)f=0.0001時,t延時=9980ms。由此可得t延時無限增大,f就會無限接近于0;所以下限為0,超低頻范圍0~5Hz。由于波形為任意波形,Labjack輸出數(shù)據(jù)的位數(shù)為10位,所以采樣點數(shù)為1024。并且在手繪波形圖中很難出現(xiàn)相同波形,所以周期是Labjack輸出一整個手繪波形所用的時間,具體公式為,此時的頻率是,此時的頻率為最高頻率,應(yīng)用在程序中的圖形表示為:用0接入一個時鐘延時,此時的時長就是Labjack的執(zhí)行時間0.02s。對延時系統(tǒng)加以調(diào)節(jié),加入時間延時△t,總時長為0.02+△t。公式為。此時在前面板創(chuàng)建一個頻率輸入控件,用于調(diào)節(jié)超低頻率,并且創(chuàng)建一個△t顯示控件,用于所用延時的顯示。具體如圖1.2圖1.2用于超低頻所用到的延時程序此時用于輸入的延時時間不再是執(zhí)行時間0.02s,而是在用輸入頻率計算下的總時長。具體公式為:,而顯示的延時時長。到這里,我完成了超低頻的實現(xiàn)方案。第二章LabVIEW和LabJack2.1LabVIEW簡介2.1.1LabVIEW概念LabVIEW虛擬儀器軟件是由美國NI公司開發(fā)的虛擬儀器開發(fā)平臺,其層次化的編程結(jié)構(gòu),圖形化的編程語言,豐富的函數(shù)、功能強(qiáng)大的工具包以及性價比高、通用性強(qiáng)、易于開發(fā)、擴(kuò)展性好的特點都使得其成為當(dāng)前最流行的虛擬儀器開發(fā)平臺。NI公司的LabVIEW7.1開始界面如圖2.1所示。圖2.1LabVIEW7.1開始界面2.1.2LabVIEW編程語言的特點1.實現(xiàn)了儀器控制與數(shù)據(jù)采集的完全圖像化編程,設(shè)計者無需編寫任何文本形式的代碼。2.提供了大量的面向測控領(lǐng)域應(yīng)用的庫函數(shù),如面向數(shù)據(jù)采集的DAQ庫函數(shù)、內(nèi)置GPIB、VXI、串口等數(shù)據(jù)采集驅(qū)動程序。3.提供了大量與外部代碼或應(yīng)用軟件進(jìn)行連接的機(jī)制。4.具有強(qiáng)大的網(wǎng)絡(luò)連接功能,支持常用網(wǎng)絡(luò)協(xié)議,便于用戶開發(fā)各種網(wǎng)絡(luò)測控、遠(yuǎn)程虛擬儀器系統(tǒng)。2.2LabJack數(shù)據(jù)采集卡2.2.1硬件安裝在計算機(jī)正常運行狀態(tài)下,用提供的連接線把LabJackU12接到計算機(jī)的USB口上。這根USB連接線為LabJackU12提供了電源以及它與計算機(jī)間的通訊。狀態(tài)發(fā)光二極管會快速閃4次(頻率大約4赫茲),然后保持暗狀態(tài),這說明計算機(jī)正在訪問查尋。上電時,狀態(tài)發(fā)光二極管會閃4次,在被計算機(jī)識別后會再閃1次后停留在亮的狀態(tài)。若它沒有被禁用,在進(jìn)行短時讀(Burst)和連續(xù)讀(Stream)操作時也會閃。通過軟件,如AISample,AIBurst,或AIStreamStart等函數(shù)可以控制該發(fā)光二極管的亮暗。由于它要用4-5毫安的電流,在某些應(yīng)用中,可以禁用它以減少負(fù)載。2.2.2軟件安裝雖然Windows已包含了LabJack所需的USB底層驅(qū)動程序,但是它還需要高級驅(qū)動程序來進(jìn)行數(shù)據(jù)的傳送和接收。2.2.3硬件說明1.LabJack特性LabJackU12的正面圖如圖圖2.2LabJackU12的正面圖2.LabJack的外部特征有:LabJackU12有兩個模擬電壓輸出的螺絲接線端。其電壓輸出在0和電源電壓(一般為+5伏)之間,具有10位分辨率。輸出電壓是線性的,精度一般為±5%。如果要輸出+5伏電壓,其實際電壓值會是100%的電源電壓值。同樣,要輸出2.5伏,其實際值將是電源電壓值的50%。在沒有負(fù)載情況下,最大輸出電壓值幾乎等于+5伏的100%。但它會隨著負(fù)載的增加而降低。比如要輸出2.5伏的電壓,+5伏的電源電壓測量值為5.1伏,那么實際的輸出就是2.55伏(空載情況下)。另一種更好的方法是用模擬通道來直接測量模擬輸出端的值。在每個模擬輸出通道上有一個低通濾波器,其3dB截止頻率為22赫茲。在上電或復(fù)位時,模擬輸出電壓初始化成0伏。模擬輸出通道可以承受連續(xù)對地短路,不論其輸出值大小。模擬輸出口是輸出口,千萬不要把他們接到任何電壓源上。軟件用EAnalogOut或AOUpdate來輸出電壓,它們的執(zhí)行時間為20ms,這相當(dāng)于每通道的最大刷新頻率約為50赫茲。AOUpdate還控制和讀取20個數(shù)字輸入輸出口的狀態(tài)和計數(shù)器的計數(shù)值。第三章方案的選擇與設(shè)計3.1方案的選擇3.1.1任意波形發(fā)生器簡介任意波形發(fā)生器是信號源的一種,它具有信號源所有的特點和要領(lǐng),我們傳統(tǒng)都認(rèn)為信號源主要給被測電路提供所需要的已知信號(各種波形),然后用其它儀表測量感興趣的參數(shù)??梢娦盘栐丛陔娮訉嶒灪蜏y試處理中,并不測量任何參數(shù),而是根據(jù)使用者的要求,仿真各種測試信號,提供給被測電路,以達(dá)到測試的需要。3.1.2非虛擬的任意波形發(fā)生器1.工作原理任意波形發(fā)生器工作原理主要有兩種:(1)一種是基于直接數(shù)字合成(DDS)技術(shù)的任意波形發(fā)生器。DDS技術(shù)的任意波形發(fā)生器的優(yōu)點在于它非常高的頻率分辨率和快速輸出轉(zhuǎn)換能力,缺點是在高頻狀態(tài)下的波形衰減。(2)另一種是傳統(tǒng)的任意波形發(fā)生器。傳統(tǒng)的發(fā)生器波形存儲器可以分段工作,時鐘頻率可變,便于產(chǎn)生復(fù)雜的波形。2.有待改進(jìn)之處傳統(tǒng)的任意波形發(fā)生器多基于專用的硬件設(shè)備,這些設(shè)備價格昂貴、通用性差、可擴(kuò)展能力弱。3.1.3虛擬的任意波形發(fā)生器任意波形發(fā)生器主要由軟件控制完成信號的產(chǎn)生和輸出。系統(tǒng)軟件總體上包括波形的產(chǎn)生、波形顯示、波形的存儲、波形的加載以及波形的輸出等模塊。利用LabJack硬件和LabVIEW、VC及Delphi開發(fā)的虛擬儀器是儀器發(fā)展的方向,“軟件就是儀器”。3.2設(shè)計的原理以及模塊的劃分3.2.1硬件部分選用LabJackU12數(shù)據(jù)采集卡對任意波形發(fā)生器所產(chǎn)生信號的進(jìn)行采集,采集卡通過USB接口與電腦相連,USB接口既是采集卡的供電接口,又是采集卡與電腦進(jìn)行數(shù)據(jù)通信的接口。采集到的信號將實時送入示波器或虛擬示波器(計算機(jī))中進(jìn)行信號的顯示和分析處理。LabJackU12與計算機(jī)的系統(tǒng)連接圖,包括:PC機(jī)、數(shù)據(jù)采集卡、USB電纜以及所要使用的端口。連接如圖3.1所示:圖3.1LabJackU12與計算機(jī)的系統(tǒng)連接圖1.LabJackU12波形發(fā)生模塊LabJackU12有兩個模擬電壓輸出的螺絲接線端。其電壓輸出在0和電源電壓(一般為+5伏)之間,具有10位分辨率。輸出電壓是線性的,精度一般為±5%。如果要輸出+5伏電壓,其實際電壓值會是100%的電源電壓值。同樣,要輸出2.5伏,其實際值將是電源電壓值的50%。在沒有負(fù)載情況下,最大輸出電壓值幾乎等于+513伏的100%。但它會隨著負(fù)載的增加而降低。2.設(shè)備驅(qū)動程序此設(shè)計用到的函數(shù)主要有:AOUpdate設(shè)定模擬輸出電壓,也可控制P讀取20個數(shù)字IPO和計數(shù)器;GetErrorString把其它函數(shù)返回的出錯代碼轉(zhuǎn)化成字符。正確安裝數(shù)據(jù)采集卡、驅(qū)動程序、并將數(shù)據(jù)采集卡與計算機(jī)相連之后,即可通過LabVIEW編程進(jìn)行數(shù)據(jù)的輸出然后將數(shù)據(jù)通過數(shù)據(jù)采集卡與示波器或虛擬示波器(計算機(jī))相連用以顯示采集到的波形數(shù)據(jù)。3.2.2軟件部分1.基于LabVIEW的軟件設(shè)計平臺LabVIEW虛擬儀器平臺以簡單直觀的編程方式、眾多源碼級的設(shè)備驅(qū)動程序、豐富實用的分析表達(dá)功能和支持功能,使用戶能快速地構(gòu)建虛擬儀器系統(tǒng)。軟件提供簡單、直觀、易于操作的圖形編程方式,使用戶得心應(yīng)手地編制軟件,構(gòu)成儀器并實現(xiàn)任務(wù)和要求。虛擬系統(tǒng)由各種虛擬儀器組成,虛擬儀器由特定功能的元件組成其相互之間的關(guān)系,將成為關(guān)鍵。2.利用LabVIEW來編寫驅(qū)動程序和軟面板LabVIEW是NI公司開發(fā)的專用虛擬儀器平臺,全圖形化的編程方式大大縮短了虛擬儀器的開發(fā)時間。它提供了模擬真實儀表前面板的各種輸入量控制及輸出量顯示的圖形元件,用于構(gòu)建前面板,還提供大量方便數(shù)據(jù)采集及儀器控制函數(shù),用于構(gòu)建儀器的軟件。3.LabVIEW7.0虛擬儀器軟件的構(gòu)成LabVIEW虛擬儀器軟件由前面板和程序框圖兩部分組成。(1)前面板是圖形用戶界面。是模仿真實儀器的測試及應(yīng)用界面,該界面上有交互式的輸入和輸出兩類控件,分別稱為輸入控件(Controls)和顯示控件(Indicators)。輸入控件包括開關(guān)、旋鈕、按鈕和其他各種輸入設(shè)備;顯示控件包括圖形(Graph和Chart)、LED和其他顯示輸出對象。(2)程序框圖是實現(xiàn)VI邏輯功能的圖形化源代碼。是虛擬儀器的“代碼”,編程者根據(jù)儀器工作的目的,調(diào)用LabVIEW的功能函數(shù)模塊,連線控制程序流??驁D中的編程元素除了包括與前面板上的控件對應(yīng)的連線端子(Terminal)外,還有函數(shù)、子VI、常量、結(jié)構(gòu)和連線等。如果將VI與標(biāo)準(zhǔn)儀器相比較,那么前面板就相當(dāng)于儀器的面板,而框圖則相當(dāng)于儀器箱內(nèi)的功能部件。3.2.3儀器總體設(shè)計思想任意波形發(fā)生器的開發(fā),基于LabVIEW的這個軟件開發(fā)平臺。根據(jù)LabVIEW7.1的特點結(jié)合信號源的需求,確定儀器的總體設(shè)計思想:1.利用鼠標(biāo)繪制任意波形,波形編輯等。2.創(chuàng)建友好界面,實現(xiàn)輸出波形相關(guān)參數(shù)的調(diào)整與同步顯示。實現(xiàn)輸出波形的精度高、功能強(qiáng)、穩(wěn)定性好。3.2.4設(shè)計模塊的劃分軟件設(shè)計是任意波形發(fā)生器設(shè)計的核心。根據(jù)上述總體設(shè)計思想,將該系統(tǒng)軟件由波形編輯軟面板、波形創(chuàng)建模塊、波形編輯模塊、波形處理模塊和波形輸出模塊等部分構(gòu)成,其波形編輯軟件的功能框圖如圖3.2所示。1.波形編輯軟面板波形編輯軟件的主要功能是為了滿足各種仿真實驗的需要,不僅可以產(chǎn)生傳統(tǒng)函數(shù)發(fā)生器產(chǎn)生的正弦波、方波、三角波以及鋸齒波,還可以通過手工繪制來產(chǎn)生需要的波形。該軟面板的編輯波形和處理波形的功能以菜單的方式進(jìn)行選擇,分別設(shè)置有“波形創(chuàng)建”、“手工繪制”、“波形編輯”、“波形處理”、“波形加載”、“波形存儲”“波形清除”菜單項。2.波形創(chuàng)建模塊(1)信號產(chǎn)生模塊是該任意波形發(fā)生器的核心部分,該部分程序的主體是一個case結(jié)構(gòu)。(2)任意波形模塊的功能是生成用戶利用波形圖(graph)中的鼠標(biāo)控件屬性繪制的任意波形。在while循環(huán)中,讀取graph中活動光標(biāo)的當(dāng)前位置,并與上次循環(huán)時的位置進(jìn)行比較。如果有所不同,將調(diào)用子程序以生成新的波形。子程序主要功能就是判斷是否需要更新波形。如果是的話,則在原位置和新位置間連直線替換原波形,并返回一布個布爾值為true的不爾常量,且保存新的光標(biāo)位置以供下次循環(huán)調(diào)用。3.波形編輯模塊波形編輯模塊的功能是對當(dāng)前通道內(nèi)波形的編輯,可以手工編輯并修改波形。手工繪制波形是可以用最直觀、最方便的方法對已有波形信號進(jìn)行修改的方法。在波形顯示區(qū)手工繪制波形的過程就如同在畫圖軟件中使用鉛筆繪畫一樣。4.波形處理模塊波形的算術(shù)處理是指對已有的兩個或者多個波形進(jìn)行相加、相減、相乘、相除的處理,可以規(guī)類為在波形的縱向?qū)ζ溥M(jìn)行編輯。本設(shè)計中只涉及對波形的相加處理。5.波形輸出模塊波形輸出模塊的功能是將用戶選擇的波形數(shù)據(jù)送到LabJackU12數(shù)據(jù)采集卡上,并控制該卡進(jìn)行D/A轉(zhuǎn)換,在指定的通道上輸出相對應(yīng)的模擬波形并送到示波器或虛擬示波器(計算機(jī))上用以顯示波形數(shù)據(jù)。第四章任意波形發(fā)生器的軟件設(shè)計4.1任意波形發(fā)生器前面板的設(shè)計從波形圖指示器中觀測你所創(chuàng)建,編輯或想要輸出的波形。通過通道選擇不爾按鈕可以選擇你想要輸出波形的通道,然后從通道編輯菜單中實現(xiàn)創(chuàng)建波形,編輯波形,波形處理,加載或存儲波形,清除波形等功能。當(dāng)需要輸出波形時,按下開始按鈕。終止波形的輸出按下退出按鈕。如圖4.1所示:圖4.1任意波形發(fā)生器的前面板4.1.1波形圖指示器的創(chuàng)建以及屬性的設(shè)置1.如何創(chuàng)建用位置工具從control模板中的graph子模板內(nèi)選擇waveformgraph指示器并放到前面板中的合適位置。標(biāo)簽是可見的,圖例也是可見的。2.屬性的設(shè)置(1)圖例的設(shè)置通過右鍵單擊指示器在彈出的快捷菜單中選擇VisibleItems選項并從它的下拉菜單中對以上二屬性進(jìn)行設(shè)置。由于我所設(shè)計的任意波形發(fā)生器是雙通道的,也就是可以同時輸出兩組波形數(shù)據(jù),所以總共要創(chuàng)建四個波形圖指示器,兩個用來作為0、1通道已經(jīng)創(chuàng)建波形的編輯區(qū),另兩個用來作為0、1通道輸出波形的實時顯示區(qū)。為了更清晰的分辨不同通道的波形,我分別對0、1通道波形的屬性進(jìn)行設(shè)置,右鍵單擊想要設(shè)置的通道波形的圖例,在彈出的快捷菜單中對相應(yīng)的屬性進(jìn)行設(shè)置。我將0通道的波形設(shè)置為黃色,1通道的波形設(shè)置為紅色,線的類型都為細(xì)實線。(2)其它屬性的設(shè)置要想進(jìn)一步對指示器的屬性進(jìn)行設(shè)置,右鍵單擊指示器在彈出的快捷菜單中選擇properties這一項可對指示器的外觀,數(shù)值的格式和精度,線的屬性,坐標(biāo)范圍和文件描述進(jìn)行設(shè)置。因為采樣點數(shù)為1024,所以我將X軸的范圍設(shè)置為0到1023,精度位為1位,即從0.0到1023.0。Y軸的范圍設(shè)置為0到5,精度位為1位,即從0.0到5.0。為了讓兩個通道的波形能夠很清晰的顯示在指示器上,我將圖的主格線設(shè)置為綠色,將副格線設(shè)置為透明。如果主格、副格同時顯示會使顯示效果顯得非常凌亂,除非你想要進(jìn)行精確的計算和比較,那樣才會是不錯的選擇。4.1.2功能按鈕的創(chuàng)建以及屬性的設(shè)置1.開始和退出按鈕兩個按鈕的機(jī)械動作都定義為當(dāng)按下時轉(zhuǎn)換動作也即當(dāng)按鈕被按下時,控制量的狀態(tài)發(fā)生改變,并一直保持到下一次按鈕被按下時。這種動作不受程序讀取控制量數(shù)值次數(shù)的影響。這里有一點需要注意,就是對于已經(jīng)創(chuàng)建本地變量的布爾控件的機(jī)械動作只能定義為轉(zhuǎn)換,不能定義為鎖定;如果定義為鎖定,則VI的任務(wù)欄的運行箭頭會產(chǎn)生斷裂,單擊它會顯示錯誤信息并提示你布爾值的鎖定行為與本地變量不兼容。具體信息是如果一個布爾控件創(chuàng)建了相應(yīng)的本地變量則它不能應(yīng)用鎖定的機(jī)械行為。一個具有轉(zhuǎn)換行為并具有讀屬性的布爾控件值的本地變量會將自身的值復(fù)位到缺省狀態(tài)。2.通道選擇按鈕的創(chuàng)建用位置工具從control模板的boolean子模板內(nèi)獲取rocker控件并放到前面板上合適位置上,它用來選擇你想要創(chuàng)建的波形的輸出通道。4.1.3數(shù)字控件和指示器的創(chuàng)建以及屬性的設(shè)置1.演示模式用位置工具從control模板classiccontrols子模板中的classicboolean內(nèi)選取dialogradiobutton并且將標(biāo)簽命名為演示模式。右鍵單擊控件在彈出的快捷菜單中選擇properties選項,將布爾控件開狀態(tài)的顏色設(shè)為淺綠色,將布爾控件關(guān)狀態(tài)的顏色設(shè)為深綠色。在演示模式下,任意波形發(fā)生器是不需要數(shù)據(jù)采集卡的。如果此時輸出波形,錯誤提示區(qū)指示器會顯示Noerror信息,本地標(biāo)識號指示器的的值為0。在非演示模式下,任意波形發(fā)生器是需要使用數(shù)據(jù)采集卡的。如果此時輸出波形,錯誤提示區(qū)指示器會顯示NoLabJacksfound信息,本地標(biāo)識號指示器的的值為-1。2.本地標(biāo)識號用位置工具從control模板中的numeric子模板中選取數(shù)字指示器并且將標(biāo)簽命名為本地標(biāo)識號。3.錯誤提示區(qū)用位置工具從control模板中的numeric子模板中選取數(shù)字指示器并且將標(biāo)簽命名為錯誤提示區(qū)。4.波形指示器用位置工具從control模板中的graph子模板內(nèi)選擇waveformgraph指示器并放到前面板中的合適位置。我總共要創(chuàng)建四個波形圖指示器,兩個用來作為0、1通道已經(jīng)創(chuàng)建波形的編輯區(qū)并分別將標(biāo)簽命名為0通道波形編輯區(qū)和1通道波形編輯區(qū),另兩個用來作為0、1通道輸出波形的實時顯示區(qū)并分別將標(biāo)簽命名為0通道輸出波形顯示區(qū)和1通道輸出波形顯示區(qū)。4.1.4通道編輯菜單的創(chuàng)建以及屬性的設(shè)置1.簇空殼的創(chuàng)建用位置工具從control模板中的array&cluster子模板內(nèi)選擇一個簇的空殼并放到前面板中合適的位置上,然后根據(jù)所要放置的控件的多少(也即所要實現(xiàn)功能的多少)用位置工具調(diào)整簇空殼的大小。2.簇元素的添加從control模板中的boolean子模板內(nèi)選擇布爾按鈕控件,根據(jù)需要我總共創(chuàng)建了5個并按順序依次將它們放入簇空殼中。布爾控件的文本名分別為創(chuàng)建任意波形,編輯當(dāng)前波形,從文件中載入波形,保存波形到文件中,清除波形。這些只是在布爾值為假時所顯示的文本內(nèi)容,對于布爾值為真時的文本內(nèi)容的創(chuàng)建可通過右鍵單擊布爾控件在彈出的快捷菜單中選擇Properties選項進(jìn)行設(shè)置,而且也可通過此方法對控件的外觀,機(jī)械屬性以及功能描述進(jìn)行設(shè)置。3.簇的使用注意事項這里有一點需要注意的是簇的成員可以是任意的數(shù)據(jù)類型,但是必須同時都是控制件或同時都是顯示件。4.簇元素的介紹下面我分別對布爾型控制件的簇中的每個元素的功能進(jìn)行介紹,以方便我們能夠很好的熟識任意波形發(fā)生器前面板的功能。(1)任意波形:通過鼠標(biāo)去畫你想要的波形。(2)編輯波形:不管它是通過標(biāo)準(zhǔn)波形庫創(chuàng)建的還是通過手工繪制產(chǎn)生的。你都可以編輯當(dāng)前通道內(nèi)的波形。(3)載入波形:從文件中加載之前被保存過的波形數(shù)據(jù)然后將它放到被選擇的通道指示器中編輯和顯示。(4)保存波形:把當(dāng)前通道內(nèi)的波形數(shù)據(jù)以文件的形式保存起來。(5)清除波形:清除當(dāng)前通道內(nèi)的波形數(shù)據(jù)。4.2任意波形發(fā)生器框圖程序的設(shè)計此框圖程序主要由兩個while循環(huán),和一個主case結(jié)構(gòu)構(gòu)成。最外面的循環(huán)實現(xiàn)控制波形的輸出,內(nèi)部的循環(huán)實現(xiàn)控制波形的產(chǎn)生。主case結(jié)構(gòu)用來實現(xiàn)前面板中所創(chuàng)建的通道編輯菜單內(nèi)的按鈕的功能。如圖4.2所示:圖4.2任意波形發(fā)生器的框圖程序4.2.1while循環(huán)1.while循環(huán)的創(chuàng)建我們首先從function模板的structure子模板中選擇while循環(huán)并按下鼠標(biāo)將邊框拖到合適位置后松開鼠標(biāo)即可,它會一直重復(fù)內(nèi)部子框圖程序一直到條件端子的條件不滿足為止。這個端子是一個輸入端子,接收一個特殊的布爾值。布爾值依賴于while循環(huán)的連續(xù)性行為。2.條件端子右鍵單擊條件端子并且從快捷菜單中選擇StopifTrue或者ContinueifTrue。你也可以將錯誤簇連到條件端子,右鍵單擊端子然后從快捷菜單中選擇StoponError選項或者ContinuewhileError選項。3.while循環(huán)的使用while循環(huán)至少執(zhí)行一次,屬于當(dāng)型循環(huán)。計數(shù)端i會提供當(dāng)前的循環(huán)次數(shù),第一次循環(huán)時為0。4.退出按鈕狀態(tài)的恢復(fù)如圖4.3所示圖4.3退出按鈕狀態(tài)的恢復(fù)(1)問題的分析我在這里用前面板創(chuàng)建的退出按鈕布爾控件來控制條件端子,但是在做這件事之前,我要從function模板的boolean子模板中選擇取反(not)函數(shù)對布爾控件進(jìn)行取反后再連接到條件端子。因為我所設(shè)置的循環(huán)條件是布爾值為真時繼續(xù)循環(huán),所以要想使退出按鈕真正起作用,必須將它取反之后再連到條件端子。或者你也可以將循環(huán)條件設(shè)置成布爾值為假時繼續(xù)循環(huán),這樣就不用加取反函數(shù)了。我還是采用前一種設(shè)置,由于這個布爾控件的機(jī)械屬性是當(dāng)按下時狀態(tài)發(fā)生轉(zhuǎn)換(switchwhenpressed),所以一旦我們按下這個按鈕,它就會一直保持布爾值為真的狀態(tài),取反后條件端子判斷為假,循環(huán)無法繼續(xù)運行,也就是任意波形發(fā)生器無法正常啟動。(2)問題的解決為了解決這個問題,我們可以創(chuàng)建一個退出按鈕的本地變量,然后將取反后的值寫入本地變量,這樣每當(dāng)我們按下退出按鈕后,它就會自動恢復(fù)到原來的狀態(tài)。在這里我具體談?wù)動嘘P(guān)本地變量的作用和特點。4.2.2本地變量定義本地變量是LabVIEW為改善圖形化編程的靈活性局限而專門設(shè)計的一個特殊節(jié)點,主要解決數(shù)據(jù)和對象在同一VI程序中的復(fù)用。2.為什么要引用本地變量(localvariable)在LabVIEW中,前面板上的每一個控制或指示在框圖程序上都有一個對應(yīng)的端口,控制通過這個端口將數(shù)據(jù)傳送給框圖程序的其它節(jié)點,框圖程序也可以通過這個端口為指示賦值。但是,這個端口是唯一的,一個控制或一個指示只有一個端口。而用戶在編程時,經(jīng)常需要在同一個VI框圖程序中的不同位置多次為指示賦值,或多次從控制中取出數(shù)據(jù),或者是為控制賦值(write屬性),從指示中取出數(shù)據(jù)(read屬性)。顯然,這時僅用一個端口是無法實現(xiàn)這些操作的。本地變量的引入,巧妙地解決了這個問題。當(dāng)你創(chuàng)建了一個本地變量時,相應(yīng)前面板中對象的本地變量圖標(biāo)就會顯示在框圖程序上。向本地變量寫入數(shù)據(jù)與將數(shù)據(jù)傳遞給其相應(yīng)的端子是等同的,除此之外你也可以將數(shù)據(jù)寫入控件或者從指示器中讀取數(shù)據(jù)[14]。如前所述,使用本地變量可以在框圖程序的不同位置訪問前面板對象。前面板對象的本地變量相當(dāng)于其端口的一個拷貝,它的值與該端口同步。也就是說,兩者所包含的數(shù)據(jù)是相同的。3.本地變量的特點及局限一個本地變量就是其相應(yīng)前面板對象的一個數(shù)據(jù)拷貝,要占用一定的內(nèi)存。所以,應(yīng)該在程序中控制本地變量的數(shù)量。LabVIEW是一種并行處理語言,只要節(jié)點的輸入有效,節(jié)點就會執(zhí)行。當(dāng)程序中有多個本地變量時,就要特別注意這一點,因為這種并行執(zhí)行可能造成意想不到的錯誤。本地變量與傳統(tǒng)編程語言中的局部變量相似,就是它只能在同一個VI中使用,不能在不同的VI之間使用。4.2.3case結(jié)構(gòu)還記得嗎,我在前面板曾創(chuàng)建過一個內(nèi)含八個布爾控件的簇,這八個按鈕都對應(yīng)著不同的功能,我們?nèi)绾螌崿F(xiàn)對不同功能的選擇性執(zhí)行,這就要用到case結(jié)構(gòu)。1.case結(jié)構(gòu)的創(chuàng)建我從function模板的structure子模板中選擇case結(jié)構(gòu),放到while循環(huán)內(nèi)合適的位置上,拖到合適大小松開鼠標(biāo)即可。2.case結(jié)構(gòu)的使用選擇結(jié)構(gòu)可以包含一個或多個子框圖程序或子case,當(dāng)執(zhí)行case結(jié)構(gòu)時只會執(zhí)行其中某一種“情況"。(1)選擇端子被連到選擇端口的值會判斷要執(zhí)行哪一個case并且它可以是布爾型,字符串型,整型或枚舉類型。我這里用到的是整型,選擇端口的圖標(biāo)顏色也會隨連接的數(shù)值類型而改變。默認(rèn)情況是連接一個布爾量,圖標(biāo)為綠色,共有兩個子框圖程序。(2)子框圖程序設(shè)置右鍵單擊case結(jié)構(gòu)的邊框來添加或刪除case。我總共創(chuàng)建了7個數(shù)值型case從0到6。.用標(biāo)簽工具去輸入在case的選擇標(biāo)簽中的值并且去配置每一個case要用的值。單擊在選擇標(biāo)識上的增減箭頭就可以滾動并通過有效的子框圖程序。對于每一個case結(jié)構(gòu)來說,用標(biāo)簽工具在case結(jié)構(gòu)的頂部的case選擇標(biāo)識中輸入一個單值或列表以及一定范圍的數(shù)據(jù)。你也可以創(chuàng)建多個輸入和輸出通道并且為一個case結(jié)構(gòu)指出一個缺省case。用標(biāo)簽工具修改子框圖程序標(biāo)識,可以設(shè)置子框圖程序與選項的對應(yīng)關(guān)系。我將它設(shè)置為..0或6..,前者表示小于或等于0的選項值都執(zhí)行這個子框圖程序,后者表示大于或等于6的選項值都執(zhí)行這個子框圖程序。如果你無意間將case結(jié)構(gòu)的順序弄錯,沒關(guān)系,你可以通過在選擇結(jié)構(gòu)邊框的彈出菜單上選RearrangeCase...選項,之后會彈出一個對話框,在對話框中的CaseList中拖動子框圖程序名到需要的位置。(3)數(shù)據(jù)通道的要求向選擇結(jié)構(gòu)邊框內(nèi)輸入數(shù)據(jù)時,各個子框圖程序連接或不連接這個數(shù)據(jù)通道都可以。但是從選擇結(jié)構(gòu)邊框向外輸出數(shù)據(jù)時,各個子框圖程序都必須為這個通道連接數(shù)據(jù)。否則通道圖標(biāo)是中空的,程序運行按鈕也是斷開的。當(dāng)各個子框圖程序都為這個通道連接好數(shù)據(jù)以后,通道圖標(biāo)才變?yōu)閷嵭牡模绦虿趴梢赃\行。但是如果允許沒有連線的子框圖程序輸出默認(rèn)值,可以在數(shù)據(jù)通道彈出菜單上選擇UseDefaultIfUnwired選項。這時數(shù)據(jù)通道變?yōu)榛疑绦驁?zhí)行到?jīng)]有為數(shù)據(jù)通道連線的子框圖程序時,就輸出相應(yīng)數(shù)據(jù)類型的默認(rèn)值。4.2.4創(chuàng)建波形1.判斷通道編輯菜單中的按鈕是否被按下我們?nèi)绾稳z索通道編輯菜單中哪個按鈕被按下,首先我們要將簇轉(zhuǎn)化為數(shù)組函數(shù),這里我們要用到ClustertoArray函數(shù),如圖4.4所示:圖4.4簇轉(zhuǎn)換成數(shù)組函數(shù) 從function模板的array子模板中選擇ClustertoArray即可。然后將這個函數(shù)的輸出端作為Search1DArray函數(shù)的輸入端,如圖4.5所示:圖4.5一維數(shù)組索引函數(shù)從function模板的array子模板中選擇Search1DArray,這個函數(shù)在以startindex為開始的位置去查找一維數(shù)組中的一個元素,你沒有必要在調(diào)用這個函數(shù)前對數(shù)組進(jìn)行排序,因為查找是線性的。索引元素輸入端的值是一個布爾值為真的常量,元素的類型應(yīng)該和一維數(shù)組的類型相匹配。如果函數(shù)沒有找到元素,則元素的索引值為-1。那么對應(yīng)到case結(jié)構(gòu)中為第0個case,對應(yīng)的功能是不執(zhí)行任何操作,也就是沒有按鈕被按下。由于函數(shù)返回的元素索引值是從0開始的,而我在case結(jié)構(gòu)中所設(shè)置的的執(zhí)行功能是從第1個case開始,所以要將一維數(shù)組索引函數(shù)所返回的元素索引值加上1后再連接到case結(jié)構(gòu)的選擇端子上,以使按下的按鈕和其對應(yīng)的功能匹配。2.六個功能case(1)第一個功能case:我們要創(chuàng)建一個子VI,它允許你從標(biāo)準(zhǔn)波形庫中創(chuàng)建你自己的輸出波形。如圖4.6所示:圖4.6第一個功能case的設(shè)計這個VI有一個通道選擇輸入端和一個波形輸出端,我們將通道選擇按鈕連到它的輸入端。注意,這個布爾控件是放在case結(jié)構(gòu)以外的,因為在其它的case中也要使用它。它是作為輸入通道而使用的,所以并不要求所有的子case都要連接到它。因為要實現(xiàn)0或1通道波形的選擇性輸出,所以我還要在這個case中創(chuàng)建一個缺省的case結(jié)構(gòu),假case中放入一個標(biāo)簽名為0通道波形編輯區(qū)的數(shù)組型指示器(直接右鍵單擊波形庫VI的輸出端在彈出的快捷菜單中選擇create選項并在下拉菜單中選選擇indicater選項),真case中放入一個標(biāo)簽名為1通道波形編輯區(qū)的數(shù)組型指示器。將通道選擇按鈕也連到這個case結(jié)構(gòu)的選擇端子上,同時不要忘記將波形庫VI的輸出端連到不同通道的數(shù)組指示器上。(2)第二個功能case:實現(xiàn)任意波形的繪制,我們要創(chuàng)建一個子VI,它允許你畫自己的波形。如圖4.7所示:圖4.7第二個功能case的設(shè)計這個VI同樣包含一個通道選擇輸入端、初始波形輸入端以及一個最終波形輸出端。我們將通道選擇按鈕連到它的輸入端。由于技術(shù)指標(biāo)中已經(jīng)指出分辨率是10位,所以每個緩沖區(qū)采樣1024-個點。如果是這樣,我們要用到ArraySubset函數(shù),如圖4.8所示:圖4.8子數(shù)組函數(shù)從function模板中array子模板中選擇即可,它的輸出端會返回以index開始的數(shù)組的一部分并且包含length個元素。當(dāng)你將一個數(shù)組連到這個函數(shù)的輸入端時,函數(shù)會自動調(diào)整大小用以顯示你所連接的數(shù)組中每一維的索引輸入。我們要將最終波形輸出端連接到ArraySubset函數(shù)的array輸入端,然后在length輸入端創(chuàng)建一個數(shù)值為1000的常量。在index輸入端不被連接的情況下,缺省值是0。所創(chuàng)建的數(shù)值常量應(yīng)作為輸入通道放置在case結(jié)構(gòu)之外,因為這些常量值在其他的子case中也要被用到,所以要將它設(shè)為部分子case的輸入通道。同樣我要創(chuàng)建一個用于顯示不同通道波形的case結(jié)構(gòu),條件為真時將數(shù)據(jù)寫入1通道的波形編輯區(qū),條件為假時將數(shù)據(jù)寫入0通道的波形編輯區(qū)。但這里所使用的通道指示器是前一個功能case中所創(chuàng)建的通道指示器的本地變量。(3)第三個功能case:實現(xiàn)對當(dāng)前通道內(nèi)波形的編輯,同樣我們要用到任意波形繪制子VI和ArraySubset函數(shù)。如圖4.9所示:圖4.9第三個功能case的設(shè)計這個子case與上一個子case的不同之處在于它內(nèi)部多創(chuàng)建了一個case結(jié)構(gòu),這個case結(jié)構(gòu)的創(chuàng)建以及內(nèi)部所放置的通道波形編輯區(qū)指示器和前面一個子case中所設(shè)計的如出一轍。但對于內(nèi)部這個要作為初始波形輸入端并實現(xiàn)不同通道波形選擇的case結(jié)構(gòu),我們要將其內(nèi)部的本地變量改為讀屬性(右鍵單擊本地變量在彈出菜單中選擇changetoread選項即可)。其它函數(shù),結(jié)構(gòu),以及子VI端口的連接都和上一個功能case一樣。(4)第四個功能case:實現(xiàn)將已經(jīng)存在的波形數(shù)據(jù)從文件中提取并將其放入0或1通道波形編輯區(qū)指示器中編輯和顯示。如圖4.10所示:圖4.10第四個功能case的設(shè)計這里我們要用到一個ReadFromSGLFile子VI(從function模板中fileI/O子模板內(nèi)的binaryfileVIs中選擇ReadFromSGLFile.vi即可)。從這個VI的1Darray輸出端輸出的波形也需要通過ArraySubset函數(shù)來限制每個緩沖的采樣點數(shù),然后再將這個函數(shù)的subarray輸出端連接到用來實現(xiàn)不同通道波形選擇輸出的case結(jié)構(gòu)內(nèi)的的0和1通道波形編輯區(qū)指示器上。(5)第五個功能case:實現(xiàn)將當(dāng)前通道波形編輯區(qū)指示器中的波形數(shù)據(jù)以文件的形式儲存起來。如圖4.11所示:圖4.11第五個功能case的設(shè)計用新創(chuàng)建的用來實現(xiàn)不同通道波形選擇的case結(jié)構(gòu)中具有讀屬性的0,1通道波形編輯區(qū)指示器的本地變量讀取數(shù)據(jù),然后通過ArraySubset函數(shù)實現(xiàn)要存入文件中波形數(shù)據(jù)的采樣點數(shù)的限制,最后將輸出端連到WriteToSGLFile子VI的1Darray輸入端上。(6)第六個功能case:實現(xiàn)對當(dāng)前通道內(nèi)的波形數(shù)據(jù)清零。如圖4.12所示:圖4.12第六個功能case的設(shè)計首先我們要創(chuàng)建一個空數(shù)組,這就要用到InitializeArray函數(shù),如圖4.13所示:圖4.13初始化數(shù)組函數(shù)從function模板中array子模板內(nèi)選取即可,這個函數(shù)可以創(chuàng)建一個n維數(shù)組,它的每一個元素都被初始化為element輸入端的值。用位置工具調(diào)整這個函數(shù)的大小并且增加輸出數(shù)組的維數(shù)。如果anydimensionsize輸入端的值是0,則說明函數(shù)創(chuàng)建了一個空數(shù)組。然后將initializedarray輸出端連接到用作不同通道波形選擇輸出的case結(jié)構(gòu)內(nèi)的通道波形編輯區(qū)指示器上,這樣就可以實現(xiàn)對當(dāng)前通道內(nèi)波形數(shù)據(jù)的清除。(9)波形圖的屬性節(jié)點為什么要用屬性節(jié)點?通過改變前面板對象屬性節(jié)點的屬性值,可以在程序運行中動態(tài)地改變前面板對象的屬性。若需要同時改變前面板對象的多個屬性,一種方法是創(chuàng)建多個屬性節(jié)點,另外一種更加簡捷的方法是在一個屬性節(jié)點的圖標(biāo)上添加多個端口。添加的方法是操作工具拖動屬性節(jié)點圖標(biāo)下邊緣(或上邊緣)的尺寸控制點,或在屬性節(jié)點的右鍵彈出菜單中選擇AddElement.屬性節(jié)點與本地變量類似,也有讀和寫兩種屬性,在屬性節(jié)點圖標(biāo)某一端口的右鍵彈出菜單中選擇ChangetoRead或ChangetoWrite可改變該端口的讀寫屬性,選擇ChangeAlltoRead或ChangeAlltoWrite可改變屬性節(jié)點圖標(biāo)中所有端口的讀寫屬性。4.7任意波形繪制VI前面板的設(shè)計這個VI允許你通過拖動鼠標(biāo)來手動繪制你想要的波形。如圖4.32所示:圖4.32任意波形繪制VI的前面板4.7.1輸入控件的創(chuàng)建以及屬性的設(shè)置從function模板array&cluster子模板中選擇array空殼,然后將numeric子模板中的numericcontrol放到數(shù)組空殼中并命名為InitialWaveform,形成一個一維的數(shù)組控件。用來將已經(jīng)創(chuàng)建的波形數(shù)據(jù)輸入到框圖程序中并根據(jù)用戶需要進(jìn)行編輯。從function模板boolean子模板中選擇rocker布爾控件,命名為channel。用來實現(xiàn)對不同通道的選擇輸出。從function模板classiccontrol子模板的classicboolean中選擇labeledoblongbutton,然后對它的屬性進(jìn)行設(shè)置,右鍵單擊控件在彈出的快捷菜單中選properties選項。將按鈕的開啟狀態(tài)的文本內(nèi)容設(shè)為停止,關(guān)閉狀態(tài)的文本內(nèi)容設(shè)為完成。這個按鈕可實現(xiàn)將手工繪制完畢的波形送回至任意波形發(fā)生器的前面板中編輯和顯示。4.7.2輸出指示器的創(chuàng)建以及相應(yīng)功能的實現(xiàn)從function模板array&cluster子模板中選擇array空殼,然后將從numeric子模板中選擇的numericindicater放到數(shù)組空殼中并命名為FinalWaveform,形成一個一維的數(shù)組指示器。用來儲存已經(jīng)編輯好的波形數(shù)據(jù)。4.7.3用來繪制并顯示波形的簇的創(chuàng)建以及相關(guān)的注意事項1.顯示件的創(chuàng)建以及屬性的設(shè)置從function模板array&cluster子模板中選擇一個cluster空殼并放到前面板中合適的位置上,然后再創(chuàng)建2個numericindicater。第一個數(shù)字指示器中的缺省值被設(shè)為0,作為波形圖簇元素中的Xo起始點,第二個數(shù)字指示器中的缺省值被設(shè)為1,作為波形圖簇元素中的dx增量。從function模板graph子模板中選擇一個waveformgraph,對波形圖的屬性進(jìn)行設(shè)置,同樣是從它的快捷菜單中選擇properties選項,將橫坐標(biāo)范圍設(shè)為0.0到1023.0,縱坐標(biāo)的范圍設(shè)置為0到5。數(shù)字的表達(dá)方式均為浮點型,橫坐標(biāo)的精度位為1位。波形圖的底格色為綠色,顯示主格并將副格設(shè)為透明。將鼠標(biāo)的顏色設(shè)為白色,顯示鼠標(biāo)但不顯示鼠標(biāo)的名稱,允許拖拽鼠標(biāo)。2.兩個簇中元素的匹配將已經(jīng)創(chuàng)建的數(shù)字指示器和波形圖指示器放到空簇中,放置順序是先將缺省值為0的數(shù)字指示器放入,再將缺省值為1的數(shù)字指示器放入,最后再放入波形圖指示器。圖4.33兩個簇中元素不匹配所產(chǎn)生的壞線提示如果兩個簇中元素的順序不匹配,就會產(chǎn)生壞線。你可以從文本幫助窗口(contexthelp)中看到如下解釋:你已經(jīng)連接了兩個包含不同元素的簇并且會提示你在兩個簇中的哪些元素有沖突。這樣,你可以將沖突元素從新排序以保持兩個簇中元素順序的一致。如圖4.33所示:4.8任意波形繪制VI框圖程序的設(shè)計在這里我們創(chuàng)建一個while循環(huán),并在循環(huán)邊框上創(chuàng)建移位寄存器,實現(xiàn)繪制波形時對舊點的記憶,從而可以將繪制的完整波形呈現(xiàn)在用戶面前。當(dāng)然我還利用了while循環(huán)的移位寄存器實現(xiàn)鼠標(biāo)點的記憶功能。同時,我還在while循環(huán)內(nèi)創(chuàng)建了一個case結(jié)構(gòu),通過case結(jié)構(gòu)實現(xiàn)對是否繪制新點來進(jìn)行判斷。如圖4.34所示:圖4.34任意波形繪制VI的框圖程序4.8.1初始波形簇通道的創(chuàng)建1.bundle函數(shù)的使用從function模板cluster子模板中選擇bundle函數(shù),如圖4.35所示:圖4.35捆綁函數(shù)它將多個元素集合成一個簇。當(dāng)你創(chuàng)建一個新簇時,你一定要連接所有的輸入端。輸出端簇中元素的順序一定要和輸入端簇中元素的順序保持一致。在缺省情況下,bundle函數(shù)只有兩個輸入端,你可以通過用操作工具拖動屬性節(jié)點圖標(biāo)下邊緣(或上邊緣)的尺寸控制點直接調(diào)整函數(shù)的大小或在函數(shù)輸入端的右鍵彈出菜單中選擇addinput選項來添加一個輸入端[19]。4.8.2不同通道波形顏色的分配從本小節(jié)的題目分析,波形顏色屬于前面板波形指示器的屬性之一。要想實現(xiàn)屬性的設(shè)置,首先我們要創(chuàng)建一個相關(guān)對象的屬性節(jié)點。這里有一點需要注意,就是創(chuàng)建屬性節(jié)點只能從前面板中創(chuàng)建,而相關(guān)對象的屬性節(jié)點的圖標(biāo)只會在框圖程序中顯示。所以右鍵單擊前面板上的波形圖指示器在彈出的快捷菜單中選擇create?propertynode。然后回到框圖程序中,我們可以看到它的缺省屬性為visible,直接單擊屬性節(jié)點上的白色區(qū)域,彈出的菜單中包含了有關(guān)波形圖的所有屬性,屬性被選擇為plotcolor。在缺省狀態(tài)下,我們只能從屬性節(jié)點中讀取屬性,而且在屬性節(jié)點圖標(biāo)上右側(cè)的小方向箭頭是指向右的,這表示你正在讀取屬性值。為了實現(xiàn)設(shè)置屬性信息的功能,右鍵單擊節(jié)點圖標(biāo),然后從快捷菜單中選擇ChangetoWrite將屬性節(jié)點的屬性改為設(shè)置屬性。圖4.36不同通道波形顏色的分配節(jié)點會按照從上到下的順序執(zhí)行每一個連線端。如果在一個連線端產(chǎn)生了錯誤,則節(jié)點就會在這個連線端停止執(zhí)行、返回一個錯誤并且也不會執(zhí)行其它的連線端。你可以右鍵單擊節(jié)點然后從快捷菜單中選擇ErrorsInsideNode這一選項來忽略錯誤然后繼續(xù)執(zhí)行其它連線端。錯誤輸出簇會報告造成錯誤的屬性。我們用select函數(shù)實現(xiàn)不同通道波形顏色的選擇,如圖4.36所示:從function模板comparison子模板中選擇select函數(shù),將前面板創(chuàng)建的通道選擇布爾控件連接到函數(shù)的選擇端子(s)上,將一個紅色的colorboxconstant連接到函數(shù)的真(t)輸入端上,將一個黃色的colorboxconstant連接到函數(shù)的假(f)輸入端上。將函數(shù)的輸出端連接到新創(chuàng)建的波形圖屬性節(jié)點上以實現(xiàn)對不同通道波形顏色的設(shè)置。最后強(qiáng)調(diào)一點,我們可以從圖中看到,在select函數(shù)的輸出端還有一條連接到while循環(huán)左邊框上的通道,這是為什么呢?其實不連接這條線,不同通道波形顏色分配的功能也能夠?qū)崿F(xiàn)。但是,這樣做的后果可能導(dǎo)致未知的錯誤。所以,為了保險起見,這條指明了數(shù)據(jù)流向的線還是非連不可的。4.8.3初始化波形圖的屬性在繪制圖形前,我們首先要復(fù)位鼠標(biāo)的位置和波形圖的坐標(biāo)范圍。然后再讀取鼠標(biāo)的位置作為while循環(huán)左邊框上移位寄存器的初值用以保證事件的正確順序。如圖4.37所示:圖4.37初始化波形圖的屬性同樣,我們要創(chuàng)建波形圖的屬性節(jié)點,這里我們要用到的屬性如下:ActiveCursor屬性:通過這個屬性我們可以獲取和設(shè)置有效的鼠標(biāo)并且設(shè)置鼠標(biāo)的屬性和行為方式。例如,你能夠用SelectedCursor屬性指出當(dāng)前圖形或圖表中你所選擇的鼠標(biāo),然后用ActiveCursor屬性將鼠標(biāo)設(shè)置到你想要通過用鼠標(biāo)屬性和它的行為方式來修正的鼠標(biāo)上。ActiveCursor屬性并不會返回用戶選擇的鼠標(biāo)。用SelectedCursor屬性來獲取用戶選擇的鼠標(biāo)。Range屬性:波形圖的坐標(biāo)范圍被指定為一個包含最小值、最大值、增量、最小增量和起始位置的5個元素的簇。CursorPosition屬性:是用來設(shè)置或讀取X-Y坐標(biāo)中鼠標(biāo)的位置。從圖中可以看到,我將波形圖的X坐標(biāo)范圍設(shè)為從0到1023,增量為1,最小增量為0.1,起始位置為0。將波形圖的Y坐標(biāo)的范圍設(shè)為從0到5,增量為1,最小增量為0.1,起始位置為0。同時我還將鼠標(biāo)的初始位置定位在坐標(biāo)原點。以上三個屬性都是通過使用bundle函數(shù)將各個元素捆綁成簇然后寫入波形圖的屬性節(jié)點中。在對波形圖的屬性設(shè)置完畢后,我們還要在同一個屬性節(jié)點上增加一個CursorPosition屬性,此時是讀取剛才所設(shè)置的鼠標(biāo)位置值,然后將它作為用來記憶鼠標(biāo)位置值的移位寄存器的初始值。4.8.4判斷波形圖中的鼠標(biāo)位置是否移動在while循環(huán)中再創(chuàng)建一個波形圖的屬性節(jié)點并將此節(jié)點的屬性設(shè)置為ActiveCursor屬性,然后將常量0寫入這個屬性中用來讀取當(dāng)前鼠標(biāo)的位置,用一個NotEqual?函數(shù)與記憶鼠標(biāo)位置值的移位寄存器初始值進(jìn)行比較。如果函數(shù)返回的值為真,則表明鼠標(biāo)的位置不在起始點,而是被移動了。所以我們要創(chuàng)建一個新的case結(jié)構(gòu)用來完成繪制新點的操作,同時將NotEqual?函數(shù)的輸出端連接到case結(jié)構(gòu)的條件端子上。如圖4.38所示:圖4.38判斷波形圖中的鼠標(biāo)位置是否移動當(dāng)條件端子的條件為真時,我們要將當(dāng)前的坐標(biāo)位置值和用來記憶上一次鼠標(biāo)坐標(biāo)位置的移位寄存器的值作為繪制新點子VI的輸入端,通過這個VI完成繪制方向的判斷以及兩點之間的插值運算從而可以在波形圖上看到連續(xù)的曲線。這個VI還有一個原始波形簇輸入端,是作為case結(jié)構(gòu)左邊框上的輸入通道;一個更新后的最終波形簇輸出端,是被作為case結(jié)構(gòu)右邊框上的輸出通道;一個用來判斷是否更新波形圖的布爾值輸出端,同時也被作為case結(jié)構(gòu)右邊框上的輸出通道。只有是第一次while循環(huán)或者畫新點子VI的更新標(biāo)志輸出端為真時,才將更新后的波形圖顯示在前面板上的波形圖指示器中。條件端子的條件為假時,則表明鼠標(biāo)的位置沒有被改變。我們只需將原始波形簇直接穿過case結(jié)構(gòu),同時將一個布爾值為假的布爾常量作為輸出通道連接到假case的右邊框上,用來作為不進(jìn)行波形更新的標(biāo)志。4.8.5記憶鼠標(biāo)的前一次位置值用select函數(shù),將剛才介紹過的更新標(biāo)志值作為此函數(shù)的s輸入端,如果函數(shù)判斷輸出端的布爾值為真,也就是說發(fā)生了波形更新,則輸出當(dāng)前鼠標(biāo)的位置值;如果函數(shù)判斷輸出端的布爾值為假,也就是說沒有發(fā)生波形更新,則輸出上一次的鼠標(biāo)位置值,也就是被儲存在while循環(huán)右邊框上移位寄存器中的鼠標(biāo)位置值。最后我們將select函數(shù)輸出端的值連接到while循環(huán)右邊框上的移位寄存器中用來記憶鼠標(biāo)的當(dāng)前位置值并將值傳遞給左移位寄存器中以實現(xiàn)移位寄存器間值的傳遞。4.8.6波形的顯示和輸出前面已經(jīng)提過通過更新標(biāo)志位和i值作為是否有更新的波形輸出的判斷條件。而這個條件是要連接到一個case結(jié)構(gòu)的條件端子上,于是我們創(chuàng)建一個case結(jié)構(gòu),在條件為真時,也就是在真case中創(chuàng)建一個用來顯示更新后的波形的簇。然后將繪制新點子VI波形簇的輸出通道直接連到這個更新后的波形顯示簇上。對于這個更新后的波形簇中的元素順序以及它的數(shù)據(jù)類型,一定要和連入的簇中的的元素順序以及它的數(shù)據(jù)類型保持一致。否則,會產(chǎn)生不匹配的壞線。對于波形的輸出,將繪制新點子VI的波形簇輸出端的直接連到while循環(huán)的右移位寄存器上用來儲存波形簇的值,以實現(xiàn)新舊波形簇值的傳遞和記憶。同時,將這個簇在while循環(huán)外的輸出通道上連接一個unbundle函數(shù),分離出它的波形數(shù)組元素并連接到一個一維數(shù)組指示器上以實現(xiàn)波形數(shù)據(jù)的輸出。4.9繪制新點子VI前面板的設(shè)計如圖4.39所示:圖4.39繪制新點子VI的前面板4.10繪制新點子VI框圖程序的設(shè)計這個VI的設(shè)計主要包括以下幾部分,波形圖中數(shù)據(jù)是否為零的判斷、繪制點方向的判斷、起始點位置的計算、添加點數(shù)的計算以及新數(shù)據(jù)開始位置的計算,還有一個就是對于起始點位置超出數(shù)組大小后的處理。如圖4.40所示:圖4.40繪制新點子VI的框圖程序4.10.1判斷數(shù)組中是否存在波形數(shù)據(jù)如果圖形簇中的元素數(shù)組,它的大小為零也就是沒有數(shù)據(jù),這個判斷是通過用ArraySize函數(shù)完成的然后再使用EqualTo0?函數(shù)將它的輸出端連接到case結(jié)構(gòu)的條件選擇端用來實現(xiàn)數(shù)組是否存在波形數(shù)據(jù)的判斷。如圖4.41所示:圖4.41判斷數(shù)組中是否存在波形數(shù)據(jù)的設(shè)計4.10.2數(shù)組中不存在波形數(shù)據(jù)的情況當(dāng)case結(jié)構(gòu)的條件選擇端的條件為真時,我們所要做的就是將原有的圖形簇中的元素,用,的值進(jìn)行替換。而為了保證操作的準(zhǔn)確性,我們要對數(shù)組中是否有數(shù)據(jù)再一次進(jìn)行判斷,所以我們在case結(jié)構(gòu)中的真case中再創(chuàng)建一個case結(jié)構(gòu),同樣將EqualTo0?函數(shù)的輸出端作為判斷的條件連到新創(chuàng)建的case結(jié)構(gòu)的條件選擇端上。完成替換所要使用的是BundleByName函數(shù),但是在對進(jìn)行替換前,要先使用一個BuildArray函數(shù)(從function模板中array子模板中選擇即可)將Yf標(biāo)量值轉(zhuǎn)換成為數(shù)組,然后再進(jìn)行簇中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論