利用Matlab的GUI绘控制系统典型环节图像的方法技巧

利用Matlab的GUI绘控制系统典型环节图像的方法技巧,第1张

步骤/方法

1、新建GUI,保存,并按图示部署各控件(edit

text,static

texe,listbox,axes),按图修改各String

2、右击“曲线绘图”--View

Callbacks--Callback,输入以下程序

3、右击“关闭”--View

Callbacks--Callback,输入以下程序

4、右击“listbox控件”--View

Callbacks--Callback,输入以下程序

5、运行四大环节,如下(依次为比例环节、惯性环节、比例微分环节、比例积分环节绘图)

6、自行输入函数程序,绘制任意图像,以y=sin(x)为例,点击“曲线绘制”

        Matlab的GUI通过load_system加载Simulink模型,之后在GUI控件的回调函数中通过set_param控制Simulink模型。

        Simulink回调函数StartFcn可以注册监听事件,事件在周期都会更新一次。可以借此实现两者之间的实时通信。

GUI与simulink实时通信实例

    新建GUI选择空白GUI。完成后先保存为Test,会生成两个文件Testfig与Testm,继续编辑Testfig。

    按以上界面从左侧控件列表拖入对应控件。双击按钮1打开属性对话框,修改string属性为Start,Tag属性改为PB_Start。同理修改按钮2为string属性为Stop,Tag属性改为PB_Stop。

    如下图建立TestSim的simulink模型,存放在与fig文件相同的位置。模块可在simulink

Library Browser左上方输入名称查找,Real-Time Sync模块实现仿真与真实时间的同步(可能需要独立安装,按提示输入几个命令即可)。

打开Testm文件,在Test_OpeningFcn中加入

load_system('TestSim');

在PB_Start_Callback中加入

set_param('TestSim','SimulationCommand','start')

在PB_Stop_Callback中加入

set_param('TestSim','SimulationCommand','stop')

在slider1_Callback中加入

pos =num2str(get(hObject,'Value')) %获取slider当前位置

set_param('TestSim/Constant','Value',pos);%将slider当前值赋值给Constant模块。

    目前已经实现了GUI控制Simulink模型的单向操作,接下来实现simulink模型实时传递数据给GUI界面。

在Test_OpeningFcn函数中加入line_H继承自axies1

line_H = line('Parent',handlesaxes1,

    'XData',[],

    'YData',[],

    'Color','blue',

    'EraseMode','xor',

    'Tag','line_H');

function EventListener(block,eventdata)

hf = findall(0,'Tag','figure1');

ax = findall(hf,'Tag','axes1');

thisLineHandle = findall(hf,'Tag','line_H');

xdata = get(thisLineHandle,'XData');

ydata = get(thisLineHandle,'YData');

sTime = blockCurrentTime;

data =

blockOutputPort(1)Data;

if length(xdata) < 1001

    newXData = [xdata sTime];

    newYData = [ydata data];

else

    newXData = [xdata(2:end) sTime];

    newYData = [ydata(2:end) data];

end

set(thisLineHandle,

    'XData',newXData,

    'YData',newYData);

newXLim = [max(0,sTime-10)

max(10,sTime)];

set(ax,'Xlim',newXLim);

end

在TestSim模型的StartFcn中加入监听事件:

h=add_exec_event_listener('TestSim/Product','PostOutputs',@EventListener);

       至此已经完成了Simulink更新GUI中axes1数据的操作,实现了Simulink向GUI实时传输数据的功能。运行Testm文件点击start可以看到效果。

1、gui按图解添加坐标轴

2、程序做如下改动(加了一句axes(handlesaxes1))

R=8551e-3;

landa=5893e-9;

[x,y]=meshgrid(linspace(-0004,0004,1600));

r2=(x^2+y^2);

delta=(pir2/R+landa/2)/landa;

img=abs(cos(delta)^2);

axes(handlesaxes1)%此处axes1为坐标轴的句柄名(即显示在如图位置的那个名称)可能不同

imshow(img);

return;

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/3976500.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2024-04-07
下一篇2024-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存