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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論