利用UDP matlab与VS实时通信传输数据
2015-11-14 10:32
2481 查看
本人的第一篇博客,在这获得过大家的帮助,也希望自己可以将自己所学的传递给有需要的人。
最近在做将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部分:
udpcallback函数部分:
关闭函数的callback 函数
以此变可以进行matlab与VS的通信了,界面如下:
最近在做将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发送给VS fopen(handles.udpTransmit);%打开udp handles.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 return end %%%%%%%%%%%%%%%%%读取显示部分%%%%%%%%%%%%%%%%%% strdata=fscanf(handles.udpTransmit);%文本方式读VS发送的数据 strtime=datestr(now,'HH:MM:SS');%显示时分秒 strtime=[strtime,10];%添加换行符10 strdata1=[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的通信了,界面如下:
相关文章推荐
- matlaB中 libsvm的 使用
- MATLAB和C/C++混合编程实现图像处理(一)
- MATLAB和C/C++混合编程实现图像处理(一)
- matlab从图片中简单识别红色物体
- Matlab矩阵的按列存储理解
- matlab控制图像的边界(margin),subplot的间距(gap)
- matlab字符函数
- 带色彩恢复的视网膜增强算法实现 (MATLAB版本)
- 梯度下降法 matlab
- 机器学习 最小二乘学习法 matlab
- matlab学习笔记(六)---空域变换增强-直方图处理
- matlab学习笔记(五)---空域变换增强-直接灰度调整
- OpenCV中的Image Watch,VS2013像matlab一样方便查看图像Mat像素值等
- 小波变换图像处理
- 关于matlab的hist函数取之后的折线
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- matlab:矩阵中对NaN的处理方式
- Matlab计算运行时间方法
- 【图像处理】Matlab使用技巧
- kmeans聚类算法及matlab实现