错误“指定了太多的返回参数。仅指定一个。”

时间:2019-12-08 11:02:40

标签: matlab simulink

我收到此错误“指定了太多的返回参数。仅指定一个。”

我理解这是什么意思,但这没有任何意义。因为我的simulink文件中已经有两个输出块和作用域。

enter image description here

该错误的原因可能是什么?

这是我的“错误”代码:

[tout,yout]=sim("TP_sub.slx") 

3 个答案:

答案 0 :(得分:1)

您的simulink模型没有问题,问题在于您如何调用sim函数。如果您查看docs,就会发现sim仅返回一个输出:

simOut = sim(modelname)

在早期版本的Matlab中,可以将状态和输出添加为其他输出参数,但是当前您只能输出simOut对象。 该simOut对象将包含一些信息,但默认情况下将不包含仿真时间和模型输出。

您可以通过向sim调用中添加其他参数(完整列表here)来获取此数据。例如,使用'vdp'模型,

mdl = 'vdp';
load_system(mdl); 
simOut = sim(mdl,  'SaveOutput','on','OutputSaveName','yout', 'SaveTime', 'on')

您将获得

simOut = 
  Simulink.SimulationOutput:

                   tout: [64x1 double] 
                   yout: [64x2 double] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

从中可以获得仿真时间,通过

输出1和2
t = simOut.tout;
y1 = simOut.yout(:,1);
y1 = simOut.yout(:,2);

在工作空间中获取数据的另一种方法是添加To Workspace块,就像您已经在做的那样。

答案 1 :(得分:0)

  

我理解这是什么意思,但这没有任何意义。

     

该错误的原因可能是什么?

很显然,您不知道以下示例中的ab可能会完全不同

[x,y] = myFunction(someValue)
a = [x,y]

b = myFunction(someValue)

至少如果函数myFunction是“ mex函数”(并且大多数与Simulink相关的函数都是!),则可以用完全不同的方式定义函数myFunction返回值取决于给定的返回值数量:

[x,y]=myFunction(someValue)可能返回两个10x20矩阵,而b=myFunction(someValue)可能会返回一个数字(1x1矩阵)。

您不能仅仅使用[x,y]=someFunction(someValue)将函数someFunction返回的单个值“拆分”为两部分!

sim函数返回一个值。

答案 2 :(得分:0)

感谢您的评论。但是实际上有可能从sim函数获得多个输出。您只需更改“模型配置设置>数据导入/导出窗格并取消选中单个模拟”