最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

LabVIEW開發(fā)TCP網(wǎng)絡通訊程序3

2023-04-20 20:15 作者:bjcyck  | 我要投稿

LabVIEW開發(fā)TCP網(wǎng)絡通訊程序3

將狀態(tài)轉(zhuǎn)換為插件

現(xiàn)在已經(jīng)了解了進程的基本操作,需要下面圍繞它包裝更多的邏輯,以將其轉(zhuǎn)換為可用的代碼。

添加關機和錯誤處理

首先,如果這個新進程要在測試平臺應用程序插件定義的結(jié)構(gòu)中靈活使用,那將需要一種機制來在應用程序的其余部分停止時自行關閉。由于該機制已經(jīng)定義,要做的就是注冊正確的事件(Stop?Application)并添加一個事件處理程序以使其執(zhí)行某些操作。

通常情況下:當關閉事件觸發(fā)時,處理程序?qū)⒁獔?zhí)行的下一個狀態(tài)設置為0,并將超時設置為0。請注意,它實際上并沒有停止循環(huán)-如果它停止了最后一個狀態(tài)(關閉偵聽器引用)將永遠不會有機會執(zhí)行。最后,還需要提供錯誤處理。

定義協(xié)議

隨著新的中間件插件絲滑地嵌入測試平臺框架中,下面需要創(chuàng)建處理網(wǎng)絡交互的可重入連接處理程序。但是,在這樣做之前,需要準確定義通信協(xié)議的外觀。

網(wǎng)絡的一個關鍵概念是層的概念。已經(jīng)討論了用于建立連接的TCP協(xié)議,但這并不是全部。TCP建立在稱為IP的較低級別協(xié)議之上,該協(xié)議本身構(gòu)建在用于處理物理接口等內(nèi)容的更低級別的協(xié)議之上。此外,該協(xié)議棧還可以向上擴展。例如,VI服務器至少部分建立在TCP之上,現(xiàn)在將創(chuàng)建自己的協(xié)議來定義用戶希望如何通過TCP進行通信。

這種分層可能看起來令人困惑,但它提供了巨大的價值,因為每一層都是一個模塊化實體,可以在不中斷其他所有內(nèi)容的情況下進行交換。例如,假設用戶換掉了計算機中的NIC(網(wǎng)絡接口卡),堆棧中唯一需要更改的部分是連接到硬件的最低級別。

用戶需要做的第一件事是定義將通過連接來回傳遞的數(shù)據(jù),以及這些數(shù)據(jù)在TCP通信通道中時將如何表示。理想情況下,想要一種在功能方面靈活的數(shù)據(jù)表示,其數(shù)據(jù)表示是嚴格的,并且即使在像C++這樣的原始語言中也易于生成。為填補這一利基市場而創(chuàng)建的第一個標準是HTML的衍生產(chǎn)品,稱為XML。問題在于,雖然它在前兩點上表現(xiàn)出色,但第三點是一個問題,因為當用于編碼小型數(shù)據(jù)結(jié)構(gòu)時,相同的功能使其非常靈活和嚴格,合謀使其非常冗長?;蛘邠Q句話說,對于小型數(shù)據(jù)結(jié)構(gòu),XML文檔中的數(shù)據(jù)密度非常低。

幸運的是,有一個替代方案非常適合我們需要做的事情:JSON。首字母縮略詞代表“JavaScript對象表示法”,顧名思義,該表示法最初用于促進JavaScript應用程序中的數(shù)據(jù)傳遞。巧妙的是,許多JSON概念可以很好地映射到本機LabVIEW數(shù)據(jù)結(jié)構(gòu)。例如,就數(shù)據(jù)類型而言,用戶可以擁有字符串、數(shù)字和布爾值,以及這些數(shù)據(jù)類型的數(shù)組。定義JSON對象時,需要將其定義為這些基本數(shù)據(jù)類型的集合—有點像LabVIEW中對Cluster執(zhí)行的操作。但是JSON還允許用戶在新對象的定義中包含其他JSON對象,只是LabVIEW允許用戶將clusters?嵌入到clusters?中。最后,為了錦上添花,地球上幾乎所有的編程語言(包括LabVIEW)都支持該標準。

