【发布时间】:2019-12-08 11:02:40
【问题描述】:
我收到此错误“指定的返回参数过多。仅指定一个。”
我明白它的意思,但它没有任何意义。因为我的 simulink 文件中已经有两个输出块和范围。
此错误的原因可能是什么?
这是我的“错误”代码:
[tout,yout]=sim("TP_sub.slx")
【问题讨论】:
-
请不要只给问题标题“Matlab/Simulink”,而是选择一个或多或少是您问题摘要的问题标题。
我收到此错误“指定的返回参数过多。仅指定一个。”
我明白它的意思,但它没有任何意义。因为我的 simulink 文件中已经有两个输出块和范围。
此错误的原因可能是什么?
这是我的“错误”代码:
[tout,yout]=sim("TP_sub.slx")
【问题讨论】:
你的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 块,就像您已经在做的那样。
【讨论】:
我明白它的意思,但它没有任何意义。
此错误的原因可能是什么?
显然您不知道以下示例中的a 和b 可能完全不同:
[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 函数返回一个值。
【讨论】:
感谢您的评论。但实际上它有可能从 sim function 获得多个输出。您只需更改“模型配置设置 > 数据导入/导出窗格并取消选中单个模拟”
【讨论】: