matlab编写上位机
matlab是一款使用十分方便,容易上手的工具。其中功能十分强大,本部分就matlab编写上位机功能做简单教学,方便大家在工作学习中需要的时候能快速上手学习,制作出自己的上位机软件。
本教程具有极速上手,容易理解的特点,纯操作,在操作中理解。希望能给大家带来较好的学习体验。本教程所使用的matlab版本为2018a。
1. matlab介绍
matlab软件打开如图所示。
-
菜单栏是matlab软件的一些功能菜单,常用的比如运行,断点等功能。
-
菜单栏下面是当前工作文件夹的路径显示。
-
工作文件夹是当前文件夹下的所有文件显示。
-
代码编辑区是查看,编辑代码的区域,在当前窗口编辑好的程序,通过点击菜单栏的运行按钮运行。
-
命令行窗口是执行matlab相关命令、代码的窗口,比较短的几行代码可以在这里输入然后回车后运行。
-
变量区或工作区是程序在运行时产生的变量可以在这里查看。
matlab的上位机编写是在guide中进行的,也就是用户图形界面设计编辑器。
2.打开GUIDE
- 打开matlab,在命令行输入guide,然后按回车,会弹出如下窗口
- 选择新建GUI,Blank GUI(Default),点击确定,弹出如下窗口
这就是进行上位机显示窗口设计的编辑器,左侧为相关的组件,比如案件,静态文本,可编辑文本,坐标区等。
3.编写一个简单的绘图App
我们以按照输入幅度,频率绘制正弦波为例,讲解一下相关组件的使用方法。
- 按照上图所示,将相关组件拖到编辑器中,适当调整坐标区大小和各个控件位置。
双击可编辑文本,弹出可编辑文本属性编辑框
- 将属性中的String属性由可编辑文本更改为默认的幅度和频率,比如幅度为3,频率为2
双击按钮,弹出按钮的属性编辑窗口,将按钮的String属性由按钮更改为绘图,将两个静态文本的String属性分别改为振幅和频率。
- 右键绘图,点击查看回调中的Callback
- 弹出保存窗口,将fig文件保存到预定的文件夹中,界面跳转到matlab主界面,代码编辑区弹出fig文件对应的m文件,光标在绘图按键的回调函数处闪烁。我起名为plotSin
- 在绘图按键的回调函数中编写如下代码
t = 0:0.1:50; % 时间
A = str2num(handles.edit1.String); % 获取振幅字符串并将其转换为数字
f = str2num(handles.edit2.String); % 获取频率字符串并将其转换为数字
y = A*sind(2*pi*f*t); % 计算正弦波输出
ax = handles.axes1; % 获取坐标区句柄
grid on; % 打开网格
plot(ax,t,y); % 在坐标区中绘图
-
第一行表示,时间t的取值为从0开始,间隔0.1,一直取到50。即t=[0,0.1,0.2,0.3······49.8,49.9,50];
-
第二行表示,振幅A的取值为可编辑文本1的取值,handels为本上位机的句柄,edit1为该句柄中的控件,String为该控件的属性。
这样将比较难懂,打一个比方,我们写的这个界面是一个书包,起名字叫handles,书包里面有一个文具盒,起名字叫edit1,也有练习本,起名字叫axes1,文具盒有自己的特征,也就是属性,比如说名字属性是文具盒,也有颜色属性,大小属性等。**‘.’**符号叫做索引符,也就是说你要在书包里面找东西,在东西上面找属性特征,需要用眼睛看着找,这个符号就是起这个作用。
然后通过str2num将字符串转换为数字,即(string to number),因为后面的数学计算需要用到数字格式进行。相当于将贰写作2,不同的格式用处不同而已。
-
第三行和第二行类似
-
第四行为标准正弦波表达式,即
f ( x ) = A s i n ( 2 π f t ) f(x)=Asin(2\pi ft) f(x)=Asin(2πft)
在matlab中sin计算的是弧度值,计算角度三角函数需要使用sind。
-
第五行表示,找到界面中的坐标区,起名叫ax,因为后面绘图需要在坐标区上绘制,相当于在书包中找到练习本。因为这个界面只有一个坐标区,还好,如果有多个坐标区,这一行就相当与指定在哪一个坐标区中绘图。相当于我们数学画图就需要在书包中找到数学练习册,在数学练习册上画。
-
第六行表示,在ax坐标区中以t为横坐标,y为纵坐标绘制曲线。
-
第七行表示,打开网格,相当于在坐标纸,不写这一句,就是坐标纸上没有小格子,写上就是有小格子。
- 在matlab菜单栏上编辑器选项卡中点击运行图标。
- 弹出我们编写的ui界面运行结果。点击界面中的绘图按键。
我们也可以更改振幅和频率重新点击绘图,比如5°,5Hz。
上面就是matlab进行ui应用程序设计的简单介绍。下一篇介绍如何使用matlab进行串口通讯。