為了解工作情況,可以考慮溫度控制器參數(shù)的情況。想要配置此值時,遠程應用程序需要發(fā)送以下字符串:

{

"Target":"DogHouseTC",

"Data":{

"ErrorHighLevel":100,

"WarningHighLevel":90,

"WarningLowLevel":70,

"ErrorLowLevel":60,

"SampleInterval":1

}

}

此字符串定義一個包含兩個項目的JSON對象。第一個被標記,它包含一個字符串,用于標識它想要配置的特定插件。第二個項目的名稱被標記。此子對象有5個值,表示配置溫度控制器所需的各個參數(shù)。如果用戶想知道,代碼是這樣將該字符串解析回LabVIEW數(shù)據(jù)結(jié)構(gòu):TargetDogHouseTCData

沒錯,只需要一個內(nèi)置函數(shù)和一個typedef簇。神奇之處在于字符串和簇代表完全相同的邏輯結(jié)構(gòu),因此LabVIEW的內(nèi)置函數(shù)很容易從一個映射到另一個。

需要注意的另一件事是,集群中的值有一個與之關聯(lián)的單位,在本例中為毫秒。LabVIEW處理此情況的方式與一般處理單位的方式一致:當將數(shù)據(jù)轉(zhuǎn)換為無單位形式(如JSON值)時,它使用數(shù)據(jù)類型的基本單位表示值。在所顯示的例例中,是時間,時間的基本單位是秒,因此LabVIEW將1000毫秒表示為1秒(以JSON表示)。同樣,當將字符串解展回LabVIEW數(shù)據(jù)結(jié)構(gòu)時,該函數(shù)會解釋在集群中定義的值基本單位的輸入值。

在開始采集數(shù)據(jù)之前,仍然需要添加一些內(nèi)容。首先,需要記住以太網(wǎng)是一種串行協(xié)議,因此,如果接收器可以提前知道預期的數(shù)據(jù)量,則使用起來要容易得多。為了滿足這一需求,將附加一個2字節(jié)的二進制值,作為總消息。另外以某種方式判斷消息是否完好無損且沒有損壞,因此還將附加一個2字節(jié)的CRC。此外,為了使CRC易于其他應用程序生成,使用標準的16位CCITT形式的計算。因此,一個命令數(shù)據(jù)包的樣子如下圖所示。

同樣,可以對響應消息使用相同的基本結(jié)構(gòu)。所要做的就是將JSON“有效負載”重新定義為具有兩個對象的JSON對象:一個數(shù)字錯誤代碼(其中0=“無錯誤”),以及一個包含響應需要返回的任何數(shù)據(jù)的字符串。

需要說明的是,上述的例程和文檔,都是可以下載的,雙擊即可打開,其中壓縮文件是可以采用粘貼復制的方式,拷貝到硬盤上。這不是圖片,各位小伙伴看到后嘗試一下,這個問題就不用加微信咨詢了。有關LabVIEW編程、LabVIEW開發(fā)等相關項目,可聯(lián)系們。附件中的資料這里無法上傳,可去公司網(wǎng)站搜索下載。


LabVIEW開發(fā)TCP網(wǎng)絡通訊程序3的評論 (共 條)

分享到微博請遵守國家法律
洛宁县| 永昌县| 武义县| 莫力| 东阿县| 同心县| 福清市| 秦安县| 崇阳县| 湟源县| 图片| 攀枝花市| 长治县| 花莲县| 余江县| 江西省| 公安县| 南投县| 五莲县| 松潘县| 页游| 石阡县| 玉龙| 和林格尔县| 逊克县| 禹城市| 乡城县| 米脂县| 英超| 搜索| 中江县| 仁寿县| 临清市| 肥城市| 普兰店市| 兴业县| 襄樊市| 汶上县| 寻乌县| 句容市| 贡嘎县|