LabVIEWCompactRIO 開發(fā)指南5
LabVIEWCompactRIO?開發(fā)指南5
當(dāng)前值表(CVT)
當(dāng)前值查找表提供了一種在應(yīng)用程序中共享標(biāo)記的機(jī)制,它具有動(dòng)態(tài)標(biāo)記查找和組管理特性,這些特性在處理大量標(biāo)記時(shí)非常有用。單進(jìn)程共享變量和全局變量不提供動(dòng)態(tài)查找功能。當(dāng)前值表(CVT)允許應(yīng)用程序組件共享公共數(shù)據(jù)存儲(chǔ)庫,并可以直接訪問組件之間使用的任何變量的最新值。應(yīng)用程序操作(如警報(bào)檢測(cè)、用戶界面更新、進(jìn)程邏輯等)可以由共享相同數(shù)據(jù)存儲(chǔ)庫的單獨(dú)進(jìn)程處理。
CVT包含三組API函數(shù)來提供不同的接口,可以根據(jù)特定的應(yīng)用程序需求進(jìn)行選擇?;続PI提供簡單的寫入和讀取功能。另外兩個(gè)API(靜態(tài)API和索引API)為CVT提供了更高性能的接口,但在使用CVT時(shí)對(duì)應(yīng)用程序施加了一些限制。每個(gè)API都包含示例程序。

圖3.9每個(gè)API的示例都以CVT庫作為起點(diǎn)安裝。
基本的API編寫器示例如圖3.10所示。在API調(diào)用中,變量名用于查找變量的索引,然后使用索引從CVT訪問該值。本例將隨機(jī)數(shù)數(shù)據(jù)分配給Var0-Var4標(biāo)記,并寫入Stop和Index標(biāo)記。可以使用簇?cái)?shù)組初始化標(biāo)簽,如圖3.10所示,或者使用CVT?load?Tag?List?VI從文件加載它們。

圖3.10?;綜VT寫入器示例
圖3.11中的Basic?CVT?Reader示例在應(yīng)用程序的另一個(gè)實(shí)例中讀取標(biāo)簽的當(dāng)前值。兩個(gè)示例都使用Format?Into?String函數(shù)來動(dòng)態(tài)查找Var0-Var4標(biāo)記。

