上一篇文章简要介绍了批量修改参数名称的方法,但是每一次批量修改不同的模块参数名称时,都需要手动修改代码。今天我们用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)把上一篇文章中的批量修改模块参数名称代码直接放在该“确定”按钮的回调函数下,稍作修改即可,具体代码如下。
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);endgain=find_system(gcb,'BlockType','Gain','Gain',old);for i=1:length(gain);set_param(gain{i},'Gain',new);end
用get函数读取编辑窗口的替换前参数名称和替换后参数名称,用gcb获取当前模型的路径名。
理论上所有类型模块的参数名都需要进行上图所示的for循环,搜寻并替换,本文只做了Constant、Gain两种模块的处理。
GUI功能测试
以上完成了GUI静态图形和回调函数的设计,得到了以下两个文件。
下面进行GUI测试,具体操作步骤:
1)打开需要替换参数的模型newModel.slx,并用鼠标左键单击选中Subsystem;
2)打开.m文件,点击运行,弹出以下用户界面;
3)替换前参数名中输入“ConstPara1”,替换后参数名中输入“NewConstPara1”,点击确定,模型中的参数“ConstPara1”被成功替换为“NewConstPara1”。
测试通过。
以上用GUI界面成功实现了批量修改Simulink模块参数名称,相比手改代码方式,更友好更便捷。