LabVIEW Actor Framwork (1)________ 邊學(xué)邊做server&client
初始需求:
現(xiàn)在要做一個(gè)類似聊天的demo,一個(gè)server端,若干個(gè)client端;首先是server啟動(dòng),通過server可以打開若干個(gè)client端,然后每個(gè)client可以獨(dú)立給server發(fā)送數(shù)據(jù)。server收到數(shù)據(jù)打印出來帶有client id的信息。
必然想到,這里出現(xiàn)了2個(gè)Actor,一個(gè)server,一個(gè)client;
下面,我們來編寫和測(cè)試第一個(gè)actor——server
一、打開LabVIEW2016,新建一個(gè)proj:
并保存到硬盤文件夾。
二、右鍵項(xiàng)目中的My Computer新建Actor:
最后建立好的文件目錄如上圖,硬盤存儲(chǔ)文件夾的定義如下:
data——存放定義該Actor的私有數(shù)據(jù)類型;
mothods——方法;
overides——重寫的方法;
server test——用于自測(cè)試的vi;
note:當(dāng)然,你也可以不這么存儲(chǔ)和放置,但最好這么做,清晰不會(huì)為后面產(chǎn)生混亂與沖突;
此時(shí)項(xiàng)目的如下:
三、定義私有數(shù)據(jù):
一般將私有數(shù)據(jù)放到一個(gè)簇里面進(jìn)行管理,這樣做是為了方便以后拓展;
如上圖:私有數(shù)據(jù)有分別為:
message:字串類型,用來存儲(chǔ)server收到的信息,注意,這個(gè)信息可以是外部發(fā)來的,也可以是自己發(fā)送給自己的;比如,我們?cè)趯懞昧诉@個(gè)Acotor server后,可以行單元測(cè)試,此時(shí)就是自己給自己的actor發(fā)送一個(gè)消息,看看能否正常收到。
User event top:停止的用戶事件
User event message:發(fā)送信息的用戶事件
四、重寫方法:
一般就重寫的vi就是這三個(gè):
初始化——core核心(也就是你要實(shí)現(xiàn)的功能在此處重寫)——stop停止機(jī)制
1.Pre Launch Init.vi
將對(duì)象進(jìn)行初始化,采用Bundle By Name節(jié)點(diǎn)進(jìn)行捆綁;
2. Stop Core.vi
在server out后面采用
來解捆綁,得到用戶事件句柄,然后此處產(chǎn)生一個(gè)停止事件,這樣,該類中所有有響應(yīng)這個(gè)用戶事件的都能做出自己的處理。
目前這個(gè)例子中,此處的stop用戶事件是為了到時(shí)候停止Actor Core.vi 中的while循環(huán);
(如果你此處還沒有理解, 不用著急,看到后面再回來就能恍然大悟。)
3. Actor Core.vi
這個(gè)便是咱們的actor要實(shí)現(xiàn)功能所在的地方。我們需求是要接收到一條消息,然后把它顯示記錄下來。那么我需要建立一個(gè)簡單的循環(huán)+事件結(jié)構(gòu),用來響應(yīng)用戶事件,這里有兩個(gè)用戶時(shí)間,一個(gè)是message,一個(gè)是stop;
程序框圖如下:
注意的幾點(diǎn):
2 用戶事件在使用之前請(qǐng)先行注冊(cè),最后程序退出時(shí)銷毀事件。
2 所有的Actor對(duì)象的使用請(qǐng)連線在Actor Framework.lvlib:Actor.lvclass:Actor Core.vi
之前,因?yàn)楦割惖倪@個(gè)core也在一直運(yùn)行,數(shù)據(jù)流驅(qū)動(dòng)的LabVIEW編程決定這樣編寫;
2 用戶事件: User Event ,此處直接可以從事件結(jié)構(gòu)元素message端得到內(nèi)容的。
那么message是怎么發(fā)送的呢?接下來說明如何“創(chuàng)建方法的消息隊(duì)列”?
五、創(chuàng)建類的消息隊(duì)列:
首先在server 類的method虛擬文件夾下,創(chuàng)建動(dòng)態(tài)方法,操作如下圖:
保存自動(dòng)生成的vi到硬盤實(shí)際文件夾的mothods目錄:
接下來編輯此方法vi,如下:
保存,然后在project中對(duì)此方法點(diǎn)擊右鍵創(chuàng)建消息隊(duì)列;
創(chuàng)建好了以后,保存到硬盤。一般會(huì)在server類同級(jí)目錄:
然后在send message to server Msg.lvclass定義私有數(shù)據(jù),此處就一個(gè)message,我們用一個(gè)string輸入控件即可;至此,創(chuàng)建send message的消息隊(duì)列完成。
send message to server Msg.lvclass->Send send message to server.vi便是我們用來給server 這個(gè)Actor發(fā)送消息的方法。
至此,整個(gè)server的actor開發(fā)完成。
接下來我們編寫一個(gè)測(cè)試vi,用來啟動(dòng)server actor,停止,和發(fā)送一個(gè)消息測(cè)試是否正常?
測(cè)試vi取名test launch & send msg to server.vi存放在server類的下面:
注意,server作為root來啟動(dòng),所以采用:
分別測(cè)試上述3個(gè)功能,這樣便能每個(gè)Actor自行保證OK;
至此,Actor server測(cè)試完成,如果是多人協(xié)同開發(fā)的時(shí)候,此時(shí)就可以將自己編寫的這個(gè)actor發(fā)布給別人使用。
接下來,我們?cè)賮砭帉慶lient,這部分內(nèi)容我們下節(jié)再講。
審核編輯:湯梓紅
-
LabVIEW
+關(guān)注
關(guān)注
1971文章
3654瀏覽量
323781 -
硬盤
+關(guān)注
關(guān)注
3文章
1310瀏覽量
57324 -
Server
+關(guān)注
關(guān)注
0文章
90瀏覽量
24040
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
sushu---Actor Framework基本介紹
labview的TCP/IP通信server端怎么知道是哪個(gè)client發(fā)過來的信息呢,謝謝!
使用LABVIEW2017打開I/O server,選擇OPC Client時(shí)報(bào)錯(cuò),請(qǐng)問是為什么?如何解決?
s7-1200和s7-1500和labview,3者之間互為Client /Server,Modbus-tcp通訊,已經(jīng)過本人實(shí)操驗(yàn)證
labview 中OPC server 自動(dòng)變化
邊學(xué)邊干系列LabVIEW三合一(儀器控制+報(bào)表生成+界面本地化)
Client Server模型數(shù)據(jù)實(shí)現(xiàn)技術(shù)
LabVIEW Actor framework 定時(shí)消息Demo
LabView TCP數(shù)據(jù)傳輸?shù)?個(gè)實(shí)例詳細(xì)資料概述
![<b class='flag-5'>LabView</b> TCP數(shù)據(jù)傳輸?shù)?個(gè)實(shí)例詳細(xì)資料概述](https://file.elecfans.com/web1/M00/53/39/pIYBAFsfRKaAOfzmAAFbZ5nzXCE166.png)
手把手教你學(xué)LabVIEW視覺設(shè)計(jì)
基于LABVIEW的SQL Server數(shù)據(jù)庫操作教程
在LabVIEW中創(chuàng)建Actor Framework的抽象消息及接口
AT32講堂023 | AT32 MCU TCP client與TCP server如何與PC端通信
![AT32講堂023 | AT32 MCU TCP <b class='flag-5'>client</b>與TCP <b class='flag-5'>server</b>如何與PC端通信](https://file.elecfans.com/web2/M00/42/9C/pYYBAGJ5xmyARrXXAAALuRDQWfU330.jpg)
Eureka Client的創(chuàng)建案例
![Eureka <b class='flag-5'>Client</b>的創(chuàng)建案例](https://file1.elecfans.com/web2/M00/A9/32/wKgZomUjv5OAKgBIAABjIOksrgw399.jpg)
評(píng)論