利用UDP matlab與VS即時通訊傳輸資料

來源:互聯網
上載者:User

本人的第一篇部落格,在這獲得過大家的協助,也希望自己可以將自己所學的傳遞給有需要的人。

最近在做將VS與matlab進行即時傳遞資料,主要利用UDP進行。為什麼使用UDP,以及UDP的好處這裡也不再贅述,想瞭解的可以參看下面引用的博文。下面分開來說VS中C#的程式和matlab的程式。

(1)C# UDP通訊的實現

     主要參考http://blog.csdn.net/ecocn/article/details/8278926 

    裡面有很詳細、全面的關於UDP的介紹,以及一個C#表單函數的原始碼,本人運行過,沒有錯誤。感興趣的話可以下下來運行一個,當然了,這時候需要一個UDPclient端,推薦使用一款SocketTool的軟體,可以參考SoccketTool使用方法,建立一個UDP Client即可與上C#的程式進行通訊。這裡貼上VS的表單函數啟動並執行介面,這裡127.0.0.1表示原生ip地址,而172.19.3.15為原生ipv4地址,因此為都可作為本機地址,其中預設連接埠為8888,可點擊修改按鈕進行修改。


(2)matlab(GUI)中UDP通訊的實現

   考慮到操作起來會比較方便,所以在matlab中使用GUI來實現此部分的功能。GUI介面如下示:

因為我需要即時的通訊,即VS與matlab即時的傳遞資料,所以在matlab中UDP部分需要即時監聽對方有沒有資料發送,可以採用兩個方案:

一、使用timer函數。二、使用udp的callback函數。這兩種方法我都嘗試過,都可以用,但是考慮到我的現在的工程項目裡面需要比較強的即時性,而timer函數不太適合,因而這裡採用udp的callback函數。其中udp的callback函數有兩個一個為ByteAvailableFcn和DatagramReceivedFcn,前者適用於serial、TCP/IP、UDP等,後者只適用於UDP

,兩者的使用方法是一樣的,這裡採用了後者。

主要程式碼片段:

GUI的OpeningFcn部分:

function UDPcall_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;%發送資料端的參數設定ipMAT='127.0.0.1'; %本機資料端的ip和連接埠號碼,本地的portMAT=20000; ipVS='127.0.0.1'; %接收資料端的ip和連接埠號碼,遠端的portVS=30000;set(handles.localIP,'string',num2str(ipMAT));set(handles.remoteIP,'string',num2str(ipVS));set(handles.remotePort,'string',num2str(portVS));set(handles.localPort,'string',num2str(portMAT));set(handles.receive_edit1,'string',' ');global count num1 abnorm;handles.udpTransmit=udp(ipVS,portVS,'LocalPort',portMAT);%MAT發送給VSfopen(handles.udpTransmit);%開啟udphandles.udpTransmit.ReadAsyncMode = 'continuous';%非同步通訊時,連續讀串口資料set(handles.udpTransmit,'DatagramTerminateMode','on');handles.udpTransmit.DatagramReceivedFcn={@updateUDP,handles};guidata(hObject, handles);


udpcallback函數部分:

function updateUDP(obj,event,handles)%udp的回呼函數t1=clock;global  total count  num2 num1;if handles.udpTransmit.BytesAvailable == 0  returnend%%%%%%%%%%%%%%%%%讀取顯示部分%%%%%%%%%%%%%%%%%%strdata=fscanf(handles.udpTransmit);%文本方式讀VS發送的資料strtime=datestr(now,'HH:MM:SS');%顯示時分秒strtime=[strtime,10];%添加分行符號10strdata1=[strdata,10];dispdata=[strtime,strdata1];set(handles.receive_edit1,'string',dispdata);%顯示時間和資料datanum=str2num(strdata);%將文本型轉化成double類型%%%添加自己需要的操作%%%etime(clock,t1)%查看每次傳輸資料的時間開銷

關閉函數的callback 函數

function closebutton_Callback(hObject, eventdata, handles)fclose(handles.udpTransmit);delete(handles.udpTransmit);clear ipMAT portMAT ipVS portVS;close();%關閉GUI視窗

以此變可以進行matlab與VS的通訊了,介面如下:




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.