我收到有关 simulink "Output argument is not assigned on some execution paths" 的错误消息



在simulink中,我使用"MATLAB函数"块制作了一些模型但我在这里遇到了错误消息。

这是代码和错误消息

function [VTAS,postVTAS]=fcn(mode,initialVTAS,a,t,preVTAS)
if mode == 1
     VTAS = initialVTAS + (a * t) ;
     postVTAS = VTAS;
 elseif mode == 2
     datasize = length(preVTAS);
     lastvalue = preVTAS(datasize);
     VTAS = lastvalue + 0;
     postVTAS = VTAS;
 end
 end

未在某些执行路径上分配输出参数"VTAS"。

函数"MATLAB函数"(#36.25.28),第1行,第26列:

"fcn"

启动诊断报告

我认为输出"VTAS"没有问题

请教我什么是问题。

正如编译器告诉的那样,在某些情况下,不会将输出值分配给VTAS。原因是只有当模式为1或2时,才能为该输出指定值。编译器不知道mode的哪些值是可行的。要解决此问题,您需要确保在任何情况下都分配了VTAS。

这可以通过添加其他构造来实现,例如:

function [VTAS,postVTAS]=fcn(mode,initialVTAS,a,t,preVTAS)
if mode == 1
    VTAS = initialVTAS + (a * t) ;
    postVTAS = VTAS;
elseif mode == 2
    datasize = length(preVTAS);
    lastvalue = preVTAS(datasize);
    VTAS = lastvalue + 0;
    postVTAS = VTAS;
else
    VTAS     = NaN;
    postVTAS = NaN;
end
end

编辑:

此外,对于else情况,抛出错误也是一种很好的做法。这将有助于调试。

需要注意的是,对于每种情况,postVTAS都等于VTAS,因此从函数返回两者本质上是多余的。

最新更新