LabVIEWCompactRIO 開發(fā)指南20 應用程序接口
應用程序接口
STMAPI如圖4.24所示。對于基本操作,它由一個讀VI和一個寫VI組成。它還具有兩個補充VI,以幫助傳輸元數(shù)據(jù),但它們的使用不是強制性的。每個主要的VI都是多態(tài),這意味著可以將它們與不同的傳輸層一起使用。本文檔討論基于TCP/IP協(xié)議的STM通信,但STM也使用UDP和串行作為傳輸層。每個層的API是相似的。

圖4.24.STM函數(shù)
STM寫如元
使用此VI將元數(shù)據(jù)信息發(fā)送到遠程主機。為了正確解釋消息,元數(shù)據(jù)在接收端和發(fā)送端必須一致。不應在每個主機上維護數(shù)據(jù)的副本,而應維護服務器上的元數(shù)據(jù),并在客戶端連接時使用此VI將其發(fā)送到客戶端。
STM讀取元
使用此VI從遠程計算機接收元數(shù)據(jù)信息。它讀取和解壓縮元數(shù)據(jù)數(shù)組,可以將其傳遞給讀寫VI。
STM寫消息
使用此VI將任何類型的數(shù)據(jù)發(fā)送到遠程主機。它根據(jù)數(shù)據(jù)、數(shù)據(jù)名稱和元數(shù)據(jù)信息創(chuàng)建數(shù)據(jù)包。調用此VI時,它會檢索元數(shù)據(jù)數(shù)組中名稱指定的變量的索引。然后,它組裝消息數(shù)據(jù)包,并使用連接ID通過TCP/IP將其發(fā)送到遠程主機。
數(shù)據(jù)必須為字符串格式才能傳輸。使用“Flatten?to?String”函數(shù)將消息數(shù)據(jù)轉換為字符串。
STM讀取消息
使用此VI從遠程主機接收任何類型的數(shù)據(jù)。它讀取和解壓縮元數(shù)據(jù)索引和平展字符串數(shù)據(jù)。它查找meta元素并將其與數(shù)據(jù)字符串一起返回。然后,應用程序可以使用名稱或其他元屬性作為指導,將平展數(shù)據(jù)轉換為消息數(shù)據(jù)類型。在下面的示例中,名為“RandomData”的變量始終轉換為“Array?of?Doubles”數(shù)據(jù)類型。
該VI通常在循環(huán)中使用。由于不能保證數(shù)據(jù)會在給定時間到達,因此請使用“timeout”參數(shù)允許循環(huán)定期運行,并使用“超時?”指示器來了解是否處理返回的值。
舉例
圖4.25顯示了STM用于通過網(wǎng)絡發(fā)送RandomData和Iteration數(shù)據(jù)的基本示例。服務器VI如圖4.25所示,客戶端VI如圖4.26所示。請注意,服務器VI會在建立連接后立即將元數(shù)據(jù)(實現(xiàn)為字符串數(shù)組)發(fā)送到遠程主機。該示例寫入兩個值:迭代計數(shù)器和雙精度數(shù)組。元數(shù)據(jù)包含這兩個變量的說明。
只需將變量名稱連接到STM?Write?Message?VI,該VI負責為您創(chuàng)建和發(fā)送消息數(shù)據(jù)包。由于這種抽象,可以按名稱發(fā)送數(shù)據(jù),同時隱藏TCP/IP協(xié)議的基礎復雜性。
另請注意,應用程序在發(fā)送數(shù)據(jù)之前將數(shù)據(jù)平展為字符串。對于簡單數(shù)據(jù)類型,可以使用類型轉換,它比平展到字符串函數(shù)略快。但是,“Flatten?to?String”函數(shù)也適用于復雜的數(shù)據(jù)類型,例如簇和波形。

圖4.25.RT目標VI使用STM通信將數(shù)據(jù)發(fā)送到客戶端
可以自定義協(xié)議并對其進行擴展以滿足應用程序要求。添加變量時,只需向元數(shù)據(jù)數(shù)組添加一個條目,并為該變量添加相應的STM?Write?Message?VI。
接收數(shù)據(jù)也很簡單。圖4.26中所示的設計模式在與服務器建立連接時等待元數(shù)據(jù)。然后,它使用STMRead?Message?VI來等待傳入的消息。當它收到消息時,它會轉換數(shù)據(jù)并根據(jù)元數(shù)據(jù)名稱將其分配給本地值。
由數(shù)據(jù)名稱驅動的Case結構提供了一種用于處理數(shù)據(jù)轉換的可擴展方法。添加變量時,只需使用代碼創(chuàng)建一個案例,即可將變量轉換為正確的類型并將其發(fā)送到正確的目標。請注意,外部Case結構處理超時事件。

圖4.26.主機VI使用STM通信讀取傳入數(shù)據(jù)
此設計模式的一個優(yōu)點是,它集中了接收數(shù)據(jù)的代碼并將其分配給本地值。
另一個優(yōu)點是STM讀取消息VI在接收數(shù)據(jù)(或發(fā)生超時)之前一直處于休眠狀態(tài),因此循環(huán)以傳入數(shù)據(jù)的速率驅動。這保證不會丟失任何數(shù)據(jù),也不會浪費CPU時間來輪詢傳入數(shù)據(jù)。
注意:由于客戶端在運行時之前不知道元數(shù)據(jù),因此必須確保應用程序處理所有可能的傳入變量。最好實現(xiàn)“默認”情況以捕獲任何“未知”變量作為錯誤條件。
有關STM的更多信息,請查看以下有關ni.com的白皮書:
LabVIEW?Simple?Messaging?Reference?Library?(STM)
Command-Based?Communication?Using?Simple?TCP/IP?Messaging
A?Multiclient?Server?Design?Pattern?Using?Simple?TCP/IPMessaging
?
需要說明的是,上述的例程和文檔,都是可以下載的,雙擊即可打開,其中壓縮文件是可以采用粘貼復制的方式,拷貝到硬盤上。這不是圖片,各位小伙伴看到后嘗試一下,這個問題就不用加微信咨詢了。有關LabVIEW編程、LabVIEW開發(fā)等相關項目,可聯(lián)系們。附件中的資料這里無法上傳,可去公司網(wǎng)站搜索下載。