图形用户界面实现批量修改参数名称

上一篇文章简要介绍了批量修改参数名称的方法,但是每一次批量修改不同的模块参数名称时,都需要手动修改代码。今天我们用Matlab自带的GUI功能来完成批量修改的任务。


GUI是什么?Graphical User Interface,图形用户界面,即已图形界面的方式帮助我们实现与计算机的交互,与直接编写代码、执行代码的方式比较,更方便普通人去使用。可以这样说,我们在电脑上安装的大部分软件,都带有GUI属性,方便非专业人员更好的使用软件。GUI只是帮助我们更舒服地使用代码,代码一直存在。


我们以上一篇文章中介绍的批量修改参数名称方法为例,来设计一个GUI界面,方便我们使用这些代码。

静态UI设计

UI设计属于静态设计,就是把图形界面设计成自己喜欢的样子。


在Matlab命令窗口输入guide,选择新建,即可打开GUI设计界面,如下图。


为实现批量修改模块参数名称需要进行以下操作:


1)1个Panel:搭建一个面板,作为参数输入界面的外围框图,双击该图形,修改其Title为“参数替换”,并修改字体、边框线性等属性(这些都比较随意,修改至自己喜欢的样子即可)。


2)2个Edit Text:搭建两个输入编辑窗口,作为后面进行参数修改的输入模块,双击这两个图形,删除其String中的定义“Edit Text”,其他属性也可以按需修改。


3)2个Static Text:搭建两个静态窗口,作为上面两个Edit Text的定义,上级这两个图形,修改其String为“替换前参数名”、“替换后参数名”, 其他属性也可以按需修改。


4)1个Push Button:搭建一个按钮,作为确认动作的窗口,双击图形,修改其String为“确定”。


5)调整上述图形的大小、相对位置等,让整个界面尽量美观。


操作完以上步骤后,可得到下面的图形:


点击保存,修改fig名称为“ParameterReplace”,就会同时保存下两个文件:.fig和.m。

.fig定义了刚刚设计的静态图形界面,.m文件定义了静态图形界面中各组件的回调函数,通过编辑这个.m文件可以帮助我们实现GUI界面的动态控制。


回调函数编写


图形用户界面添加交互组件后,此时运行出的GUI界面是静态的,用鼠标对界面上的组件和菜单进行操作时,不会产生任何响应。这时就需要编写各图形对象的回调函数,当用户用鼠标单击GUI界面上的某个组件或菜单时,使静态的GUI界面产生动态的变化。

回调函数的本质就是响应用户的操作,执行图形界面背后的代码,完成程序的正常执行。


为实现批量修改模块参数名称的任务,我们需要进行以下操作(更多操作指引请关注公众号视频内容):


1)右键“确定”按钮,选择菜单“View Callbacks”中的子菜单“CallBack”,就可以打开该Push Button按钮背后的回调函数。


2)把上一篇文章中的批量修改模块参数名称代码直接放在该“确定”按钮的回调函数下,稍作修改即可,具体代码如下。

<code>function pushbutton1_Callback(hObject, eventdata, handles)
old=get(handles.edit1,'String');
new=get(handles.edit2,'String');

constant=find_system(gcb,'BlockType','Constant','Value',old);
for i=1:length(constant);
set_param(constant{i},'Value',new);
end

gain=find_system(gcb,'BlockType','Gain','Gain',old);
for i=1:length(gain);
set_param(gain{i},'Gain',new);
end/<code>

用get函数读取编辑窗口的替换前参数名称和替换后参数名称,用gcb获取当前模型的路径名。

理论上所有类型模块的参数名都需要进行上图所示的for循环,搜寻并替换,本文只做了Constant、Gain两种模块的处理。


GUI功能测试


以上完成了GUI静态图形和回调函数的设计,得到了以下两个文件。


下面进行GUI测试,具体操作步骤:


1)打开需要替换参数的模型newModel.slx,并用鼠标左键单击选中Subsystem;


2)打开.m文件,点击运行,弹出以下用户界面;


3)替换前参数名中输入“ConstPara1”,替换后参数名中输入“NewConstPara1”,点击确定,模型中的参数“ConstPara1”被成功替换为“NewConstPara1”。


测试通过。


以上用GUI界面成功实现了批量修改Simulink模块参数名称,相比手改代码方式,更友好更便捷。