【笔记】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的改变而改变

相关推荐
Rabitebla12 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
坤坤子吖16 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
YLCHUP20 小时前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
旖旎夜光1 天前
【C++ 基础入门】C++11 新特性(中):右值引用、移动语义与完美转发
开发语言·c++·笔记·学习
星恒随风1 天前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
2603_969694851 天前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
可乐ea1 天前
智能体记忆该拆成几层:笔记、记忆表示与注入上下文
服务器·数据库·笔记·ai智能体·提示词工程·上下文工程·记忆系统
Go Work2 天前
两个等值条件摆着,MySQL 偏要全表扫
经验分享·笔记
Oll Correct2 天前
Adobe illustrator 案例十四:花元素标志草图绘制
笔记·ui·adobe·illustrator
每月一号准时摆烂2 天前
服务器运维笔记(一)——使用shell编写实时查看BMC功率的脚本
运维·服务器·笔记