分享

(4条消息)在Simulink中对S 函数进行参数传递的三种方法

 xiaoxiaoanyang 2019-04-12

1)之前在调程序的时候,用的都是S函数来进行编写的,但是因为需要对不同的系数设置不同的值,然后看仿真的结果。一开始仿真的时候只会在S函数的文件中修改相应变量的值,每次都要在几个文件中修改四五个值,然后进行仿真。
2) 上一种的方法实在是太麻烦了,后来经过在MATLAB中文论坛中查找相应的资料和看了孙忠潇老师的书之后,开始会利用S函数的属性页中的对话框(如图1所示)进行参数变量的传递,然后把模型中涉及的S函数中的变量全部写到一个M脚本文件中(脚本文件),每次仿真程序的时候,先运行这个M文件,然后就可以仿真了,这个好处在于可以成批量的修改参数,如何设置可以参考用Simulink进行仿真遇到的一些问题以及相应的解决方法整理。需要注意的是用这个方法之后是不需要再S函数中定义变量了,直接使用变量名就可以了。为什么这里要强调是M脚本文件呢?因为脚本文件中的值自己运行之后,其值会直接输出到工作区间中,固然用M 函数文件也可以输出到工作去年中,但是M函数文件默认是只输出一个变量的,如果在调用的时候你要输出多个变量的话,那么就需要指定输出变量的名称,这样的话相比M脚本文件麻烦了许多的。但是在有的情况还是可以使用的。
正如这段代码一样:
A=2;
B=3;
C=4;

在直接运行M脚本文件的时候是可以在工作区间看到这三个变量的,但是如果使用M函数的时候是这样的:[A,B,C]=MFunctionfile_name。
但是这种方法还是不能对S函数中的参变量进行自动的修改并且仿真。目前发现对于S函数模块可以利用get_param来获取参数,但是好像并没有什么用。相应的命令是get_param(‘model_name/S-Function4’,’Parameters’),但是得到的是你设置的变量名称,并不是变量的值。而且当你使用Set_param时也可以对S函数的参数变量这一栏进行修改,但是修改之后你原来设置的参数名称也都没了。
3)后来在无意中对一个示波器进行创建子系统的操作(因为我们不会无聊到对一个模块来创建子系统吧),就在想是不是也可以对S函数模块进行这种操作,因为操作子系统之后就可以使用Set_param函数来设置参数变量了。然后就验证了一个发现是可以这样做的。
验证的模型框图如图2所示,图3是自己写的一个S函数,图4是采用第二种方法来传递参数变量的,图5是采用第三种方法来传递参数变量的。对S函数模块创建子系统还是需要在图4的基础中进行创建。最终的结果如图6所示,两种方法的结果是不同的。
在MATLAB中采用M文件实现对Simulink中的S函数程序实现自动调参数

这里写图片描述

图1 S函数模块属性页

这里写图片描述

图2 仿真模型图

这里写图片描述

图 3 S函数

这里写图片描述

                    图4 第二种方法S函数模块属性页

这里写图片描述

                   图5 第三种方法S函数属性页

这里写图片描述

         图6 最终实验结果图

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 全屏 打印 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多