利用UDP matlab与VS实时通信传输数据

来源:互联网 发布:数据库经典书籍 编辑:程序博客网 时间:2024/05/21 08:00

本人的第一篇博客,在这获得过大家的帮助,也希望自己可以将自己所学的传递给有需要的人。

最近在做将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的通信了,界面如下:




1 0
原创粉丝点击