精講LabVIEW設(shè)計(jì)模式培訓(xùn)課件_第1頁
精講LabVIEW設(shè)計(jì)模式培訓(xùn)課件_第2頁
精講LabVIEW設(shè)計(jì)模式培訓(xùn)課件_第3頁
精講LabVIEW設(shè)計(jì)模式培訓(xùn)課件_第4頁
精講LabVIEW設(shè)計(jì)模式培訓(xùn)課件_第5頁
已閱讀5頁,還剩131頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

精講LabVIEW設(shè)計(jì)模式天津大學(xué)精儀學(xué)院陳世利

LabVIEW設(shè)計(jì)模式

LabVIEW定時(shí)結(jié)構(gòu)優(yōu)化LabVIEW程序內(nèi)存管理調(diào)用動態(tài)鏈接庫LabVIEW與多線程什么是設(shè)計(jì)模式?一種LabVIEW程序模板與架構(gòu)

軟件實(shí)踐中通用的程序架構(gòu),其本質(zhì)是對很多十分類似的問題進(jìn)行總結(jié)歸納的基礎(chǔ)上提煉出的一些具有代表性的軟件開發(fā)規(guī)范具有靈活的配置功能被廣泛使用使用設(shè)計(jì)模式的益處簡化整個(gè)開發(fā)過程更容易理解程序代碼代碼可重用可靠性被使用多年,被證明其“可用并可靠”大量技術(shù)資源與例程使用設(shè)計(jì)模式注意事項(xiàng)1、不是一成不變的定律,既要知道有哪些設(shè)計(jì)模式,還要知道每種模式解決實(shí)際應(yīng)用中的哪些問題,是如何解決的,效果如何?2、文本式編程語言中廣泛使用的設(shè)計(jì)模式在圖形化數(shù)據(jù)流編程中的應(yīng)用問題。注意!有些時(shí)候你沒有必要選用最復(fù)雜的設(shè)計(jì)模式不要忘記最常見的設(shè)計(jì)模式——數(shù)據(jù)流!通用型:狀態(tài)機(jī)模式、

消息隊(duì)列模式、

用戶界面事件模式專用型:主從線程模式、

生產(chǎn)/消費(fèi)模式、

后臺服務(wù)模式、 應(yīng)用程序啟動模式、

