【问题标题】:Error "Too many return arguments are specified. Specify only one."错误“指定了太多返回参数。只指定一个。”
【发布时间】:2019-12-08 11:02:40
【问题描述】:

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

我明白它的意思,但它没有任何意义。因为我的 simulink 文件中已经有两个输出块和范围。

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

这是我的“错误”代码:

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

【问题讨论】:

  • 请不要只给问题标题“Matlab/Simulink”,而是选择一个或多或少是您问题摘要的问题标题。

标签: matlab simulink


【解决方案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 块,就像您已经在做的那样。

【讨论】:

    【解决方案2】:

    我明白它的意思,但它没有任何意义。

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

    显然您不知道以下示例中的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 函数返回一个值。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-24
        相关资源
        最近更新 更多