圖3.11?;綜VT讀取示例
可以在NI?Developer?Zone文檔Current?Value?LookupTable?Reference?Library中找到有關(guān)CVT的更多信息。
CVT庫安裝說明
步驟1:瀏覽到ni.com/labviewtools
步驟2:下載并安裝VI包管理器
步驟3:在VI包管理器中,搜索“CVT”
隊(duì)列
隊(duì)列是兩個(gè)不確定進(jìn)程之間基于命令或消息的通信的推薦協(xié)議,因?yàn)樗鼈冹`活、易于使用,并且允許傳輸緩沖的數(shù)據(jù)。在發(fā)送消息時(shí),可能需要在單個(gè)數(shù)據(jù)包中發(fā)送多種數(shù)據(jù)類型。隊(duì)列支持Cluster數(shù)據(jù)類型,可以使用該數(shù)據(jù)類型將固定大小和可變大小(如字符串)的不同數(shù)據(jù)類型捆綁在一起??梢栽趯?shí)時(shí)操作系統(tǒng)和Windows操作系統(tǒng)上使用隊(duì)列。
圖3.12中的框圖顯示了執(zhí)行數(shù)據(jù)采集任務(wù)的循環(huán)。數(shù)據(jù)采集循環(huán)使用隊(duì)列與第二個(gè)循環(huán)共享獲取的數(shù)據(jù)。第二個(gè)循環(huán)將它從隊(duì)列中讀取的采集數(shù)據(jù)記錄到實(shí)時(shí)目標(biāo)的磁盤上。

圖3.12可以使用隊(duì)列在兩個(gè)不確定循環(huán)之間傳輸緩沖數(shù)據(jù)。
隊(duì)列操作面板包含在LabVIEW的Synchronization?Queue?Operations下的函數(shù)面板上??梢栽贜I示例查找器中找到使用隊(duì)列的示例程序。
RT?FIFO
RT?FIFO是具有確定性行為的先入先出內(nèi)存緩沖區(qū)??梢允褂门cQueue函數(shù)類似的RT?FIFO函數(shù)或啟用RT?FIFO的共享變量來實(shí)現(xiàn)它們。這兩種機(jī)制在本質(zhì)上是相同的。雖然支持RT?FIFO的共享變量的實(shí)現(xiàn)比RT?FIFO函數(shù)更簡單,但RT?FIFO函數(shù)提供了更多的控制。例如,使用RT?FIFO函數(shù),可以決定何時(shí)創(chuàng)建FIFO以及何時(shí)關(guān)閉FIFO。共享變量在第一次調(diào)用時(shí)自動(dòng)創(chuàng)建,并在應(yīng)用程序停止時(shí)關(guān)閉。還可以控制配置選項(xiàng),例如輪詢還是阻塞來優(yōu)化性能,并且可以使用更復(fù)雜的數(shù)據(jù)類型,例如集群(只要它們包含固定大小的元素)。本節(jié)討論RTFIFO函數(shù)和啟用RT?FIFO的共享變量。
RT?FIFO功能
RT?FIFO函數(shù)類似于Queue函數(shù),但靈活性較差,更具確定性。推薦用在RTOS上任意兩個(gè)進(jìn)程之間的數(shù)據(jù)流,因?yàn)樗鼈兛偸穷A(yù)先分配內(nèi)存并具有最大緩沖區(qū)大小。RT?FIFO也推薦用在向時(shí)間關(guān)鍵循環(huán)傳輸命令或消息。它們提供了一種不增加抖動(dòng)的確定性數(shù)據(jù)傳輸方法。隊(duì)列和RT?FIFO在以下方面有所不同:
隊(duì)列可以處理字符串、變量和其他可變大小的數(shù)據(jù)類型,但是RT?FIFO不能。
■RT?FIFO的大小是固定的,因此它們可以在定時(shí)循環(huán)之間傳輸數(shù)據(jù),而無需動(dòng)態(tài)分配新的內(nèi)存。隊(duì)列可以隨著添加元素而增長。
■隊(duì)列在讀寫共享資源時(shí)使用阻塞調(diào)用,這可能會(huì)阻塞另一個(gè)循環(huán)的運(yùn)行并影響確定性。RT?FIFO不使用阻塞調(diào)用。
■RT?FIFO執(zhí)行時(shí)不考慮輸入錯(cuò)誤,以保持確定性;隊(duì)列不會(huì)在錯(cuò)誤時(shí)執(zhí)行。
圖3.13中的框圖類似于前面使用隊(duì)列的示例,但是由于數(shù)據(jù)采集循環(huán)現(xiàn)在是確定的,因此使用RTFIFO函數(shù)來共享數(shù)據(jù)。優(yōu)先級(jí)為100的確定性循環(huán)使用RT?FIFO函數(shù)與非確定性循環(huán)共享獲取的數(shù)據(jù)。不確定性循環(huán)將它從RT?FIFO讀取的采集數(shù)據(jù)記錄到實(shí)時(shí)目標(biāo)的磁盤上。可以在第4章:網(wǎng)絡(luò)通信的最佳實(shí)踐中下載RT?FIFO的更高級(jí)示例。

圖3.13使用RT?FIFO將緩沖數(shù)據(jù)傳輸?shù)綍r(shí)間臨界循環(huán)或從時(shí)間臨界循環(huán)傳輸。
由于固定大小的限制,RT?FIFO可能是一種有損通信方法。當(dāng)FIFO滿時(shí),將數(shù)據(jù)寫入RT?FIFO會(huì)覆蓋最老的元素。因此必須在FIFO滿之前讀取存儲(chǔ)在RT?FIFO中的數(shù)據(jù),以確保在不丟失數(shù)據(jù)的情況下傳輸每個(gè)元素。檢查RT?FIFOWrite功能的覆蓋輸出,以確保沒有覆蓋數(shù)據(jù)。如果RT?FIFO覆蓋數(shù)據(jù),覆蓋輸出返回TRUE值。
RT?FIFO函數(shù)包含在LabVIEW實(shí)時(shí)的LabVIEWReal-Time?RT?FIFO下的函數(shù)選板上。可以在NI示例查找器中找到具有RT?FIFO功能的示例程序
?
需要說明的是,上述的例程和文檔,都是可以下載的,雙擊即可打開,其中壓縮文件是可以采用粘貼復(fù)制的方式,拷貝到硬盤上。這不是圖片,各位小伙伴看到后嘗試一下,這個(gè)問題就不用加微信咨詢了。有關(guān)LabVIEW編程、LabVIEW開發(fā)等相關(guān)項(xiàng)目,可聯(lián)系們。附件中的資料這里無法上傳,可去公司網(wǎng)站搜索下載。