使用matlab的appdesigner制作分析固定简单电路的APP

本文详细介绍了如何使用MATLAB的AppDesigner工具创建一个电路分析的应用。从启动appdesigner,设计GUI界面,修改变量名称,编写初始化函数,到设定按钮回调函数实现功能,每个步骤都有清晰的解释和代码示例。最终展示了应用能够绘制直流传输特性和标出静态工作点的效果。
摘要由CSDN通过智能技术生成

关于appdesigner

appdesigner是matlab的app设计工具,由于结合了图形界面与代码界面,其GUI设计要简单不少,matlab预置了许多仪表、控件的图形及相应的代码框架,使得用户在设计自己的GUI时更加方便快捷。配合matlab自身强大的数学功能,使用者可以迅速地打造出一款实现相应功能的app。

相应的,由于使用了大量matlab预置的元素,使得一些更为个性化的独特设计难以在appdesigner上实现。同时,appdesigner生成的app必须要在搭载了matlab的平台上才能运行,即使打包成.exe文件仍然无法脱离matlab,移动端更是无法支持,这也使得appdesigner的使用场景受到限制。

开始制作APP

本篇博客展示的是一个分析简单MOS共源放大器电路静态工作点的APP。

要启动appdesigner,只需要在指令行输入appdesigner即可。

设计视图

在设计视图里,APP设计者可以设计GUI,在这里可以看到最后呈现给用户的效果。同时,可以直接拖动左侧预置的控件放到APP的GUI里,也可以插入文字、图像,实现快速布局:
在这里插入图片描述
在右下方的“检查器”中,还能对这些元素做进一步修改:
在这里插入图片描述
除此之外,在设计视图里也有诸多辅助功能,譬如对齐、调整间距等,选中自己想要排版的控件即可操作:
在这里插入图片描述

在这里插入图片描述

代码视图

在设计视图里,只能对GUI进行设计,要真正的实现功能,还是要到代码视图中去。在代码视图中,很明显地划分出白色和灰色两种代码块,灰色是不能直接修改的,而白色则可以由设计者自行编写:
在这里插入图片描述

修改变量名称

在设计视图里摆放的控件,在代码试图中都会有对应的变量,这些变量都被罗列在代码的开头:
在这里插入图片描述
需要注意的是,在最开始这些变量的名字并不方便阅读,而是诸如"Button123"这样的初始变量名:
在这里插入图片描述
这显然对后续的编程工作极不友好,但灰色的代码块又无法直接修改,令人十分头疼。不过,在右侧的组件浏览器,我们可以右键点击对应控件,找到重命名选项进行重命名。而且,重命名后代码会自动更新完成变量名的修改,不需要在代码中修改。
在这里插入图片描述

在这里插入图片描述

编写初始化函数

在一些时候,我们并不希望所有的数值都要自己输入,而是有一个合理的初始值,同时初始值也能方便编写APP时的调试,不需要每一次启动APP时都重新输入数据。为了实现这个功能,我们需要编写初始化函数,即startupFcn

要新建一个初始化函数,我们要现在右侧组件浏览器中选中整个UI,再在左侧代码浏览器中选择“回调”,点击搜索框右侧的加号,就可以新建一个初始化函数:
在这里插入图片描述
在这里插入图片描述
在这个函数里,就可以设置一些变量的初值,这些变量都是与输入框对应的。对于分析电路APP来说,就是RL,VS,K,VT,VI这几个变量,我们可以一一设置:

        function startupFcn(app)
            app.RL.Value=2000;
            app.VS.Value=9;
            app.K.Value=0.001;
            app.VT.Value=1;
            app.VI.Value=3;
        end

这样,启动APP后,输入框里就会直接显示设置好的初值:
在这里插入图片描述

按钮回调函数

目前为止,这个APP仍然只是一具空壳,无法对用户输入的任何数据有所反应。接下来,才是实现APP功能的核心:按钮回调函数,有了按钮回调函数,用户在按下按钮后才会有各种功能的实现。

新建一个按钮回调函数的过程与初始函数类似,在右侧组件浏览器中选中想要设置函数的按钮,之后在左侧代码浏览器中新建回调函数即可:
在这里插入图片描述
在这里插入图片描述
至于函数内的内容,根据要实现的功能不同天差地别,而且更多基于matlab与电路的知识,本篇博客不深入探讨,仅贴出代码:

输出直流传输特性图像:

        function PrintImage(app, event)
            app.SetVI.Value=0;
            rl=app.RL.Value;
            vs=app.VS.Value;
            vt=app.VT.Value;
            k=app.K.Value;
            vo=0:0.001:5*vs;
            x=0:0.001:5*vs;
            bd=5000*vs+1;
            for i=1:5000*vs+1
                vi=(i-1)/1000;
                if(vi<vt)
                    vo(i)=vs;
                elseif(vo(i-1)>=vi-vt)
                    vo(i)=vs-k/2*(vi-vt)^2*rl;
                    bd=i;
                else
                    vo(i)=(rl*k*(vi-vt)+1-sqrt((rl*k*(vi-vt)+1)^2-2*vs*rl*k))/(rl*k);
                end
            end
            plot(app.UIAxes,x(1:bd*2),vo(1:bd*2));
            app.DCImage.Value=0;
        end

绘制图像并标出直流工作点:

        function setVI(app, event)
            app.DCImage.Value=0;
            rl=app.RL.Value;
            vs=app.VS.Value;
            vt=app.VT.Value;
            k=app.K.Value;
            v=app.VI.Value*1000;
            vo=0:0.001:5*vs;
            x=0:0.001:5*vs;
            bd=5000*vs+1;
            for i=1:max(bd,v)+1
                vi=(i-1)/1000;
                if(vi<vt)
                    vo(i)=vs;
                elseif(vo(i-1)>=vi-vt)
                    vo(i)=vs-k/2*(vi-vt)^2*rl;
                    bd=i;
                else
                    vo(i)=(rl*k*(vi-vt)+1-sqrt((rl*k*(vi-vt)+1)^2-2*vs*rl*k))/(rl*k);
                end
            end
            plot(app.UIAxes,x(1:max(v,bd*2)),vo(1:max(v,bd*2)),v/1000,vo(v),'*r');
            app.VO.Value=num2str(vo(v));
            app.SetVI.Value=0;
        end

最终效果演示

这个电路分析APP仍处于最初级的状态,只能分析电路图所示的特定电路,与那些强大的电路分析软件相去甚远,除了作为电路分析课的一次作业,并没有太高实用价值,充其量只是对APP编写的一点初探。而用appdesigner编写的APP正如前言所说,受到诸多限制。只能说,水平有限,求大神轻喷。

绘制直流传输特性图像:
在这里插入图片描述
标出静态工作点:
在这里插入图片描述
修改参数:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShadyPi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值