基于APP Designer 实现串口数据监测功能App总结(1)——函数间变量传递

时间:2024-03-01 17:18:09


基于R2016a版本,我做了一个实现串口数据监测功能的app。分篇总结一下,本文主要介绍函数间怎么实现变量的传递。

1、全局变量类型 global;

定义global类型的变量,即全局变量。
每一个要用到该全局变量的函数,都要重新声明 gloal x。当然,如果你在一个地方修改了 x的值,那么所有x的值就都变了!有的时候恐怕会出现紊乱。另一个更重要的问题在于,套用C++的一句话,全局变量破坏了程序的封装性!所以,全局变量是能少用尽量少用。

2、作为app的属性传递;

如下定义Serial变量
在这里插入图片描述
访问该变量的方式如下:

app.Serial

3、setappdata函数为句柄添加数据;

相关函数setappdata(obj,name,val)、getappdata(obj,name)、rmappdata(obj,name) ,其中obj为对象的句柄(可缺省,用 0来代替),name为变量名,val为给变量更新的值

举例:
定义变量COM,给变量赋值

setappdata(0,\'COM\',0);

获取COM的值

value=getappdata(0,\'COM\');

删除该变量

mappdata(0,\'COM\')

4、跨空间计算evalin和赋值assignin;

这里的跨空间跨的是matlab工作区和app 工作区两个函数运行的空间,在app工作区可以通过evalin和assignin实现与matlab工作区的交互。

  • Assignin函数基本语法
assignin(ws, \'var\', val)

其中ws可赋值为’base’ or ‘caller’,分别表示基本工作空间和app工作空间,
Assinin函数将值val指定给工作空间ws中的变量var,若变量var不存在,则创建一个变量var。
从一个函数function向MATLAB工作空间中输入数据;
在一个函数function内部,需要改变一个在caller function函数工作空间中定义的变量,

  • evalin函数基本语法
evalin(ws, expression);
[a1, a2, a3, ...] = evalin(ws, expression);

在特定的工作空间ws执行MATLAB语句expression,expression执行返回值可以通过[a1, a2, a3, …] 读取。
举例,在app中获取文件名和路径后在matlab 工作区加载,代码如下:

    [filename,pathname] =uigetfile({\'*.mat\';\'*.m\';},\'Select Cfg parameter\',\'..\App\ParaCfg\');          
    if ~filename              
      return;               
    end
    assignin(\'base\',\'filename\',filename);
    assignin(\'base\',\'pathname\',pathname); 
    evalin(\'base\',\'load([pathname,filename]);\');

5. 将数据保存到文件,需要时读取

save 存储数据
save (filename, var)%filename:存储的文件名;var 待存储的变量
load(importdata)加载数据
importdata(filename);

load(filename);

这种方式涉及到磁盘读写,速度当然会有影响的,一般情况不用,通常用在保存以及导入某个较大变量时才会使用!

更多方式:

还有其他的传递方式,但我感觉以上的几种基本上够用了,感兴趣的可以参考GUI的参数传递方式,和app 的原理基本上是一致的,不赘述。