代理模式LabVIEW設(shè)計(jì)模式基本工具循環(huán)結(jié)構(gòu)移位寄存器分支結(jié)構(gòu)枚舉型常量事件結(jié)構(gòu)狀態(tài)機(jī)模式“我需要執(zhí)行一系列的事件步驟,但是步驟順序可通過編程決定的。”自動販賣機(jī)模型InitializeWaitChangeQuarterDimeNickelExitVendNoinputQuarterDepositedTotal<50Total>=50ChangeRequestedDimeDepositedNickelDepositedTotal<50Total<50Total>=50Total>=50Total>50Total=50基本三三要素素:狀態(tài)、、事件件、動動作背景動態(tài)結(jié)結(jié)構(gòu)::允許許不同同的狀狀態(tài),,按通通過編編程決決定的的順序序進(jìn)行執(zhí)行行靜態(tài)順順序結(jié)結(jié)構(gòu)狀態(tài)機(jī)機(jī)結(jié)構(gòu)構(gòu)對于一一個(gè)最最簡單單的狀狀態(tài)機(jī)機(jī)結(jié)構(gòu)構(gòu)而言言,它它是可可以用用順序序結(jié)構(gòu)構(gòu)代替替的;;而對對于相相對復(fù)復(fù)雜的的狀態(tài)態(tài)機(jī)結(jié)結(jié)構(gòu)而而言,,卻可可以作作為測測試流流程的的組織織者和和管理理者。。在LabVIEW下實(shí)現(xiàn)現(xiàn)狀態(tài)態(tài)機(jī)結(jié)結(jié)構(gòu)While循環(huán)+Case結(jié)構(gòu)每一Case即為一一個(gè)狀狀態(tài)當(dāng)前狀狀態(tài)中中需有有決定定下一一狀態(tài)態(tài)的判判定代代碼使用枚舉常常量通過移移位寄寄存器器傳遞遞至下下一狀狀態(tài)切換代代碼工作流流程初始狀狀態(tài)FIRSTSTATE下一狀狀態(tài)執(zhí)行步步驟移位寄寄存器器用于于傳遞遞狀態(tài)態(tài)Case結(jié)構(gòu)對對每一一狀態(tài)態(tài)都配配備一一個(gè)分分支切換代代碼根據(jù)執(zhí)行步步驟中的結(jié)結(jié)果來來決定定下一一狀態(tài)態(tài)枚舉常常量一個(gè)自自定義義的枚枚舉類類型對對應(yīng)一一個(gè)狀狀態(tài)機(jī)機(jī)中的的狀態(tài)態(tài)集合合枚舉常常量枚舉類類型是是一種種允許許程序序員自自定義義元素素的數(shù)數(shù)據(jù)類類型,,它可可以顯顯示數(shù)數(shù)值對對應(yīng)的的具體體含義義,幫幫助程程序員員理解解程序序中使使用的的變量量值。。枚舉常常量舉舉例控件選選板““Modern”1、枚舉舉控件件、指指示、、常量量2、默認(rèn)認(rèn)U163、修改改EditItems4、隱式式與顯顯式類類型轉(zhuǎn)轉(zhuǎn)換DEMO1順序型型狀態(tài)態(tài)機(jī)模模式數(shù)據(jù)傳傳遞方方式DEMO2改進(jìn)的的順序序型狀狀態(tài)機(jī)機(jī)模式式1、去掉掉i2、添加加一個(gè)個(gè)移位位寄存存器DEMO3測試流流程型型狀態(tài)態(tài)機(jī)1、解決決順序序型狀狀態(tài)機(jī)機(jī)不便便閱讀讀和修修改的的問題題,采采用枚枚舉型型常量量。2、采用用自定定義型型控件件,方方便修修改。。over消息隊(duì)隊(duì)列模模式“我需需要執(zhí)執(zhí)行一一系列列的事事件步步驟,,但是是步驟驟順序序可通通過編編程決決定的的。””步驟是是由用用戶界界面事事件決決定的的,如如某個(gè)個(gè)應(yīng)用用程序序共要要處理理4個(gè)狀態(tài)態(tài),分分別是是A,B,C和D,前面面板有有3個(gè)按鈕鈕分別別控制制3種運(yùn)行行時(shí)的的狀態(tài)態(tài)序列列ABCD、DCAB和BDCA。引入消消息隊(duì)隊(duì)列模模式,,通過過建立立隊(duì)列列緩沖沖區(qū)來來解決決這個(gè)個(gè)問題題,這這種模模式也也稱為為“隊(duì)隊(duì)列型型狀態(tài)態(tài)機(jī)模模式”。消息處處理過過程建立消消息隊(duì)隊(duì)列加入消消息探測消消息EXIT?刪除消消息接收消消息執(zhí)行代代碼銷毀消消息隊(duì)隊(duì)列消息源源YesNo隊(duì)列建建立方方式隊(duì)列函函數(shù)和和數(shù)組組隊(duì)列函函數(shù)最常用用的4個(gè)函數(shù)數(shù)數(shù)組1、數(shù)組組函數(shù)數(shù)2、配合合移位位寄存存器3、無需需手動動銷毀毀隊(duì)列列空間間數(shù)組方方式DEMO隊(duì)列函函數(shù)方方式DEMO隊(duì)列函函數(shù)與與數(shù)組組的不不同1、消息息傳遞遞方式式不同同移移位寄寄存器器&FIFO2、釋放放消息息隊(duì)列列的方方式不不同用戶界界面事事件模模式“我需需要輪輪詢用用戶的的操作作,但但是這這樣會會降低低我程程序的的運(yùn)行行速度度,并并且有有時(shí)我我還檢檢測不不到……”LabVIEW中基于于事件件驅(qū)動動的編編程LabVIEW事件示示例按下鼠鼠標(biāo)鍵盤按按鍵前面板板的用用戶交交互LabVIEW事件結(jié)結(jié)構(gòu)什么是是事件件結(jié)構(gòu)構(gòu)?帶有多多個(gè)子子框圖圖的結(jié)結(jié)構(gòu)節(jié)節(jié)點(diǎn),,就像條件結(jié)結(jié)構(gòu)事件結(jié)結(jié)構(gòu)是是如何何工作作的?當(dāng)面板板上事事件發(fā)發(fā)生時(shí)時(shí)才被被喚醒醒自動執(zhí)執(zhí)行相相應(yīng)事事件框框圖內(nèi)內(nèi)的事事件代代碼當(dāng)處理理完成成相應(yīng)應(yīng)事件件后便便結(jié)束束,并并不一一直循循環(huán)等等待為什么么要使使用事事件結(jié)構(gòu)?用更簡簡單的的事件件處理理替代代原來來的查查詢循循環(huán)最小化化CPU的使用用不會遺遺漏用用戶界界面交交互事事件可檢測測更多多的交交互事事件編程生生成您您自己己的事事件用戶界界面事事件的的兩種種類型型通知事事件和過濾事事件事件源源:用用戶界界面事事件用用戶戶自定定義事事件5個(gè)函數(shù)數(shù)用戶自自定義義事件件DEMO事件注注冊靜態(tài)事事件注注冊::只有有用戶戶界面面事件件選擇事事件源源(程程序、、VI或控件件)、、特定定事件件、編編輯分分支處處理事事件數(shù)數(shù)據(jù)。。Vi運(yùn)行時(shí)時(shí)自動動注冊冊。動態(tài)事事件注注冊::何時(shí)時(shí)產(chǎn)生生何種種事件件靜態(tài)事事件注注冊demo動態(tài)事事件注注冊4個(gè)步驟驟1、獲取取要處處理事事件對對象的的VI服務(wù)器引引用;2、將VI服務(wù)器引引用連接接至“注注冊事件件”函數(shù)數(shù);3、將事件件結(jié)構(gòu)放放在While循環(huán)中,,等待處處理對象象事件直直到終止止條件出出現(xiàn);4、通過取取消注冊冊時(shí)間函函數(shù)停止止事件發(fā)發(fā)生。動態(tài)事件件注冊demo最值器用戶界面面事件demo一個(gè)動態(tài)態(tài)+5個(gè)靜態(tài)狀態(tài)機(jī)——用戶界面面事件混混合demo初始化時(shí)時(shí)不再需需要用戶戶自定義義事件其他模式式“我希望望同一時(shí)時(shí)刻能夠夠處理多多個(gè)消息息事件,,而不是是下一個(gè)個(gè)消息代代碼必須須等待上上一次響響應(yīng)完成成后才能能執(zhí)行”“我不希希望消息息排隊(duì),,等待很很煩的,,有時(shí)采采集數(shù)據(jù)據(jù)和記錄錄數(shù)據(jù)應(yīng)應(yīng)該同時(shí)時(shí)進(jìn)行的的”。主從線程程模式通常應(yīng)用用于具有有多個(gè)同同時(shí)發(fā)生生的并且且擁有不不同運(yùn)行行速率的的線程的的程序中中。比如如采集電電壓同時(shí)時(shí)寫入磁磁盤,采采集速率率1KHz,記錄則則每5秒一次。。1、數(shù)據(jù)通通信采用用全局變變量、局局域變量量或共享享變量;;2、Stop為Switch模式3、有時(shí)會會用到事事件發(fā)生生模塊Occurrence生產(chǎn)者/消費(fèi)者“我需要要可以同同時(shí)間執(zhí)執(zhí)行的兩兩個(gè)過程程,并且且需保證證它們不不會互相相影響執(zhí)執(zhí)行速度度。”生產(chǎn)者/消費(fèi)者全局變量量、局域域變量或或共享變變量的每每次復(fù)制制都是原原始數(shù)據(jù)據(jù)的一個(gè)個(gè)副本,,占據(jù)了了大量的的空間。。實(shí)際上上只需要要使用一一部分緩緩沖區(qū)作作為數(shù)據(jù)據(jù)存儲的的中間部部分,這這需要借借助隊(duì)列列技術(shù)。。存儲單元元數(shù)據(jù)流入入數(shù)據(jù)流出出生產(chǎn)者/消費(fèi)者具具體做法法最簡單模模式在LabVIEW下實(shí)現(xiàn)生生產(chǎn)者/消費(fèi)者無數(shù)據(jù)相相關(guān)的多多個(gè)循環(huán)環(huán)主/從關(guān)系在循環(huán)間間實(shí)現(xiàn)通通訊與同同步工作流程程主循環(huán)負(fù)負(fù)責(zé)通知知各個(gè)從從循環(huán)是是否執(zhí)行行允許循環(huán)環(huán)間異步步執(zhí)行數(shù)據(jù)的非非相關(guān)性性實(shí)現(xiàn)多多線程程序過程程分解從循環(huán)1從循環(huán)2主循環(huán)實(shí)現(xiàn)循環(huán)環(huán)間的數(shù)數(shù)據(jù)通訊訊變量通知器隊(duì)列信號量集合隊(duì)列在隊(duì)列中中添加元元素從隊(duì)列中中釋放元元素Referencetoexistingqueueinmemory選擇隊(duì)列列中元素素的數(shù)據(jù)據(jù)類型出列操作作需要等等待數(shù)據(jù)據(jù)進(jìn)入或或者超時(shí)時(shí)情況生產(chǎn)者/消費(fèi)者循循環(huán)后臺服務(wù)務(wù)模式問:“我我需要程程序在后后臺運(yùn)行行,不要要前面板板,不要要交互”答:“采采用VI屬性和方方法接口口,足以以使你控控制后臺臺運(yùn)行的的VI”例子:一一個(gè)網(wǎng)絡(luò)絡(luò)服務(wù)監(jiān)監(jiān)聽程序序,程序序只需要要接收與與客戶端端Sockets的連接,,實(shí)現(xiàn)三三次握手手,連接接完成后后將引用用交給前前端應(yīng)用用程序處處理,同同時(shí)繼續(xù)續(xù)監(jiān)聽。。后臺服務(wù)務(wù)模式后臺服務(wù)務(wù)模式應(yīng)用程序序啟動模模式“我想設(shè)設(shè)計(jì)一個(gè)個(gè)啟動畫畫面,同同時(shí)顯示示應(yīng)用程程序加載載的進(jìn)度度,加載載完畢后后退出啟啟動畫面面,運(yùn)行行主程序序”應(yīng)用程序序啟動模模式1、SubVI目錄2、啟動應(yīng)應(yīng)用程序序.vi3、主程序序“網(wǎng)絡(luò)絡(luò)實(shí)驗(yàn)系系統(tǒng).vi””代理模式式“我希望望頂層VI(主VI)需要某某個(gè)子VI時(shí),才將將其載入入內(nèi)存””“可以在在應(yīng)用程程序中引引入遲載載入技術(shù)術(shù)”代理模式式總結(jié)設(shè)計(jì)模式式簡化LabVIEW開發(fā)過程程被廣泛使使用及證證明其可可用常用的LabVIEW設(shè)計(jì)模式式數(shù)據(jù)流事件驅(qū)動動狀態(tài)機(jī)結(jié)結(jié)構(gòu)生產(chǎn)者/消費(fèi)者而功能型型全局變變量(functionalglobalvariable)是是為了避避免競爭爭機(jī)制而而實(shí)現(xiàn)的的一種非非重入型型子vi定時(shí)結(jié)構(gòu)構(gòu)精確的定定時(shí)while循環(huán)精確的定定時(shí)順序序結(jié)構(gòu)多個(gè)時(shí)鐘鐘頻率的的定時(shí)反饋,動動態(tài)定定時(shí)特性性多優(yōu)先級級設(shè)置examples\general\timedloop.llb定時(shí)順序序結(jié)構(gòu)類似添加加內(nèi)置定定時(shí)功能能的順序序結(jié)構(gòu)定時(shí)循環(huán)環(huán)1、優(yōu)先級級:相對對同一個(gè)個(gè)程序框框圖中的的多個(gè)定定時(shí)循環(huán)環(huán)而言,,優(yōu)先級級數(shù)大的的循環(huán)優(yōu)優(yōu)先執(zhí)行行。每一一個(gè)定時(shí)時(shí)循環(huán)都都有自己己的線程程,這里里的優(yōu)先先級即線線程優(yōu)先先級。2、循環(huán)名名稱,對對于可重重入子VI中包含定定時(shí)循環(huán)環(huán),且該該子VI的多個(gè)實(shí)實(shí)例出現(xiàn)現(xiàn)在同一一個(gè)程序序框圖中中,可以以將循環(huán)環(huán)名稱作作為子VI的輸入端端子。3、Deadline:用于指指定完成成一個(gè)循循環(huán)的時(shí)時(shí)間限定定,如未未在指定定的時(shí)間間內(nèi)完成成,則左左端數(shù)據(jù)據(jù)節(jié)點(diǎn)FinishedLate?[i-1]返回真。。默認(rèn)值值-1表示Deadline由Period決定。4、如何處處理某次次循環(huán)使使用的時(shí)時(shí)間大于于設(shè)定的的周期??是否丟丟棄丟失失的了的的循環(huán)??是否保保持原始始相位??定時(shí)循環(huán)環(huán)定時(shí)循環(huán)環(huán)演示:定定時(shí)循環(huán)環(huán)演示:定定時(shí)循環(huán)環(huán)可具體手手動設(shè)置置定時(shí)循循環(huán)運(yùn)行行的核設(shè)置定時(shí)循環(huán)運(yùn)行的指定核NEW!可具體手手動設(shè)置置定時(shí)循循環(huán)運(yùn)行行的核NEW!定時(shí)順序序結(jié)構(gòu)TimedSequence含幀的定定式循環(huán)環(huán)TimedLoopwithFrames為什么要要優(yōu)化LabVIEW程序內(nèi)存存管理LabVIEW的自動管管理內(nèi)存存特性方便用戶戶開發(fā),,滿足一一般應(yīng)用用需求LabVIEW應(yīng)用程序序趨向大大型化,,復(fù)雜化化項(xiàng)目規(guī)模模大,需需求復(fù)雜雜數(shù)據(jù)處理理量大,,性能要要求高好的編程程風(fēng)格幫幫助LabVIEW優(yōu)化內(nèi)存存管理可以顯著著提高程程序運(yùn)行行效率需要了解解LabVIEW的內(nèi)存分分配機(jī)制制監(jiān)測VI內(nèi)存占用和運(yùn)運(yùn)行時(shí)間的工工具幫助定位和分分析程序中的的瓶頸部分工具性能分析性能和內(nèi)存顯示VI內(nèi)存分配情況況的工具幫助分析程序序中各個(gè)數(shù)據(jù)據(jù)變量的內(nèi)存存拷貝情況目標(biāo):消除黑黑點(diǎn)工具性能分析顯示緩存區(qū)分分配了解程序內(nèi)存存的使用演示:監(jiān)測內(nèi)內(nèi)存使用優(yōu)化LabVIEW程序內(nèi)存管理理適時(shí)選擇動態(tài)態(tài)調(diào)用子VI避免強(qiáng)制類型型轉(zhuǎn)換把復(fù)雜VI分解成多個(gè)子子VI采用多面板程程序沒必要時(shí)不要要設(shè)置VI的重入特性合理分配數(shù)組組內(nèi)存靈活使用LabVIEW自帶的VI使用元素同址址操作結(jié)構(gòu)InPlaceElementStructure在程序中動態(tài)態(tài)調(diào)用子VI321——減少程序占用用內(nèi)存以及載載入時(shí)間打開VI引用通過引用節(jié)點(diǎn)點(diǎn)調(diào)用關(guān)閉引用2配置VI加載1數(shù)據(jù)類型轉(zhuǎn)換換強(qiáng)制點(diǎn)表明連連接了兩種不不同的數(shù)據(jù)類類型LabVIEW中類型強(qiáng)制轉(zhuǎn)轉(zhuǎn)換需要數(shù)據(jù)據(jù)備份涉及大數(shù)組的的類型強(qiáng)制轉(zhuǎn)轉(zhuǎn)換會占用大大量內(nèi)存推薦的類型轉(zhuǎn)轉(zhuǎn)換方式更好的解決方方式是在隨機(jī)機(jī)數(shù)創(chuàng)建時(shí)進(jìn)進(jìn)行轉(zhuǎn)換避免轉(zhuǎn)換大塊塊數(shù)據(jù)緩存(14.3KB)(22.7KB)把復(fù)雜VI分解成多個(gè)子子VI子vi會增加額外的的前面板和框框圖的空間,,但并不增添添額外的代碼碼和數(shù)據(jù)空間間。由于程序序運(yùn)行時(shí)只有有代碼和數(shù)據(jù)據(jù)被調(diào)入內(nèi)存存,子vi不會占用額外外的內(nèi)存。好處是子vi運(yùn)行結(jié)束后,,LabVIEW可以及時(shí)收回回子VI的數(shù)據(jù)空間,,從而改善內(nèi)內(nèi)存的使用效效率。采用多面板程程序通過多面板程程序?qū)崿F(xiàn)只有有在必要時(shí)才才顯示某些窗窗口,因?yàn)榻缃缑骘@示是最最費(fèi)內(nèi)存的,,因此這樣可可以極大降低低內(nèi)存的消耗耗。沒必要時(shí)不要要設(shè)置VI的重入特性重入型vi每次運(yùn)行時(shí)都都會對自己使使用的數(shù)據(jù)生生成一個(gè)副本本,這增加了了內(nèi)存開銷合理分配數(shù)組組內(nèi)存過多進(jìn)行內(nèi)存存重新分配占占用很大開銷銷慎用可能導(dǎo)致致內(nèi)存重新分分配的相關(guān)函函數(shù)創(chuàng)建數(shù)組連接字符串演示:編程方方法影響程序序性能總在開辟新內(nèi)內(nèi)存,必定時(shí)時(shí)間長演示:編程方方法影響程序序性能循環(huán)次數(shù)并非非事先指定,,因此每次循循環(huán)也會開辟辟新的內(nèi)存,,但節(jié)省了BuildArray函數(shù)的時(shí)間。。演示:編程方方法影響程序序性能循環(huán)無需開辟辟新的內(nèi)存,,時(shí)間會明顯顯減少。演示:編程方方法影響程序序性能靈活使用LabVIEW自帶的VI基本線性代數(shù)數(shù)子程序VI(BasicLinearAlgebraSubroutines)合理歸并基本本線性代數(shù)操操作減少不必要的的內(nèi)存復(fù)制開開銷使程序更加簡簡潔數(shù)學(xué)線性代數(shù)BLASNEW!元素同址操作作結(jié)構(gòu)更新數(shù)組或簇簇中的元素時(shí)時(shí),避免元素素?cái)?shù)據(jù)備份應(yīng)用控制內(nèi)存控制NEW!元素同址操作作結(jié)構(gòu)的優(yōu)點(diǎn)點(diǎn)方便實(shí)現(xiàn)多種種情況的緩存存重用,消除除元素復(fù)制開開銷數(shù)組索引和替替換簇的綁定和解解除綁定波形的綁定和和解除綁定變體的緩存重重用任意元素的緩緩存重用舉例:數(shù)組索索引和替換將數(shù)組第2個(gè)元素增大10倍方法一:方法二:元素?cái)?shù)據(jù)備份份舉例:簇的綁綁定和解除綁綁定個(gè)人納稅信息息的更新演示:嵌套的的元素同址操操作結(jié)構(gòu)LabVIEW與多線程程序、進(jìn)程與與線程程序是計(jì)算機(jī)機(jī)指令的靜態(tài)態(tài)集合、進(jìn)程程就是正在運(yùn)運(yùn)行的程序,,是一些所有有權(quán)的集合,,包括內(nèi)存、、CPU運(yùn)行時(shí)間等一一系列資源,,為線程的運(yùn)運(yùn)行提供一個(gè)個(gè)環(huán)境。線程程才是程序的的最小執(zhí)行單單位,是程序序的一條執(zhí)行行路徑,是操操作系統(tǒng)分配配CPU時(shí)間的基本實(shí)實(shí)體。一個(gè)程程序的進(jìn)程以以一個(gè)主線程程開始,如果果進(jìn)程的執(zhí)行行可以劃分為為多個(gè)執(zhí)行路路徑,則可以以創(chuàng)建多個(gè)線線程。例:三線程程程序,用戶界界面線程、數(shù)數(shù)據(jù)采集線程程、儀器控制制線程。這些些線程共享進(jìn)進(jìn)程內(nèi)的公共共資源。LabVIEW與多線程多處理器環(huán)境境下的并行編編程1、線程調(diào)度2、線程優(yōu)先級級3、線程通信與與同步進(jìn)程間:環(huán)境境變量、命名名管道、共享享內(nèi)存等線程間:全局局變量、全局局?jǐn)?shù)據(jù)、文件件句柄或通信信參數(shù)等進(jìn)程程內(nèi)數(shù)據(jù)結(jié)構(gòu)構(gòu)來完成。同步:數(shù)據(jù)同同步、設(shè)備同同步、任務(wù)同同步。LabVIEW對多線程程序序設(shè)計(jì)的支持持不支持線程的的直接創(chuàng)建,,從執(zhí)行系統(tǒng)和數(shù)據(jù)流控制兩個(gè)層次提供供對多線程程程序設(shè)計(jì)的支支持發(fā)布時(shí)需要運(yùn)運(yùn)行引擎。執(zhí)行子系統(tǒng)線線程數(shù)量配置置\vi.lib\utilities\sysinfo.llb中的threadconfig.vi一共有25個(gè)具有優(yōu)先級級的執(zhí)行子系系統(tǒng)。執(zhí)行子系統(tǒng)線線程數(shù)量配置置線程是一把雙雙刃劍!線程優(yōu)先級的的設(shè)置1、有時(shí)你只要要一個(gè)不同時(shí)時(shí)間的等待。。2、避免優(yōu)先級級倒置或饑餓餓的發(fā)生。LabVIEW多線程程序設(shè)設(shè)計(jì)LabVIEW執(zhí)行系統(tǒng)會自自動管理線程程,但這并不不意味著不需需要用戶的參參與。在LabVIEW程序中,從數(shù)數(shù)據(jù)流的起始始點(diǎn)到結(jié)束點(diǎn)點(diǎn)的整個(gè)流程程稱為執(zhí)行路徑。并行的執(zhí)行行路徑是劃分分線程任務(wù)的的依據(jù)。如要要充分利用線線程的優(yōu)勢,,應(yīng)盡量提高高程序的并行行度,避免使用順序序結(jié)構(gòu)來實(shí)現(xiàn)程序架架構(gòu)。超線程求質(zhì)數(shù)數(shù)demo可重入技術(shù)demo線程通信與同同步“多個(gè)循環(huán)要要訪問同一個(gè)個(gè)設(shè)備,但該該設(shè)備任何時(shí)時(shí)候只能同時(shí)時(shí)響應(yīng)一個(gè)命命令”線程通信與同同步1、局部變量創(chuàng)建方法、寫寫競爭、布爾爾端子注意機(jī)機(jī)械動作設(shè)置置,破壞數(shù)據(jù)據(jù)流編程模式式2、全局變量創(chuàng)建方法、減減少vi之間數(shù)據(jù)傳遞遞的連線3、共享變量必須有項(xiàng)目,,單進(jìn)程或網(wǎng)網(wǎng)絡(luò)發(fā)布4、功能全局變變量共享變量1、要有項(xiàng)目2、使用的文件件要位于項(xiàng)目目中3、必須部署才才能使用4、對于客戶戶端,需要要指定綁定定數(shù)據(jù)源5、可以拖到到前面板,,小箭頭變變成綠色表表示連接成成功(紅色色失?。?、右鍵面板板控件,屬屬性/數(shù)據(jù)綁定可可以將控件件于某個(gè)共共享變量綁綁定。7、共享變量量引擎SharedVariabledEngine(NI-PSP)SVE功能全局變變量FunctionalGlobalVariables將一個(gè)只執(zhí)執(zhí)行一次的的For循環(huán)或While循環(huán)放在一一個(gè)子vi中,并使用用未初始化的的移位寄存器器保存可讀讀寫的數(shù)據(jù)據(jù)。與全局局變量相比比,該方法法的優(yōu)勢在在于可以控控制對移位位寄存器的的訪問。功能全局變變量demo1、Notification通知技術(shù)1〉一段程序框框圖在收到到來自于其它程序框框圖或vi的通知消息息前保持等待狀狀態(tài)。而通知消消息可以是是任何類型型的數(shù)據(jù),,因此可以以實(shí)現(xiàn)不同同框圖不同同vi之間的數(shù)據(jù)據(jù)傳遞。2〉不同于局部部變量和全全局變量,,不需輪詢詢。3〉通知器任何何時(shí)候只能能存放一個(gè)個(gè)消息,新新消息發(fā)出出時(shí),舊消消息會被丟丟棄。消息息接收者的的數(shù)目沒有有限制,新新消息發(fā)出出之前,該該消息一直直存在于通通知器中,,在任何時(shí)時(shí)候都可以以被任何接接收者接收收,接收者者接收到該該消息后并并不刪除通通知器中的的消息。NotificationDEMOinLabVIEW注意觀察User1-3的延時(shí)設(shè)置置與是否忽忽略以前的的消息的設(shè)設(shè)置對波形形的影響QueueinLabVIEWQueue結(jié)構(gòu)是一種種FIFO結(jié)構(gòu),采用用ObtainQueue函數(shù)創(chuàng)建隊(duì)隊(duì)列時(shí)需要要指定size大小。數(shù)數(shù)據(jù)進(jìn)去去后如果沒沒有程序?qū)⑦@些數(shù)據(jù)據(jù)讀出,將將一直保存存在隊(duì)列中中,直到有有程序?qū)⑵淦渥x出并刪刪除。如果果有兩個(gè)應(yīng)應(yīng)用程序都都在等待同同一個(gè)隊(duì)列列中的同一一條數(shù)據(jù),,只有那個(gè)個(gè)動作快的的程序會收收到數(shù)據(jù)。。QueueDEMOinLabVIEW3個(gè)子函數(shù)的的周期不同同SemaphoreinLabVIEW信號量技術(shù)術(shù)用于限制制同時(shí)訪問問一個(gè)被保保護(hù)的共享享資源的任任務(wù)數(shù)目,,信號量就就像一把key。比如兩個(gè)個(gè)獨(dú)立運(yùn)行行的vi需要控制同同一個(gè)機(jī)器器人,而該該機(jī)器人任任何時(shí)候只只能被一個(gè)個(gè)vi控制,此時(shí)時(shí)就可以使使用信號量量技術(shù)。當(dāng)當(dāng)某個(gè)vi正在控制機(jī)機(jī)器人時(shí),,通過鎖定定該信號量量,其他vi只能處于信信號量等待待狀態(tài),只只有該vi釋放信號量量后,增等等待的vi才能獲得信信號量,實(shí)實(shí)現(xiàn)對機(jī)器器人的控制制。SemaphoredemoinLabVIEWRendezvousinLabVIEW集合點(diǎn)技術(shù)術(shù)可以讓若若干并行的的任務(wù)同步步執(zhí)行,只只有所有的的任務(wù)到達(dá)達(dá)后,才開開始同步執(zhí)執(zhí)行。這就就好比一個(gè)個(gè)會議,只只有等到參參會人員到到齊后才開開始。1、修改主函函數(shù)的集合合點(diǎn)數(shù)目為為2、3、4

