You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Matlab脚本定义的向量赋值给Simulink模型EC、UL输入接口

首先确认你提到的「EC」和「UL」是受保护模型顶层的两个Inport输入端口的模块名,以下是两种可直接使用的赋值方案:

这个方案可以直接按端口名称绑定输入,不需要核对端口顺序,也不用提前修改模型的参数设置,适配所有R2017a及以上版本的Matlab。
代码示例如下,你只需替换EC、UL的向量定义部分即可:

Constant=43;
Constant1=43;
Constant2=43;
Constant7=43;
Constant10=43;
Constant11=43;

t_stop = 100;
T_s = t_stop/1000;
% 构造和仿真步长对齐的时间向量
t = 0:T_s:t_stop;
% 替换为你自己的EC输入向量,长度和t一致
EC_vec = 你的EC目标向量;
% 替换为你自己的UL输入向量,长度和t一致
UL_vec = 你的UL目标向量;

% 初始化仿真对象
simIn = Simulink.SimulationInput('test_lau.slx');
% 按端口名称绑定输入数据,这里的'EC'、'UL'要和模型里的Inport模块名完全一致
simIn = setExternalInput(simIn, {'EC','UL'}, {timeseries(EC_vec,t), timeseries(UL_vec,t)});
% 配置求解器参数
simIn = setModelParameter(simIn, 'Solver', 'ode5', 'FixedStep', num2str(T_s), 'StopTime', num2str(t_stop));

% 运行仿真
simOut = sim(simIn);

方案2:直接通过sim函数传参(适合不想改原有代码结构的场景)

这个方案需要先确认模型顶层Inport的排列顺序,比如从上到下第一个是EC、第二个是UL,输入数据的顺序要和端口顺序对应,代码示例如下:

Constant=43;
Constant1=43;
Constant2=43;
Constant7=43;
Constant10=43;
Constant11=43;

t_stop = 100;
T_s = t_stop/1000;
options = simset('solver', 'ode5', 'fixedstep', T_s);
% 构造和仿真步长对齐的时间向量
t = 0:T_s:t_stop;
% 替换为你自己的EC输入向量,长度和t一致
EC_vec = 你的EC目标向量;
% 替换为你自己的UL输入向量,长度和t一致
UL_vec = 你的UL目标向量;

% 构造外部输入,第一列为时间,后续列按端口顺序排列
external_input = [t, EC_vec, UL_vec];
% 调用sim时传入输入参数即可
sim('test_lau.slx',t_stop,options, external_input)

注意事项

  • 如果EC/UL每个时间步的输入本身就是多维向量,建议优先使用方案1的timeseries对象传参,避免维度匹配错误
  • 输入向量的长度必须和时间向量长度完全一致,时间步长需要和仿真设置的固定步长对齐
  • 方案2传入的输入数据顺序必须和顶层Inport的端口顺序完全匹配,否则会出现数据传错端口的问题

内容的提问来源于stack exchange,提问作者elle.delle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:18:01