Simulink:如何在Matlab函数中使用全局数组



我正在尝试为温度传感器数据创建一个移动平均窗口。

我遵循了:如何为包含matlab函数的simulink声明全局变量?和https://www.mathworks.com/help/simulink/ug/using-global-data-with-the-matlab-function-block.html

它解释了如何对单个变量进行此操作,即(a=5,我可以使用a(

如何对可以编辑其值的全局数组/向量执行此操作?

简单地进行

function y = fcn(u)
global A
A = [];
A(end+1)=u;
y = sum(A)/length(A)+10;

不起作用。

每次调用函数时,都会重新初始化全局A变量。改为:

function y = fcn(u)
global A
A(end+1)=u;
y = sum(A)/length(A)+10;

(当然,如果您将其作为Simulink操作的一部分使用,则需要添加逻辑以防止数组增长过快。我假设您生成了一个最小的示例来解决问题。(


在许多情况下,一种改进是使用persistent而不是global。持久变量保留在对一个函数的多次调用之间,但对任何其他函数都不可用。这样可以防止对变量进行意外更改。(特别是如果您的操作代码使用名为"a"的变量。(

function y = fcn(u)
persistent A
A(end+1)=u;
y = sum(A)/length(A)+10;

使用globalpersistent变量的一种更通用的方法是进行isempty检查,以查看是否需要初始化。像这样:

function y = fcn(u)
persistent A
if isempty(A)
A = 0;  %Or whatever the appropriate initial value is. An empty array is the default.
end
A(end+1)=u;
y = sum(A)/length(A)+10;

相关内容

  • 没有找到相关文章