利用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的通信了,界面如下:
- 利用UDP matlab与VS实时通信传输数据
- 利用UDP传输结构体数据 structdata over udp
- 低带宽下实时UDP传输与非实时TCP传输的协调
- WebRTC实时通信系列教程6 使用RTCDataChannel传输数据
- WebRTC实时通信系列教程9 数据通道图片传输
- Android中Socket通信之TCP与UDP传输原理
- Android中Socket通信之TCP与UDP传输原理
- Android中Socket通信之TCP与UDP传输原理
- Android中Socket通信之TCP与UDP传输原理
- TCP与UDP在socket中传输通信的区别
- linux发送端与安卓接收端基于UDP协议SOCKET通信(传输图像数据)
- udp传输数据
- socket UDP传输数据
- UDP传输数据
- 基于udp的传输通信
- MATLAB利用串口接收数据,并实时显示图形
- 利用UDP通信
- 利用UDP协议传输图象
- 为什么Java字符串是不可变对象?
- 豆浆机改装记(7): 关于UI界面的构思
- 编译器架构的王者LLVM——(8)函数的调用及基本运算符
- iOS9新内容适配
- Tomcat(免安装版)的安装与配置
- 利用UDP matlab与VS实时通信传输数据
- Android日志工具类 + Activity传值规范 + Activity退出管理
- 我的iOS学习历程 - TargetAction
- 《PHP从入门到精通》学习笔记二
- Java String StringBuilder StringBuffer
- ALS 在 Spark MLlib 中的实现
- JavascriptDOM编程艺术学习笔记3
- 朴素贝叶斯分类器
- 【队列】循环队列