simulink模块参数灰色改不了

simulink模块参数灰色改不了,第1张

典型的Simulink模块双击时会d出对话框,在对话框中可以设置模块参数,如:双击正弦波模块(Sine Wave),可以设置正弦波幅值和频率;双击增益模块(Gain),可以设置增益值;双击PID控制器模块(PID Controller),可以设置PID参数值;双击传递函数模块(Transfer Fcn),可以设置传递函数的分子和分母系数。

但很多时候,需要在Simulink仿真过程中修改模块的对话框参数(称为在线修改或动态修改模块参数),如:希望在仿真过程中改变正弦波的频率,实现扫频信号;希望在仿真过程中改变增益模块增益值,实现变增益;希望在仿真过程中改变PID控制器增益,实现自适应的PID控制;希望在仿真过程中改变传递函数的分子或分母系数,实现时变的传递函数。

本文详细介绍Simulink如何在线修改(动态修改)模块参数的方法,并提供原创的Dynamic Change Parameter模块(简称DCP模块),可以轻松解决在线修改(动态修改)模块参数问题,提供详细帮助文件和大量例程,简单易用。

2. 方法

Simulink中的对话框参数有三种类型: Tunable(可调); Nontunable(不可调);SimOnlyTunable(不可动态调整)。需要动态调整的参数,必须为可调(Tunable)类型。

郑志波《Simulink 模块参缺拆皮数在线修改方法的研究》中提到了两种在线更新参数的方法:1. 使用全局变量,在m文件中动态修改全局变量的值,进而达到修改参数的目的;2. 使用set_param函数,在m文件中动态设置对话框参数。

经测试,第一种方法不可行。如下图所示,Modify_c函数中对全局变量进行动态更新,使c的取值由0每隔1s增加御伍至11,Simulink运行完成后全局变量的c更新为11,模型对全局变量的更新是成功的,但对话框参数并未随全局变量的改变而改变,增益c仍然为0。原因是:simulink模块对变量的读入只在模型初始化(或开始运行)的回调函数中执行,在仿真进行的过程中,尽管对话框参数的变量值改变了,但是系统并不会读取更新后的参数值,仿真中使用的参数值仍是变量的初始值0。

第二种方法是可行的,该方法可用S函数来实现,将模块名和参数名都作为S函数的参数,需要改变的参数值作为S函数的输入,在S函数的状态更新(Updata)回调函数中,使用set_param函数对对话框参数进行动态更新。

本人采用Level-2的S函数实现了上述第二种方法,并将其封装为模块形式(下文中称此模块为DCP模块),方便在其它模型中调用。

3. DCP模块

DCP模块经封装后,与Simulink自带模块完全相同,有两个输入端口,双击模块会d出属性对话框,可以在对话框中设置需要动态改变的模块参数信息。

输入接口:

接口1 [var]: 需要设定的参数值;

接口2[flag]: flag=0时忽略接口1的输入,不对参数进行更新;flag~=0时更新参数。

对话框参数:

模块名[block_name]: 格式为“mdl文件名/子模型名/模块名(tag)”,字符串形式;

参数名[par_name]: 需要动态修改的参数变量名,字符串形式,如需要修改增益模块的增益值,则输入“Gain”。一般来说,手动输入模块名、参数名比较复杂而且容易出错,模块中采用函数自动提取模块名和变量名,用户只需在所提供的GUI中作出选择即可。

重置[Reset] : 此复选框选中时,d出选择模块和参数设置GUI,如下图所示。

采样模式:1*2矩阵;设置模块的采样方式(与S函数中的采样方式定义相同)。

[0 offset] [ts offset] [-1, 0] [-2, 0]

连续采样时间,offset给定时间偏置 离散采样时间,ts为采样时间 继承采样时间,取决于上一模块的采样方式和时间 可变采样时间

参数维数:1*2矩阵,表示需要修改参数的维数(即接口1中输入数伏差据的维数),使用本模块必须保证参数的维数不变。

4. 使用

DCP模块配套文件(放置在DCPFiles文件夹内,源程序下载方式见文尾)有:

文件名 文件功能

Sfun_DCP.m Level-2的M文件编写的S函数,实现动态改变参数的功能

slblocks.m 将模块加入simulink模块浏览器的m文件,模块组名字为 User Defined Block

fig_par_set.m 模块属性中载入所需修改“模块/参数”的 GUI

m文件

AddFilePath.m 将文件加入Matlab搜索路径,首次使用DCP模块之前,需要运行本文件一次

str_bracket.m 功能是在在字符串头尾插入括号

User_Defined_MDL.slx 自定义模块的库文件,里面已含动态改变参数(程序中简称DCP)模块,可将需要加入模块浏览器的模块均放入此slx文件之中

使用步骤如下:

1) 将DCP文件夹放置在Matlab工作目录下;

2) 运行1次AddFilePath.m文件(仅首次使用DCP模块时需要执行此步骤);

3) 两种方式将DCP模块加入到Simulink中:方法一,打开Simulink Library Browser ->User Defined Block模块组 ->DCP模块 ->将DCP模块拖入Simulink模型中; 方法二,复制例程中的DCP模块至需要的Simulink模型中。

4) 双击DCP模块,d出属性设置对话框,点击Reset复选框,d出模块和参数设置GUI,选择需要在线修改的模块和参数,设置采样时间和参数维度,点击“OK”确定;

5) 将需要修改的参数值接入DCP模块的输入接口1,输入接口2用于进行时序控制,如不需要进行时序控制,输入接口2可以接入常数1。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12298214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存