本帖最后由 137550162 于 -6-6 18:38 编辑
最近在做一个GUI界面,涉及到了调用Simulink的谐波分析功能以及修改Simulink模型中功能块参数。为了方便以后处理这种问题,现单独把这块重做了一个界面程序以供交流。
主界面:
11.jpg (15.9 KB, 下载次数: 140)
-6-6 18:33 上传
点击负载设置:
12.jpg (34.97 KB, 下载次数: 95)
-6-6 18:33 上传
点击执行:
13.jpg (21.73 KB, 下载次数: 111)
-6-6 18:33 上传
执行后界面:
14.jpg (20.4 KB, 下载次数: 101)
-6-6 18:33 上传
点击绘图区域执行图形重绘界面:
15.jpg (34.13 KB, 下载次数: 102)
-6-6 18:33 上传
具体步骤以及源程序将会在下面详细介绍。
1、首先需要有一个能够正常仿真的Simulink模型,将需要进行谐波分析的信号引入到示波器中:
1.jpg (27.93 KB, 下载次数: 100)
Simulink中相关信号连接方式
-6-6 09:11 上传
2.jpg (25.91 KB, 下载次数: 77)
GUI界面设计
-6-6 09:22 上传
如左上图所示,本GUI将对负载(Load)的参数进行设置并对A相电流(示波器的第三通道)进行谐波分析。右上图为GUI设计界面(简化后的界面)。
2、MATLAB提供了对示波器数据进行谐波分析的功能,前提是需要将示波器的波形数据保存到工作空间,让其调用,相关设置如下:
3.jpg (15.45 KB, 下载次数: 80)
示波器设置1
-6-6 09:40 上传
4.jpg (13.7 KB, 下载次数: 121)
示波器设置2
-6-6 09:40 上传
双击示波器-->点击参数设置图标-->选择‘History’选项-->将‘Save ...’项勾上-->设置‘Variable name’(这个名称在谐波分析以及GUI调用时需要),设置‘Fomat’为‘Structure with time’(即就是将数据保存为以时间为基准的结构体中)-->点击‘OK’即可。
3、(用过‘powergui’的可以忽视本步骤)在Simulink中进行谐波分析时我们可以借助‘powergui’中的‘FFT Analysis’功能来进行。分析前需要执行一次仿真。不然没有数据可供分析:
5.jpg (4.24 KB, 下载次数: 122)
powergui
-6-6 09:46 上传
6.jpg (21.58 KB, 下载次数: 85)
powergui界面
-6-6 09:46 上传
双击‘powergui’块,进入选项界面-->点击‘FFT Analysis’进入谐波分析界面:
7.jpg (119.99 KB, 下载次数: 105)
谐波分析
-6-6 09:46 上传
由于需要分析的是示波器的第三通道,将‘input’设置为3即可。其他设置项需要根据分析的具体情况而定,不过开始时间的设置需要注意,不能小于仿真结束时间,分析周期建议一个周期就够了,上面波形中红色的范围即就是分析的部分。将这个调用出来主要是验证GUI中调用的结果。
4、查看负载模型的可操作参数以及参数属性:
双击负载块,进入参数设置界面,可以看到可以设置的参数有好几个,而我们需要知道的是这些参数怎样在Simulink中传递(貌似我所知道的基本都是字符串传递),以及这些参数在Simulink中的具体参数名(一般与设置界面中的名称有些出入,查看具体属性靠谱些)。这里我们需要用到的函数是‘get_param('objpath','ObjectParameters')’,在命令窗口中输入该命令,查看我们需要了解的具体数据(具体函数描述可以看帮助文档)。
8.jpg (24.79 KB, 下载次数: 110)
Load
-6-6 10:36 上传
9.jpg (8.48 KB, 下载次数: 120)
get_param命令
-6-6 10:14 上传
10.jpg (26.44 KB, 下载次数: 128)
参数结构体
-6-6 10:14 上传
我们可以看到返回到h变量中的是一个结构体数据,这些数据包含了所有有关‘Load’块的信息,我们这里需要用到的是最下面几个数据(在‘MaskObject’之后的参数名才是我们需要调用和传递需要的参数)‘BranchType’负载桥类型,‘Resistance’电阻值,‘Inductance’电感值,‘Capacitance’电容值。进一步查看我们会发现这几个数据的类型都是‘string’,虽然在‘BanchType’参数中是‘enum’类型,但传递的任然是字符串数据。这个可以让我们清楚一点,那就是在GUI中我们只需将要设置的数据都统一用字符串表示即可(尤其是编辑框中的数据传递,由于从编辑框中获取的数据本身就是字符串类型,因此无需转换即可直接传递)。
5、(后续将继续编辑上传,不知道可不可以申请为精华帖^_^)