【笔记】Simulink与Workbench交互2:for循环内解决Constant模块无法赋值问题

链接:【笔记】Simulink与Workbench交互+自定义m函数封装为Simulink模块

问题

依然采用链接里的模型,此时问题转变为,期望模拟a=1:1:100的三角函数,计算该函数的RMS值,如果将主代码改成以下这样,会发现输出结果都是一个值

matlab 复制代码
clc
clear
close all
%%
t_all=10;
delta_t=0.01;

for i=1:100
    a=i;
    b=1;
    c=0;%pi/2;
    simOut=sim('MainK');
    out_t=simOut.tout;
    out_y1=simOut.yout{1}.Values;
    results=rms(out_y1.data)
end

上述代码输出结果

这是因为Simulink的Constant模块的赋值均来自于工作区,而matlab的for循环里没有办法实时修改工作区的参数值,导致所有结果都是一个值

解决方案:采用set_param()函数

matlab 复制代码
matlab
% 假设你有一个变量 var 和一个定值 constant
var = 10; % 变量值
constant = 5; % 定值

% Simulink 模型的名字
modelName = 'your_model_name';

% 为第一个参数赋值变量值
param1Name = 'your_block/your_param1'; % 第一个参数的完全限定名
set_param([modelName, '/', param1Name], 'Value', num2str(var));

% 为第二个参数赋值定值
param2Name = 'your_block/your_param2'; % 第二个参数的完全限定名
set_param([modelName, '/', param2Name], 'Value', num2str(constant));

% 如果需要为多个参数赋值,可以继续添加 set_param 调用

上述代码可修改为:

matlab 复制代码
clc
clear
close all
%%
t_all=10;
delta_t=0.01;

for i=1:100
    a=i;
    set_param(['MainK','/','Constant1'],'Value',num2str(a));%注意Constant1是a模块的名称

    b=1;
    c=0;%pi/2;
    simOut=sim('MainK');
    out_t=simOut.tout;
    out_y1=simOut.yout{1}.Values;
    results=rms(out_y1.data)
end

注意Constant1是a模块的名称(赋值完毕后,该模块会自动显示赋值数)
输出结果,可以看出,结果随a的改变而改变

相关推荐
喂自己代言24 分钟前
心理健康与生活质量
笔记
不夜牛仔35 分钟前
算法笔记17 - 贪心算法介绍与思路 | 路灯摆放问题 | 活动安排问题 | 最低字典序拼接 | 金条分割问题 | 项目投资问题
笔记·算法·贪心算法
大邳草民1 小时前
深入理解 Python 的属性化方法
开发语言·笔记·python
degen_1 小时前
BDS 执行平台相关动作
c语言·笔记·bios
寅双木1 小时前
自己配一台电脑——CPU的命名方式
笔记·core·intel·cpu命名方式·酷睿·锐龙·ryzen
谅望者3 小时前
数据分析笔记04:抽样方法与抽样分布
数据库·笔记·数据挖掘·数据分析
d111111111d4 小时前
STM32外设学习-串口数据包笔记-(数据包的了解)
笔记·stm32·单片机·嵌入式硬件·学习
立志成为大牛的小牛6 小时前
数据结构——四十二、二叉排序树(王道408)
数据结构·笔记·程序人生·考研·算法
wdfk_prog11 小时前
[Linux]学习笔记系列 -- [kernel]kthread
linux·笔记·学习
鸽子一号13 小时前
c#笔记之面向对象
笔记