matlab GUI数据传递
matlab GUI 数据共享
matlab GUI 编程(2008-05-10 19:35:14)转载▼标签:matlab gui guidata gcbo 杂谈首先创建新的GUI工程File->New->GUI然后拖放各种各样自己需要的控件工程会生成与fig文件同名的m文件在每个函数的注释里,matlab都会提示你使用GUIDATA和GCBOGCBO是获得全局回调对象句柄的函数(Global Call Back Object)GUIDATA存放了数据,我们可以利用它存放我们需要的数据,给其他函数使用。
例如我放了两个按钮和一个坐标轴,它会自动生成pushbutton1_Callback和pushbutton2_Callback两个回调函数然后我在pushbutton1里面用Guidata获得全局数据data,然后用rand生成随机数,放在data.x里面,用guidata把它放回全局数据里;然后在pushbutton2里面用Guidata把data.x取出来画它的3次方。
代码如下:% --- Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDA TA)data = guidata(gcbo); % get data of global objectdata.x = rand(100,1); % add rand nums x to dataguidata(gcbo,data); % set new data to global objectaxes(data.axes1); % activate the axes1plot( data.x ); % plot the random numbers% --- Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDA TA)data = guidata(gcbo); % get data of global objectaxes(data.axes1); % activate the axes1hold on;plot( data.x.^3,'r' ); % plot the cubic of the random numbershold off;。
Matlab中的网络通信与数据传输技术
Matlab中的网络通信与数据传输技术【引言】在现代社会中,随着互联网的普及,网络通信与数据传输技术成为了人们生活中不可或缺的一部分。
而在科学研究领域中,Matlab作为一种广泛应用的计算工具,也提供了丰富的网络通信与数据传输技术的功能与应用。
本文将深入探讨Matlab中的网络通信与数据传输技术,包括网络通信的基本原理、常用的数据传输方式以及Matlab在网络通信与数据传输方面的应用。
【网络通信基本原理】网络通信是指通过网络进行信息传输的过程,其基本原理包括数据的编码与解码、信息的传递与接收等。
在Matlab中,通过使用网络通信工具箱,可以实现多种网络通信协议的支持,包括TCP/IP、UDP等。
TCP/IP协议是目前应用最广泛的一种网络通信协议,其通过将数据分割为小块进行传输,保证数据的可靠性和完整性。
Matlab中的tcpip函数提供了TCP/IP协议的支持,可以实现基于TCP/IP协议的网络通信。
UDP协议则是一种无连接的网络通信协议,其主要用于实时应用,如音视频传输等。
Matlab中的udp函数可以实现基于UDP协议的网络通信,具有低延迟和高带宽的特点。
【数据传输方式】数据传输是网络通信的重要组成部分,常见的数据传输方式包括串行传输与并行传输。
在Matlab中,可以利用串行通信接口函数进行串行数据的传输,并且通过网络通信工具箱提供的函数,实现与外部设备的串行通信。
另外,Matlab还支持并行数据传输,例如利用并行计算工具箱提供的函数进行多线程数据处理和传输。
这种方式利用了计算机的多核处理能力,提高了数据传输的效率和速度。
【Matlab在网络通信与数据传输方面的应用】Matlab在网络通信与数据传输方面具有广泛的应用,以下将介绍几个常见的案例。
首先,Matlab可以应用于无线传感器网络中的数据传输与处理。
无线传感器网络是当今物联网技术的核心组成部分,其需要实时采集并传输大量的传感器数据。
Matlab提供了Simulink模块和相关工具箱,可以用于无线传感器网络的系统设计、数据预处理和实时数据分析等。
MATLABGUI不同控件函数间变量传递方法
MATLABGUI不同控件函数间变量传递方法在MATLABGUI中,不同控件之间可以通过多种方法进行变量传递。
下面将介绍几种常见的方法:1. 全局变量(Global Variable):这是一种简单而直接的变量传递方法。
在MATLAB程序中定义一个全局变量,并在各个函数中使用它。
例如,在GUI的主回调函数中定义一个全局变量,并在其他的控件函数中使用它。
但是,使用全局变量会导致代码的可读性和可维护性下降,并且容易产生命名冲突。
2. 数据导入和导出(Import and Export Data):将数据保存在磁盘上的文件中,然后在不同的控件函数中读取和写入这个文件。
例如,可以将数据保存为MAT文件或者文本文件,并在各个函数中使用load和save等函数进行读写操作。
这种方法的优点是简单易懂,但是频繁的文件读写操作可能会降低程序的效率。
3. 句柄传递(Handle Passing):将一个控件的句柄作为参数传递给其他控件函数,从而在不同的函数中共享变量。
句柄是MATLAB中用来表示图形对象的引用,可以通过函数get和set等来读写对象的属性。
例如,可以通过get函数获取一个控件的句柄,然后将它作为参数传递给另一个控件函数,在该函数中使用set函数来修改该控件的属性。
这种方法的优点是简洁高效,但是需要对MATLAB图形编程有一定的了解。
4. 事件驱动(Event-driven):利用控件的事件回调函数来进行变量传递。
例如,在一个按钮的回调函数中,可以将一些变量的值设为按钮的状态,然后在其他控件的回调函数中读取该变量的值。
这种方法是一种典型的事件驱动编程,可以应对复杂的用户交互操作。
5. 句柄界面(Handle Interface):在GUI的主回调函数中,定义一个句柄结构体,用来存储各个控件的句柄和相关变量。
然后,将该句柄结构体传递给其他控件函数,在这些函数中通过句柄结构体来访问和修改所需的变量。
这种方法可以很好地解决不同控件之间的变量传递问题,并且方便扩展和维护。
Matlab GUI FAQ
F&Q:说明:以下网站都是在制作Matlab GUI过程中遇到问题而查找到的网站,这些网站解决了很多问题,希望也能对大家有所帮助。
事实上Matlab自身的HELP文档是最好的自学及释疑资料。
另外,Matlab官网()和CSDN()也可以提供大量十分有用的资料和帮助。
1.Matlab GUI数据传递:/s/blog_630c70530100ies5.html2.Matlab GUI函数调用与数据传递:/s/blog_45b486b80100gs1p.html3.Matlab 串口实时波形显示例子:/view/ddb134f57c1cfad6195fa758.html4.掌握和精通Matlab GUI设计:/view/352d7268a98271fe910ef92d.html5.Matlab GUI中控件的使用:/link?url=2fRiKlE7-co1Y32D0084uLuOhAF174 WbvA7I0vY8SQoT7Maq0T8_dTtObbpLCjR5e8M50MW0j1p2Ii4V5ui9 GX6X4IcEcp9Af14JBhlVxJ_6.Matlab怎样关闭已经被clear的串口:/thread-25368-1-1.html7.Matlab串口操作:/s/blog_6163bdeb0102e8qc.htmlMatlab 在edit/listbox中循环输出,但不覆盖之前数据的方法:/blog/static/40822553201311113595161 3/8.如何清除串口缓存:/matlabcentral/answers/102268-how-can-i-empty-the-serial-port-buffer-in-matlab-without-using-the-instrument-c ontrol-toolbox9.Matlab 读取文件各种方法:/xianghang123/archive/2011/12/06/2277602. html10.Matlab字符串转换及数换/link?url=FUHxbN-QlNi2fJu4ZlwTVapMWRgp 6TD9ia_bil77uCSJxarnwBZqTBRnd_iQjszjthHXpgmVMBuZ5jP7PcG7 N-cjPEvgNQy5uJxVe8daH3C11.在Matlab中读取、写入二进制数据文件/lxfan_0406@126/blog/static/60969926201151892 82228/12.关于matlab gui定时器绘图的一个问题/thread-237619-1-1.html13.Matlab将GUI转化为exe文件,并且进行发布/s/blog_4d633dc70100o9hz.html/blog/static/12771428420123251 1303366//s/blog_690bcb270100ncur.html14.使用Matlab命令:/note/136332003/15.上位机软件接口说明:/link?url=OgVsC2m6-VrvePrQjCdOKd3U1w_5 4rwqakm_FOMezDw9Kn63CvY5tMw_HxrFC69Gqn_1HoU-7y84uIfDn zbmN1UEoqC_tu4wEMmozDRHxbu16.基于USB的实时数据采集系统及其在MATLAB中的应用/link?url=_wvot9LVtQziplJOOZ3Y_NOhw95y1 vvldd2dMMLaxufVRCJO0yoiRoOy1kiVI2mFM4avXeL4-Mj5otJH9HXa Z8aPMc8mRFpk37wntMGUtsO17.Matlab控制串口/usb 进行设备通讯/fml927/blog/141010USB devices:/products/instrument/supported/usb.html 18.在串口通信开发中实现自动查找串口端口的方法/uid-20672257-id-2973926.html19.Matlab和C联合编程:/climbingc/article/details/669899920.MATLAB中为GUI添加背景图片的方法/view/7d8eae365a8102d276a22fe8.html 21.Matlab教程:/Index.html22.四轴飞行器1.4 姿态解算和Matlab实时姿态显示/adfjhg/p/3918316.html23.MATLAB画图格式设置/s/blog_67d36d860100xf2d.html。
GUI多界面数据传递
专题8 GUI对象之间的数据传递【例6.3.1】设计两个GUI界面,分别如图6.51所示:图6.51 例6.3.1图要求:(1)双击主界面的选项,将该选项文本传递到次界面的可编辑文本框中显示出来,并隐藏主界面;(2)点击次界面的【返回】按钮,隐藏次界面,显示主界面。
【解析】创建GUI窗口mainfig,或得到已存在的GUI窗口mainfig的句柄,可使用下列语句:h = figure(mainfig);窗口之间的相互操作,可以采用global函数传递数据,采用findobj或findall函数获取其它窗口对象的句柄,采用mat文件传递数据,采用输入参数传递数据,还可以采用输出参数与uiwat、uiresume组合使用的方式传递数据。
本例采用上述5种方法分别编写对应的回调函数。
步骤:①打开GUIDE编辑器,创建两个GUI,如图6.52所示。
图6.52 例6.3.1的GUIDE布局②设置主界面的对象属性:a)figureName→主界面;b)List BoxFontSize→10;String→张三—(回车)—李四—(回车)—王五—(回车)—孙六;Tag→listbox1。
③设置次界面的对象属性:a)figureName→次界面。
b)Edit TextFontSize→10;String→空字符串;Tag→edit1。
c)Push ButtonFontSize→10;String→返回。
④编写回调函数。
方法1:采用global函数传递数据。
a)主界面List Box的Callback函数为:%% 若双击左键,将所选中的选项文本传给次界面global str;if isequal(get(gcf,'SelectionType'),'open')n = get(hObject,'value'); %获取所选中选项的索引号str_all = get(hObject,'string'); %得到列表框的所有文本str = str_all{n};set(gcf, 'Visible', 'off'); %隐藏主界面nextfig('Visible', 'on');endb)次界面OpeningFcn函数为:handles.output = hObject;%% 以下为添加的代码global strset(handles.edit1, 'String', str);%% 以上为添加的代码guidata(hObject, handles);c)次界面Push Button的Callback函数为:%% 隐藏次界面,显示主界面set(gcf, 'Visible', 'off');mainfig('Visible', 'on');方法2:采用findall函数传递数据。
Matlab GUI 编程心得
Matlab GUI编程心得一、GUI背景制作在Fcn函数内添加代码:ha=axes('units','normalized','position',[0 0 1 1]);uistack(ha,'top') %改变对象顺序II=imread('禾木01.bmp');image(II)colormap grayset(ha,'handlevisibility','off','visible','off');二、GUI中按钮、工具栏按钮添加图片改变button属性中CData值为图片:II=imread('禾木01.bmp');Set(handles.pushbutton1,’CData’,II);%imresize()可以改变图像大小三、GUI内与GUI间数据的数据传递GUI内部数据传递可以通过:handles.a=a1;handles.b=b1;或通过结构体:handles.c=struct{‘c1’,v1,’c2’,v2,’c3’,v3};然后利用handles.c.c1进行数据传递;GUI之间的数据传递:可以利用GUI本身的输入输出进行数据传递。
比如要实现[out1,out2]=GUI(in1,in2)-GUI 为GUI的名字(函数名),可以在OpenningFcn中添加handles.in1=varargin{1};handles.in2=varargin{2};guidata(hObject,handles);并在末尾添加uiwait(handles.figure1);%figure1为子GUI界面的句柄然后在OutputFcn中添加varargout{2}=handles.out1;varargout{3}=handles.out2;delete(handles.figure1); %delete函数不能乱放,在有输出参数时一定要放在程序运行的末尾,即OutputFcn中(没有输出参数时可以放在其他地方)。
Matlab GUIDE使用说明(Matlab GUI界面)
去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录。
从简单的例子说起吧。
创建Matlab GUI界面通常有两种方式:1,使用.m文件直接动态添加控件2.使用GUIDE快速的生成GUI界面显然第二种可视化编辑方法算更适合写大型程序。
一:创建GUI1.在.m文件中动态添加例如h_main=figure(‘name’,‘a demo of gui design’,‘menubar’,‘none’,…'numbertitle','off','position',[100100300100]);h_edit=uicontrol('style','edit','backgroundcolor',[111],'position',[20205020],...'tag','myedit','string','1','horizontalalignment','left');h_but1=uicontrol('style','pushbutton','position',[20505020],'string','INC',...'callback',['v=eval(get(h_edit,''string''));',...'set(h_edit,''string'',int2str(v+1));']);h_but2=uicontrol('style','pushbutton','position',[80505020],'string','DEC',...'callback',['v=eval(get(h_edit,''string''));','set(h_edit,''string'',int2str(v-1));']);2.使用GUIDE帮助创建GUI在Command里面输入GUIDE或者从菜单里面,或者从快捷按钮均可进入GUIDE新建并且保存后,会生成相应的fig文件和m文件,在Layout编辑视图,可以使用如下工具:Layout Editor:布局编辑器;Alignment Tool:对齐工具;Property Inspector:对象属性观察器;Object Browser:对象浏览器;Menu Editor:菜单编辑器。
阿英讲多个matlabgui之间的数据传递
阿英讲多个matlabgui之间的数据传递1 为什么要多个GUI之间参数传递?在matlab编写GUI界面时候,我们要很多个界面,例如figA和figB,figA中的一个按钮来打开figB,当需要在figB中设置一些参数,然后把那些参数值返回给figA中的按钮的那个callback,以在figA中使用figB传过来的数据。
"为了这个整了好几天头都了。
今天终于看到希望了哈哈,做个备注。
" ------ 首先感谢原作者无私分享他的知识,是你节省了我的学习时间。
2 缘起昨天在网上看了好多帖子,好多前辈都是把他成功的经验分享了一下,没有给具体的多个GUI之间数据传递的例子,或者举的例子没有详细的说明核心的参数传递机制。
这给初学者带来了学习的瓶颈,增加了入门难度。
此文的宗旨在于详细介绍多GUI之间数据传递的原理,结合实际例子深入浅出的把GUI参数传递的方法教给需要这方面知识的人。
愿大家得大智慧,发无上心!3 正文依次实践了下网上流传的多个GUI之间数据传递方式,我个人感觉好用的由以下三种方案,同时也推荐大家在实际的项目中使用,因为根据软件工程的思想不会影响整个工程的质量。
下面依次介绍(1)思想:采用setappdata, getappdata 在子GUI中传递数据,通过 varargout 将子GUI的参数传递给主GUI,uiwait(指定句柄), 通过uiresume(指定句柄)返回OutputFcn。
方法:1)主GUI中放一个Button,无参数调用子GUI,其CallBack如下function pushbutton1_Callback(hObject, eventdata, handles) mySettings = Gui2;set(handles.text1,'string',mySettings.weight)2)子GUI的figure的tag为figB,设置GUI子程序的OpeningFcn函数的结尾加上uiwait(handles.figB),这是因为在子GUI的OpenFcn中,如果不加uiwait,程序会直接运行到下面,执行OutputFcn。
GUI中不同界面的数据传递问题
同时在
在gui_1中OutputFcn输入以下语句
function varargout = gui_1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
在gui_2中的buttonCallback下输入
..................
function pushbutton1_Callback(hObject, eventdata, handles)
[data1,data2,data3,....]=gui_1;
.................
3、如果是多个变量需要传递,可以使用结构体的方式传递。例如:变量.a 变量.b 变量.c,取出时使用varargin{1},varargin{2},varargin{3}即可一一取出。
你的问题我今天刚刚解决,可能有点复杂哈,不过很好懂。
假设你有一个GUI叫gui_1,另一个叫gui_2,在gui_2中调用gui_1的参数或者结果,
利用figure的handle(句柄)来传递数据。具体的句法参考 guidata,get,set以及和handle有关的help。说具体点就是在关闭子界面前,把相关参数get到,然后用guidata和主界面的handle,把这些数据存到主界面handle里,然后在主界面“绘制曲线”的callback函数里再用guidata调用那些存好的数据来画图。
varargout{1}=h;
通过output里面的缺省变量varargout输出来。
在figA里面
就那样用
ret=figB;
快速入门Matlab GUI编程
快速入门Matlab GUI编程Matlab是一种功能强大的数值计算与数据可视化软件,广泛应用于科学研究与工程领域。
GUI编程,即图形用户界面编程,允许用户通过直观的图形界面与程序进行交互,而不需要在命令行中输入指令。
本文将介绍如何快速入门Matlab GUI 编程,并通过一些实例来演示其基本用法。
1. GUI的基本概念与创建方式GUI,全称为Graphical User Interface,即图形用户界面,它提供了一种直观友好的交互方式。
在Matlab中,可以使用GUIDE工具箱来创建GUI界面。
打开Matlab界面,点击主菜单中的“Apps”选项,然后选择“GUIDE”工具箱。
接下来,可以选择创建空白界面或者从现有的模板中选择合适的界面。
2. GUI的基本组件与布局管理在GUI界面中,可以添加各种组件,如按钮、文本框、滑动条等,来实现与用户的交互。
Matlab提供了丰富的组件库,可以根据需要进行选择和使用。
在GUIDE工具箱中,可以通过简单的拖拽和放置来添加组件,然后使用布局管理器对它们进行合理的排列和布局。
3. 事件与回调函数GUI编程中,事件是指用户在界面上所进行的操作,如点击按钮、拖动滑动条等。
每个事件都会触发一个相应的回调函数,用于处理相应的操作逻辑。
在Matlab中,可以通过GUIDE工具箱中的回调编辑器来创建和编辑回调函数。
回调函数可以是Matlab代码脚本,也可以是自定义的函数。
4. 数据传递与处理在GUI编程中,通常需要将用户输入的数据传递给后台的计算模块,并将计算结果返回给界面进行展示。
为了实现数据的传递与处理,可以使用全局变量、共享数据对象或者消息传递等方式。
Matlab提供了丰富的数据处理函数和工具,可以方便地进行数据处理与分析。
5. 图形绘制与可视化Matlab作为一种数据可视化软件,提供了丰富的绘图函数和工具,可以轻松地创建各种图形。
在GUI界面中,可以通过绘图函数将计算结果以图形的形式显示出来,并通过交互操作来进行进一步的探索和分析。
GUI界面之间的参数传递方法
GUI界面之间的参数传递方法(1-3)今天,研究了一下不同GUI之间的参数传递方法,Matlab中GUI之间参数传递不如VC一样简单,易于理解,但是如果理解了,也是有章可循的,传说的具有六种方法,介绍其中的一种,如下所示:**运用gui本身的varain{}、varaout{}传递参数。
上面介绍的方法只是适用于主从GUI之间传递参数,即从主GUI调用子GUI,然后关掉子GUI,子GUI的参数就传递到了主GUI,比如子GUI的名称为subGUI, 设想的参数输入输出为:[out1, out2] = subGUI(in1, in2)在subGUI的m文件中(由GUIDE自动产生),varargin 和varargout 分别是一个可变长度的cell数组(MATLAB帮助文件中有说明)。
输入参数in1和in2保存在varargin中,输出参数out1,out2包含在varargout中;在subGUI的OpeningFcn中,读入参数,并用guidata 保存,即:handles.in1 = varargin{1};handles.in2 = varargin{2};guidata(hObject, handles);返回参数的设置:1. 在GUI子程序的OpeningFcn函数的结尾加上uiwait(handles.figure1); figure1是subGUI 的Tag;2. subGUI中控制程序结束(如"OK”和"Cancel"按钮)的callback末尾加上uiresume(handles.figure1),不要将delete命令放在这些callback中;3. 在子GUI的OutputFcn中设置要传递出去的参数,如varargout{1} = handles.out1;varargout{2} = handles.out2;末尾添加delete(handles.figure1); 结束程序。
Matlab多窗口传值问题(GUI)
Matlab多窗口传值问题(GUI)1.直接传递当要在一个matlab中的.m文件打开一个新窗口时候,可以直接传递例如有两个窗口A.fig/A.m 和B.fig/B.m在A.m中B(var1) ; 即可传入参数那么在B中这样获取即可:if length(varargin)==1some_var= varargin{1};end2.通过output属传回在A.m中some_var=B(var1);也就是B还需要返回值。
那么在B中就需要设置handles的output值了function varargout = B_OutputFcn(hObject, eventdata, handles) varargout{1} = some_var_in_figure_B;3. 几个重要的函数1.getappdata(h,'Name'); 获取窗口句柄为h中的'Name'变量2.setappdata(h,'Name',value);设置窗口句柄为h中的'Name'变量为Value3.isappdata(h,'Name'); 判断h句柄下面有无‘Name’的变量4.rmappdata(h,'Name');删除h句柄下面‘Name’的变量5.guidata(h); 获取窗口句柄为h的handles结构6.guidata(h,handles); 设置窗口句柄为h的handles结构为handles7.guihandles(h) 生成handles结构说明:关于appdata的几个函数是最基本的,每个figure都可以有几个很多appdata,setappdata(0,'Name',value) 当设置句柄为0时,表示整个Matlab 共享的数据域,任何figure都可以访问。
这也可以成为数据传递的另一种方式。
Matlab GUI 数据传递
GUI数据传递(需要一定matlab基础)主要分两类:GUI内部数据传递及GUI之间的传递,用appdata都可以实现,用法稍有不同。
内部:①在定义数据的Callback函数结尾,setappdata,句柄为figure的tag,句柄格式为handles.tag。
格式为:set(handles.tag,'Name',Value(或者就是变量名));②在使用数据的Callback函数开头,进行数据承接,getappdata,格式类似:格式为:Nargs = get(handles.tag,'Name’);外部:①在定义数据的figure函数的Openning函数体中,setappdata,句柄为‘0’,即屏幕的句柄格式为:set(0,'Name',Value(或者就是变量名));②在使用数据的figure函数的Callback函数开头,getappdata,句柄为‘0’。
格式为:Nargs = get(0,'Name’);之所以不在Openning函数中进行承接,是因为如果现在Openning中承接,Callback函数要用还得进行内部appdata传递,不能直接用。
直接在Callback承接能简便些,但是缺少条理性几个要点:①set(0,‘Name’,Value),其实质就是将变量存进屏幕的结构体中,级别高,因此效果相当于全局变量。
但是当从一个GUI中调用这些数据时,必须确保所用数据已经调进系统内存,也就是说,存在这样一种情况:当我们在系统重启后,马上开始运行一个GUI,这个GUI可能会出现数据不足的状况,就是因为其所调用的那些屏幕级的appdata没有被调进内存,它们在系统启动后还没被运行过。
怎么办呢?只能再增加几行程序特地把它们加进内存,在调用语句getappdata前,按如下语句将所需要的figure开启然后关闭:格式为:h=tag_of_figure;close(h);开启又关闭,看似没有用,但是经过一次启动,各个figure里面的setappdata 都能得到运行,把数据写到屏幕级内存中,作用非小。
MATLABGUI数据传递总结
MATLABGUI数据传递总结在MATLAB GUI中,数据传递是指将数据从一个组件传递到另一个组件或从一个回调函数传递到另一个回调函数的过程。
数据传递在实际应用中非常常见,帮助实现用户界面与数据之间的交互和动态更新。
本文将总结MATLAB GUI中的数据传递方法,包括全局变量、handles结构体、UserData属性、公共数据区域、消息队列等技术。
1.全局变量:使用全局变量可以在GUI的所有回调函数中共享数据。
在GUI的函数中声明一个全局变量,并在回调函数中直接使用或修改这个全局变量。
在声明全局变量时需要加上“global”关键字,以告知Matlab该变量是全局变量。
优点:简单易用,无需额外的函数或配置。
缺点:可能造成命名冲突、数据不安全,不适合在多线程应用中使用。
2. handles结构体:在MATLAB GUI中,所有控件(如按钮,文本框)都有一个handles属性,该属性是一个结构体,包含了GUI中所有控件的句柄。
可以将数据存储在handles结构体的字段中,以实现数据的传递和共享。
在GUI的回调函数中,可以通过handles结构体的字段来读取和操作数据。
优点:方便灵活,可以在一个句柄结构中存储多个数据。
缺点:不适合存储大量的数据,可能导致处理的复杂性和性能问题。
3. UserData属性:每个MATLAB GUI对象都有一个UserData属性,可以用于存储自定义的数据。
可以将数据存储在UserData属性中,并在需要时通过get函数进行读取。
在回调函数中可以直接访问对象的UserData属性。
优点:简单易用,每个控件都有自己的UserData属性。
缺点:不适合存储大量的数据,可读性较差。
4.公共数据区域:使用MATLAB中一个.m文件作为公共数据区域,将数据保存在该文件中的全局变量中。
其他GUI回调函数可以通过该文件直接访问和修改全局变量。
优点:方便易用,数据共享简单。
缺点:容易造成命名冲突、数据不安全,不适合在多线程应用中使用。
matlab学习GUI的基本操作
matlab学习GUI的基本操作在命令⾏窗⼝输⼊guide
单击确定后出现,可以选择控件来设计,然后可以保存
右击可以查看控件的所有属性
举⼀个简单的GUI实例---实现数据的传输添加可编辑⽂本框
更改字体⼤⼩,string默认的删掉
在按钮“数据传递”上右击,找到数据查看--->回调函数,然后保存,名为⽐如是GUI_01,然后会出现如下的.m编写
在这⾥⾯实现数据传递
%%点击按钮时,handles.edit1代表第⼀个⽂本框,⽤⼀个get函数得到edit1中的数据
str=get(handles.edit1,'String');
%%⽤set函数将得到的字符写到edit2中
set(handles.edit2,'String',str);
然后运⾏该程序,可以实现将左⽂本框的内容传递给右⽂本框。
基于Matlab-GUI的串口通信编程实现
0 引言Matlab是MathWorks公司开发的一种科学计算软件。
Matlab运行稳定、可靠、使用方便,是广大科研人员进行科学研究的得力助手。
Matlab不仅具有强大的科学计算功能,还具有满足一般要求的数据采集以及界面设计开发功能。
Matlab GUI(Graphic User Interface)就是内置于Matlab的进行图形界面开发的模块。
本文利用Matlab GUI设计通过串口进行数据发送和接收的界面,并利用内置于Matlab的串口通信API实现串口数据发送与接收功能。
1 Matlab GUl介绍启动Matlab后,运行guide命令即可以启动Matlab GUI开发工具。
如图1所示。
新建Blank GUI,如图2所示。
在新建Blank GUI界面中,包含了一般的界面元素,如菜单、按钮、坐标轴、控件等。
添加必要的串口通信参数设置按钮。
运行后的界面如图3所示。
2 串口数据发送与接收功能实现2.1 建立串口通信流程的基本步骤Matlab提供了对串口进行打开、关闭、以及串口参数设置等操作的一系列函数。
利用这些函数可以选择串口号、设置串口通信参数(波特率、数据位、停止位、校验位等)、进行中断控制、流控制。
从建立串口通信到结束串口通信的完整流程包括以下几个步骤:(1)为应用程序创建串口对象。
实现该功能的函数为:其中参数port为完整的串口名称,如cornl。
PropertyName为串口通信参数,如baudrate,startbits等。
创建串口对象的过程中,也可以忽略PropertyName。
其函数为:(2)连接打开串口。
实现该功能的函数为:obj即为使用创建串口对象函数的返回值。
在连接打开串口后,可以对串口通信参数进行修改。
(3)设置或者修改串口通信参数。
在能够有效地进行串口通信前,必须设置正确的串口通信参数。
实现该功能的函数为:obj即为使用创建串口对象函数的返回值;PropertyName为串口通信参数,如baudrate,startbits等。
MATLAB GUI数据传递总结
Matlab的GUI参数传递方式总结其实Matlab提供了很多种直接或间接方法实现多fig中的数据共享,只是大家没有注意罢了:1、全局变量2、作为函数的参数传递3、利用控件的userdata数据4、为handles结构体添加新字段5、setappdata函数为句柄添加数据6、跨空间计算evalin和赋值assignin7、将数据保存到文件,需要时读取8、带参数调用GUI的M文件9、嵌套函数(不适用于GUIDE中,只适用纯命令是的GUI)一、全局变量运用global定义全局变量传递参数,适用于gui内控件间以及不同gui间。
这种方式恐怕是最简单的方式,是很省心!但是,简单的问题就在于有时你会很头疼!因为在每一个要到该全局变量的地方,你都要添一句gloal x,还有就是如果你在一个地方修改了 x的值,那么所有x的值就都变了!有的时候恐怕会出现紊乱。
另一个更重要的问题在于,套用C++的一句话,全局变量破坏了程序的封装性!所以,全局变量是能少用尽量少用。
以下创造一个简单的GUI给大家说明一下,建一个GUI,包含两个按钮,一个坐标系,一个用来画y=sin(x),一个用来画y=cos(x);eg:在GUI的OpeningFcn函数中写:global x y1 y2x=0:.1:2*pi;y1=sin(x);y2=cos(x);在pushbutton1_Callback函数中写Global x y1Plot(x,y1)在pushbutton1_Callback函数中写Global x y2Plot(x,y2)全局变量是比较方便的,但全局变量会破坏封闭性,如果不是有大量数据要传递,建议不要使用。
二、运用gui本身的varain{}、varaout{}传递参数这种方式仅适用于gui间传递数据,且只适合与主子结构,及从主gui调用子gui,然后关掉子gui,而不适合递进结构,即一步一步实现的方式。
输入参数传递(主要在子gui中设置):比如子GUI的名称为subGUI, 设想的参数输入输出为:[out1, out2] = subGUI(in1, in2) 在subGUI的m文件中(由GUIDE自动产生):1.第一行的形式为:function varargout = subGUI(varargin)该行不用做任何修改;varargin 和 varargout 分别是一个可变长度的cell型数组。
matlab与UG数据交换
Matlab与UG/Pro E 之间的数据交换方法为了充分利用各种软件的优点,经常需要在不同软件之间进行数据传递。
由于NURBS曲线已成为CAD领域的标准,而MATLAB具有强大的数值计算功能。
如果数据能在MATLAB与常见的CAD软件传递,可以很大程度提高设计、计算效率。
在经过尝试后,实现了MATLAB与UG\Proe之间数据的双向传递,在此分享出来,供有需要的参考。
一三维模型导入到MATLAB不同的三维模型软件之间为了交换数据,美国某协会规定了目前三维软件之间一种通用的数据存储格式STL ,对各种三维软件,生成STL文件是很简单的,现以UG和ProE分别说明。
对UG这里输出类型选择文本,因为后面MATLAB读取数据的程序是按照文本形式读取的。
其余选项可以自己设置。
注意!!UG的文件保存路径不能含有中文!!!!!对ProEStep1 :点文件——保存副本Step2 :在类型中,选择stlStep 3 在导出STL对话框中选择ASCII导出格式,其他诸如弦高好像是越大越好2 MATLAB读取STL数据STL格式规定模型由三个顶点组成的小三角形面片,多个面片构成了各种形状的曲面。
因此数据格式如下:首先给出的是一个三角形面片的法向量(x,y,z):facet normal。
然后给出三个顶点vertex。
一个面片就确定了。
读取程序就是要读取facet normal和vertex的内容。
具体见附件中的ReadSTL.m文件。
facet normal +0.0000000E+00 +0.0000000E+00 +1.0000000E+00outer loopvertex -1.7387080E+02 -1.7447189E+02 +2.5000000E+01vertex -2.2559979E+00 -1.2384968E+02 +2.5000000E+01vertex +6.1819200E+00 -1.1596921E+02 +2.5000000E+01endloopendfacet二MATLAB输出数据到UGUG可以根据外部点来画出图像。
matlab函数调用及数据传递(转载)
matlab函数调用及数据传递(转载)函数挪用在一个m文件中,可以界说多个函数,但是文件名必定要与第一个函数(主函数)一概,该文件中其他函数则为本文件的私有函数,外部不行访问(可以经历参数挪用的要领访问,下面会形容)。
比如在一个步骤中,创建一个fig后,会天生这样一个m文件:function varargout =febirdfun(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @febirdfun_OpeningFcn, ...'gui_OutputFcn', @febirdfun_OutputFcn, ...'gui_LayoutFcn', [], ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});end剖析一下这个主函数:结果gui_State是一个机关,指定了figure打开和输出函数,开始gui_CallBack为空,倘使输入参数个数不为0,接下来将输入第一个参数通报给gui_State.callback。
接下来用交给gui_mainfcn函数治理,gui_mainfcn 按照gui_State和传入参数来确定是执子函数,仍旧打开fig 文件和运行OpeningFcn和OutputFcn。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB GUI的数据传递方式总汇(转载)
(2011-09-24 21:57:44)
转载▼
标签:
分类:Matlab
全局变量
传递方式
参数
调用
函数
matlab
gui
杂谈
转载自:/2011/09/09/matlab-gui的数据传递方式总结zz/ matlab gui共有六种参数传递方式和范围各不相同。
1.运用gui本身的varain{}、varaout{}传递参数(注:这种方式仅适用与gui间传递数据,且只适合与主子结构,及从主gui调用子gui,然后关掉子gui,而不适合递进结构,即一步一步实现的方式)
输入参数传递:
比如子GUI的名称为subGUI, 设想的参数输入输出为:[out1, out2] = subGUI(in1, in2) 在subGUI的m文件中(由GUIDE自动产生):
(1).第一行的形式为:function varargout = subGUI(varargin)
该行不用做任何修改;varargin 和varargout 分别是一个可变长度的cell数组(MATLAB帮助文件中有说明)。
输入参数in1和in2保存在varargin中,输出参数out1,out2包含在varargout中;
(2).在subGUI的OpeningFcn中,读入参数,并用guidata保存,即:
handles.in1 = varargin{1};
handles.in2 = varargin{2};
guidata(hObject, handles);
返回参数的设置:
(1). 在GUI子程序的OpeningFcn函数的结尾加上uiwait(handles.figure1); figure1是subGUI的Tag;
(2). subGUI中控制程序结束(如”OK”和”Cancel”按钮)的callback末尾加上
uiresume(handles.figure1),不要将delete命令放在这些callback中;
(3). 在子GUI的OutputFcn中设置要传递出去的参数,如varargout{1} = handles.out1;varargout{2} = handles.out2;末尾添加delete(handles.figure1); 结束程序。
在GUI的OpenFcn中,如果不加uiwait,程序会直接运行到下面,执行OutputFcn。
也就是说程序一运行,返回值就确定了,再在其它部分对handles.output作更改也没有效果了。
加上uiwait后,只有执行了uiresume后,才会继续执行到OutputFcn,在此之前用户有充分的时间设置返回值。
通过以上设置以后,就可以通过[out1, out2] = subGUI(in1, in2) 的形式调用该子程序。
在一个GUI中调用另一个GUI时,主GUI不需要特别的设置,同调用普通的函数一样。
在打开子GUI界面的同时,主程序还可以响应其它的控件。
不需要担心子GUI的返回值被传错了地方。
2. 运用global定义全局变量传递参数(适用于gui内控件间以及不同gui间)
这种方式恐怕是最简单的方式,是很省心!但是但是,简单的问题就在于有时你会很头疼!因为在每一个要到该全局变量的地方,你都要添一句gloal x,还有就是如果你在一个地方修改了
x的值,那么所有x的值就都变了!有的时候恐怕会出现紊乱。
另一个更重要的问题在于,套用C++的一句话,全局变量破坏了程序的封装性!所以,全局变量是能少用尽量少用。
3. 运用UserData传递参数(gui内)
直接通过对象的userdata属性进行各个callback之间的数据存取操作。
首先必须将数据存储到一个特定的对象中,假设对象的句柄值为ui_handle,需要存储的值为value,则输入以下程序即可:
set(‘ui_handle’,'UserData’,Value);
此时,value数据就存在句柄值为ui_handle的对象内,在执行的过程中若要取回变量可以通过以下方式在任意callback中获取该数据值:
value=get(”ui_handle,’UserData’);
虽然使用这种方法简单,但是每个对象仅能存取一个变量值,因此当同一对象存储两次变量时,先前的变量值就会被覆盖掉,因此都用UserData存储简单与单一的数据。
如下面有两个gui函数,myloadfn加载mydata.mat文件,该文件内存储XYData变量,其值为m*2的绘图矩阵,加载后将该变量值存储到当前的窗口的UserData属性中。
另一个myplotfcn函数则是用以获取该UserData属性中存取的绘图数据,然后绘图。
代码如下:
function myloadfcn
load mydata;
set(gcbf,’UserData’,XYdata)
function myplotfcn
XYdata=get(gcbf,’UserData’);
x=XYData(:,1);
y=XYData(:,2);
plot(x,y);
4.应用setappdata\getappdata与rmappdata函数(gui间和gui内,推荐使用)
使用上面三个函数最有弹性处理数据的传送问题,与UserData的方式相类似,但是克服UserData的缺点,使一个对象能存取多个变量值。
(1)getappdata函数
VALUE=getappdata(H,NAME)
(2)setappdata函数
setappdata(H,NAME,VALUE)
(3)rmappdata
rmappdata(H,NAME)
首先在matlab命令窗口输入magic(3)数据,因此当前的工作空间就存储了magic(3)这组数据了,然后建立一个按钮来获取并显示magic(3)数据
>>A=magic(3);
>>setappdata(gcf,’A',’A');%save
>>uicontrol(‘String’,’显示矩阵A’,’callback’,'A=getappdata(gcf,’A')’);
当在主子gui内调用时,可以如下设置
fig1调用fig2时,使用fig2指令来打开fig2,
在fig2的m文件中,在回调函数中用setappdata(fig1,’A',A)实现返回fig1,并将参数A传递给fig1
然后在fig1的使用A的地方添加A=getappdata(fig1,‘A’)。
但这种方式的一个问题就是没调用一次,fig1的数据就得初始化一次,这是因为setappdata(fig1,’A',A)中出现了fig1,调用一次setappdata就得运行一次fig1的缘故,解决方案就是把
setappdata(fig1,’A',A)改为setappdata(0,’A',A),这样把A读入matlab workspace,相当于一个全局变量了,但当然比直接用global定义全局变量好!
5.结合handles和guidata函数(gui内,不推荐使用,经常出现问题,比如在handles中添加了变量对象Y后可能就会挤掉handles另外一个对象)
他的使用格式如下,如果你在pushbutton1中得到一个变量X,相传出去,那么在pushbutton1的callback中,在得到X后添加如下代码:
handles.X=X;
guidata(hObject,handles)(注意,一定是两行连写)
在pushbutton2中要用到X是,在其callback先添加X=handles.X;即可得到X的值。
6. 运用save和load(importdata)传递参数(gui内和gui间)
将某变量x的值先存到磁盘,用的时候在调用。
格式如下:save(‘*.mat’,'x’);用的时候就用load(‘*.mat’),但这样只是把x读到了matlab workspace,不会用显示,你还要再去查看这个变量名, 然后才能用,建议使用
p=importdata(‘*.mat’),p是一个结构体,可以随意使用了。
当然,这种方式涉及到磁盘读写,速度当然会有影响的,一般情况不用,通常用在保存以及导入某个变量时!。