如何将Matlab脚本定义的向量赋值给Simulink模型EC、UL输入接口
首先确认你提到的「EC」和「UL」是受保护模型顶层的两个Inport输入端口的模块名,以下是两种可直接使用的赋值方案:
方案1:使用Simulink.SimulationInput对象(推荐,无需修改模型配置,兼容性更强)
这个方案可以直接按端口名称绑定输入,不需要核对端口顺序,也不用提前修改模型的参数设置,适配所有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
相关产品推荐
相关产品推荐

