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

下載本文檔

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

文檔簡(jiǎn)介

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論