2、添加集合合名稱,并并在4的時(shí)候運(yùn)行行一個(gè)同名名集合用戶戶,解救??!LabVIEW狀態(tài)圖模塊塊LabVIEWStatechart“簡單的狀狀態(tài)機(jī)結(jié)構(gòu)構(gòu)無法實(shí)現(xiàn)現(xiàn)狀態(tài)并發(fā)、包含與保存功能……”LabVIEW狀態(tài)圖模塊塊狀態(tài)圖——用直觀的方方法來表達(dá)達(dá)基于事件件的系統(tǒng)應(yīng)用領(lǐng)域數(shù)字協(xié)議控制類應(yīng)用用時(shí)序邏輯批處理事件響應(yīng)用戶界面的的實(shí)現(xiàn)系統(tǒng)建模設(shè)計(jì)狀態(tài)和和轉(zhuǎn)移設(shè)計(jì)動作和和警戒代碼碼產(chǎn)生狀態(tài)圖圖子VI嵌入到LabVIEW程序框圖中中LabVIEW狀態(tài)圖開發(fā)發(fā)的步驟動手演示::創(chuàng)建簡單單狀態(tài)圖DEMOLabVIEW狀態(tài)圖添加自定義義模板更多資源議程N(yùn)ationalInstruments公司簡介LabVIEW高級編程技技巧用戶定義的的調(diào)試指示示器巧用LabVIEW控件定時(shí)結(jié)構(gòu)基于事件觸觸發(fā)的編程程優(yōu)化LabVIEW程序內(nèi)存管管理調(diào)用動態(tài)鏈鏈接庫共享庫函數(shù)數(shù)What?Windows中的.dll,UNIX/Linux中的.so,等等Why?降低磁盤空空間和內(nèi)存存占用How?應(yīng)用程序只只在需要的的時(shí)候調(diào)用用庫函數(shù)程序開始執(zhí)執(zhí)行以后,,由運(yùn)行鏈鏈接編輯器器來處理所所有調(diào)用動態(tài)鏈接庫庫(DLL)MicrosoftWindows中的一種軟軟件模塊包含可執(zhí)行行代碼和可可被Windows應(yīng)用程序或或其它DLL調(diào)用的數(shù)據(jù)據(jù)函數(shù)和數(shù)據(jù)據(jù)只有在運(yùn)運(yùn)行狀態(tài)下下,被Windows應(yīng)用程序或或其它DLL調(diào)用時(shí)才被被加載和鏈鏈接一個(gè)DLL包括:一個(gè)特殊函函數(shù)(DllMain)幾個(gè)編程者者自定義來來完成常用用任務(wù)的函函數(shù)DLL特性不能單獨(dú)運(yùn)運(yùn)行的可執(zhí)執(zhí)行文件應(yīng)用程序要要求時(shí),由由操作系統(tǒng)統(tǒng)加載應(yīng)用程序把把DLL代碼作為自自己二進(jìn)制制文件的一一部分來使使用應(yīng)用程序不不需要知道道原始DLL是由什么語語言編寫的的,也不需需要清楚這這些功能是是如何實(shí)現(xiàn)現(xiàn)的。DLL就像一個(gè)有有輸出函數(shù)數(shù)的黑盒子子LabVIEW下調(diào)調(diào)用DLL的方法勿在浮沙筑筑高臺——調(diào)用庫函數(shù)數(shù)節(jié)點(diǎn)劍走中鋒——導(dǎo)入共享庫工具LabVIEW中調(diào)用SharedLibrary/DLLConnectivity?Libraries&Executables?CallLibraryFunctionNode右擊CallLibraryFunctionNode,選擇Configure來調(diào)用DLL中的特定函函數(shù)CallLibraryFunction的配置指定需調(diào)用用的DLL函數(shù)和函數(shù)數(shù)參數(shù)選擇dll的調(diào)用規(guī)則則;對于Win32dll來說,可以以是缺省(stdcall)或C.CallLibraryFunction和Win32DLLs函數(shù)數(shù)參參數(shù)數(shù)可可以以是是以以下下類類型型::Void數(shù)字字型型有符符號號/無符符號號8-bit,16-bit和32-bit整數(shù)數(shù)4-byte,單精精度度數(shù)數(shù)8-byte,雙精精度度數(shù)數(shù)數(shù)組組數(shù)組組數(shù)數(shù)據(jù)據(jù)指指針針數(shù)組組句句柄柄字符符串串CPascalG(LabVIEW)AdapttoTypeDLL實(shí)例例:MessageBoxA函數(shù)數(shù)回傳傳類類型型函數(shù)數(shù)名名intMessageBoxA(hWnd,lpText,lpCaption,uType)參數(shù)參數(shù)數(shù):HWNDhWnd32-bit無符符號號整整數(shù)數(shù).確定定parentwindow.此時(shí)時(shí)為為NULL.LPCSTRlpTextC-stylestringLPCSTRlpCaptionC-stylestringUINTuTypeunsigned32-bitintegervalue.回傳傳類類型型:int32-bitsignedinteger調(diào)試試CallLibraryFunction如果果VI不執(zhí)執(zhí)行行或或者者導(dǎo)導(dǎo)致致死死機(jī)機(jī),檢查查下下列列可可能能:DLL的路路徑徑名名是是否否正正確確如果果錯(cuò)錯(cuò)誤誤信信息息是是functionnotfoundinlibrary,檢查查函函數(shù)數(shù)名名的的拼拼寫寫、、語語法法和和大大小小寫寫傳遞遞給給DLL函數(shù)數(shù)的的所所有有參參數(shù)數(shù)都都有有數(shù)數(shù)據(jù)據(jù)線線連連接接到到CallLibraryFunction圖標(biāo)標(biāo)的的輸輸入入端端口口上上.檢查查數(shù)數(shù)據(jù)據(jù)類類型型和和參參數(shù)數(shù)順順序序使用用了了正正確確的的調(diào)調(diào)用用規(guī)規(guī)則則:C或者者缺缺省省(stdcall);TheWin32API使用用缺缺省省(stdcall)規(guī)則則需要要更更多多幫幫助助,請參閱閱UsingExternalCodeinLabVIEW手冊導(dǎo)入共共享庫庫工具具頭文件件路徑徑和預(yù)預(yù)定義義符號號包含路路徑::解析析頭文文件時(shí)時(shí)的搜搜索路路徑預(yù)定義義符號號:#ifdef……導(dǎo)入函函數(shù)列列表函數(shù)列列表::選擇擇需要要導(dǎo)入入的函函數(shù)操作提提示::……設(shè)置導(dǎo)導(dǎo)入?yún)?shù)控件類類型輸入/輸出傳遞方方式默認(rèn)值值數(shù)據(jù)類類型函數(shù)聲聲明基本類類型導(dǎo)入函函數(shù)原原型1、自定定義控控件2、類型型定義義與嚴(yán)嚴(yán)格類類型定定義3、自定定義錯(cuò)錯(cuò)誤代代碼4、DataSocket5、TCP與UDPDataSocket1、URL是DataSocket訪問目目標(biāo)的的唯一一地址址。2、DataSocket由DataSocketAPI和DataSocketServer兩部分分組成成,Server負(fù)責(zé)提提供DSTP協(xié)議和和管理理底層層網(wǎng)絡(luò)絡(luò)通信信,自自動管管理與與客戶戶端的的連接接,極極大簡簡化了了TCP編程,,安裝裝LabVIEW時(shí)DataSocketServer組件會會被自自動安安裝。。3、3種角色色——發(fā)布者者Publisher、DataSocketServer、訂閱閱者SubscriberDataSocket使用步步驟1、在DataSocketServerManager中建立立數(shù)據(jù)據(jù)項(xiàng)2、啟動動Server3、編寫寫發(fā)布布端程程序4、編寫寫訂閱閱者程程序可可采采用數(shù)數(shù)據(jù)綁綁定方方式TCP與UDP1、TCP———TransmissionControlProtocol由ip地址與與端口口號唯唯一標(biāo)標(biāo)識的的有連連接的的通信信方式式。2、UDP———UserDatagramProtocol快速、、輕量量、但但不可可靠的的數(shù)據(jù)據(jù)傳輸輸。電電話話與明明信片片9、靜夜四無鄰鄰,荒居舊業(yè)業(yè)貧。。12月-2212月-22Thursday,December29,202210、雨中黃葉樹樹,燈下白頭頭人。。19:48:4319:48:4319:4812/29/20227:48:43PM11、以以我我獨(dú)獨(dú)沈沈久久,,愧愧君君相相見見頻頻。。。。12月月-2219:48:4319:48Dec-2229-Dec-2212、故人人江海海別,,幾度度隔山山川。。。19:48:4319:48:4319:48Thursday,December29,202213、乍見翻翻疑夢,,相悲各各問年。。。12月-2212月-2219:48:4319:48:43December29,202214、他鄉(xiāng)生白發(fā)發(fā),舊國見青青山。。29十二月月20227:48:43下午19:48:4312月-2215、比不不了得得就不不比,,得不不到的的就不不要。。。。十二月月227:48下下午午12月月-2219:48December29,202216、行動動出成成果,,工作作出財(cái)財(cái)富。。。2022/12/2919:48:4319:48:4329December202217、做前,,能夠環(huán)環(huán)視四周周;做時(shí)時(shí),你只只能或者者最好沿沿著以腳腳為起點(diǎn)點(diǎn)的射線線向前。。。7:

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論