前言:在电机控制中,我们采用DTC控制方式时,希望我们得到的磁链为圆形或近似为圆形,一般情况下,在Simulink模型中我们会采用XY Graphy模块来显示磁链的轨迹,如图1所示。
图1 XY Graphy 模块
但在仿真时间较长,或仿真的点数较多的时候,XY Graphy 会出现一种奇怪的现象,即一方面显示后边的点,一方面前面已经显示的点会同时消失,这导致显示的圆并不能显示完全,如图2所示。
图2
然后组会上说,可以把点导入工作区,然后在工作区中用Plot 函数把采集到的点描出来。但是这就好比武侠小说中有人告诉你,你要去寻找天山雪莲,你要去寻找无根水,你要去寻找南海神尼一样,我在网上找了好久,也没有找到系统的解决方法,解决办法说的最多的就是说在XY Graphy的设置中(右键模块,找options选项),将Limit data points勾上,如图3所示。
图3
这一方法就好比告诉杨过“十六年后,在此相见”,最后换来的只能是无尽的孤独。这一方法最终也没将问题解决。因此我就开始在网上找,怎么把点导入工作区,怎么用Plot 画出来,最后还真如段誉一样,找到了两种绝技傍身。
法一:利用 Scope 模块-凌波微步
如图4所示,先拉出来一个Scope模块,模块设置为两栏。
图4
首先在Scope 模块中,View->Layout 中选择1*2,其次进入设置,如图5所示。
图5
然后如图6所示,勾中 Log data to workspace,此时,仿真后的数据就会被存入到工作区中。
图6
其中的Variable name就是工作区中存放数据的名字。设置好以后,点仿真,运行模型。运行结束后,回到Matlab 的界面,不是Simulink的界面哦,如图7所示。会发现在右侧工作区中,出现了刚才存放数据的名字,我这里用“iaib”。
图7
再在命令行窗口中输入图示代码,如图8所示。
图8
点击回车,图形就出来了!
图9
代码解释:第一行,把iaib中的数据的第一组数据存入alpha,至于为什么是iaib.signals(1).values,这个可以双击工作区中的iaib->singals->表格中第一个数据,就看到了。然后用Plot 画出alpha和beta中的数据即可。
法二:利用 To File 模块-六脉神剑
具体模块位置见图10所示。
图10
连接方式见图11所示。
图11
然后双击模块,进行设置,如图12所示。
图12
其中File name 是模块的名字,Variable name 是在工作区中的名字,Save format选择Array数组。然后运行模型。
运行完毕后回到Matlab界面,会发现界面中出现了相关数据,如图13所示。
图13
双击工作区中的fluxab,单击2,会发现第二行数据被选中,如图14所示。
图14
然后单击工具栏中->绘图->Plot,如图15所示。
图15
此时会发现命令行窗口中出现语句,如图16所示。
图16
同样的操作,选中第3行的所有数据,然后 单击工具栏中->绘图->Plot,会发现命令行窗口出现语句,如图17所示。
图17
然后,再在命令行窗口中,写Plot函数,即plot(fluxab(2,:),fluxab(end,:));,再敲回车,图像就画出来啦。
这个函数的意思是 用Plot 函数,第一个参数用fluxab的第二行数据,第二个参数用fluxab的第三行数据 ,这里有一个问题,为什么不用第一行数据,因为第一行数据是时间轴,所以不用。
后记:我也是一个初学者,很多东西也不知道,很多东西理解的也很浅薄,这两类方法也远没有六脉神剑,凌波微步那么博大精深,若是这么做,能让枯燥的科研生活,能够多那么一丝丝的乐趣,就足够了。