我需要一个非常简单的Matlab函数的帮助

我需要一个非常简单的Matlab函数的帮助,matlab,function,arduino,simulink,Matlab,Function,Arduino,Simulink,图中显示了我的Simulink模型的一部分 它的工作原理如下: 数据是从串行端口发送的数据。当我开始工作时 模拟,如果有数据发送,数据具有它的值。什么时候 没有发送任何数据,数据发送0作为输出 状态在serialport上有数据时为1,在serialport上有数据时为0 没有发送任何数据 我希望它做的是:“如果serialport中有任何数据,请给出 y已发送数据的值。如果未发送数据,则保留,y作为 以前的值” 因此,我添加了自己的用户定义函数 function y = fcn(u,x)

图中显示了我的Simulink模型的一部分

它的工作原理如下:

  • 数据
    是从串行端口发送的数据。当我开始工作时 模拟,如果有数据发送,
    数据
    具有它的值。什么时候 没有发送任何数据,
    数据
    发送0作为输出

  • 状态
    在serialport上有数据时为1,在serialport上有数据时为0 没有发送任何数据

  • 我希望它做的是:“如果serialport中有任何数据,请给出
    y
    已发送数据的值。如果未发送数据,则保留,
    y
    作为 以前的值”

因此,我添加了自己的用户定义函数

function y = fcn(u,x)
   if (x == 0)
      y = y;
   else
      y = u;
   end 
end
但是这给了我一个错误,说
y
没有定义。
我如何实现这个简单的解决方案,有没有任何用户定义的功能?有人能帮我弄清楚吗?提前感谢。

编辑:如另一条评论所述,“不相等”实际上是“~=”

在我看来,函数定义中缺少括号:

function [y] = fcn(u,x)
if (x == 0)
    y = y;
else
    y = u;
end 
end
它的微调,但我认为可以做得更漂亮一点。 这是我未经测试的版本:

function [y] = fcn(u,x)
//% "!=" means "not equal"
//% So when x isn't 0 the amount of u is added to y
if (x != 0)
    y = u;
end 
end

与编写此函数不同,我将使用一个启用的子系统,该子系统具有库中的默认设置(其中没有块)。启用为零时,输出保持不变。

您认为需要将
y
也传递到函数中-
函数y=fcn(u,x,y)
我还没有想到这一点。非常感谢,我会让你知道它是否有效。在matlab中,“不相等”是“~=”。我会尝试使用括号让你知道。只有一个输出时不需要ThanksBackets。(问题如其他答案所述。)