复制" Timespan" sim的向后兼容语法

时间:2017-08-29 00:41:55

标签: matlab simulink

TLDR:

简而言之,重写

的最佳方法是什么
time = 0:0.1:10;
[T,X,Y] = sim('model',time)

现代" Simulink语法没有明确的时间输入?

看起来我已经过时了w.r.t.我的Simulink用法。 "当前"以编程方式运行Simulink模型的语法是:

simOut = sim(model,'Name','Value',…)
simOut = sim(model,ParameterStruct) 
simOut = sim(model,ConfigSet)

文档提供了各种复杂的方法来设置在这里使用的参数。

" old" (2009b之前)Simulink的语法略有不同:

time = 0:0.1:10;
[T,X,Y] = sim('model',time)

这里,time就像函数ode45的参数一样;它可以指定返回值的时间向量,即使在使用变量步长求解器时也是如此。

如何在sim"现代语法"?中复制此行为?我尝试过以下方法:

simOut = sim(mdl,'OutputOption','SpecifiedOutputTimes','OutputTimes','time');

但是这给了我以下错误:

  

在框图的配置参数对话框中指定的无效输出时间' ...'

使用更简单的

simOut = sim(mdl,'OutputTimes','time');

正确运行"指定tout,但没有保存的信号具有匹配的长度。我觉得自己错过了一些显而易见的事情,而且我已经在这方面杀了太多时间。

1 个答案:

答案 0 :(得分:1)

name/value pairs功能接受的sim可以是model parameters中您可以通过Configuration Parameters Dialog Box指定的任何OutputTimes。似乎值必须与通常输入配置GUI的格式相同。 StopTime参数输入到可编辑的文本框中,这意味着它必须是一个字符数组,用于定义Simulink应生成输出的时间矩阵。我希望以下内容能够正常工作,并且等同于旧语法:

simOut = sim(mdl, 'OutputOption', 'SpecifiedOutputTimes', 'OutputTimes', '0:0.1:10');

如果将OutputTimes参数替换为存储时间的工作空间中的变量名称, 也可以正常工作:

times = 0:0.1:10;
simOut = sim(mdl, 'OutputOption', 'SpecifiedOutputTimes', 'OutputTimes', 'times');

编辑:另一个问题是确保OutputTimes中的最长时间不超过模拟built-in bouncing ball model。以下是使用{{3}}且默认StopTime为25秒的示例:

>> simOut = sim('sldemo_bounce', 'OutputOption', 'SpecifiedOutputTimes', ...
                                 'OutputTimes', '0:0.1:25');  % No error
>> simOut = sim('sldemo_bounce', 'OutputOption', 'SpecifiedOutputTimes', ...
                                 'OutputTimes', '0:0.1:30');  % OutputTimes too long
Invalid OutputTimes specified in the Configuration Parameters dialog for
block diagram 'sldemo_bounce'

>> simOut = sim('sldemo_bounce', 'OutputOption', 'SpecifiedOutputTimes', ...
                                 'OutputTimes', '0:0.1:30', ...
                                 'StopTime', '30');  % Extend StopTime, no error