2017-11-24 2 views
1

In einem MATLAB-Funktionsbaustein in Simulink ist es möglich, eine persistente Variable zu implementieren. Aber wie würde jemand vorgehen, dasselbe zu implementieren, ohne den MATLAB-Funktionsblock oder einen ähnlichen Scripting-Ansatz? Mit anderen Worten, ist es möglich, das Verhalten der persistenten Variablen in Simulink mit einfachen/elementaren Blöcken (ohne externe Toolbox) zu replizieren?Wie implementieren Sie das Äquivalent einer persistenten Variablen in Simulink?

function y = fcn(u) 
%#codegen 
persistent n; 
if isempty(n) %%initialize persistent variable 
    n = 1; 
end 
if u == 4 || n == 1 
    y = 0; 
    n = 2; 
elseif n == 2 
    if ... 
     n = 1; 
    else ... 
     n = 3; 
    end 
else 
    n = -1; 
end 
+1

Persistent-Speicher, wie dies entspricht einer [Unit Verzögerung] (https://www.mathworks.com/help/simulink/slref/unitdelay.html). In Ihrem Beispiel ist die Anfangsbedingung "1", der Blockausgang ist das _old_ 'n' und die Logik in Ihrem Code wird verwendet, um das (Einheitsverzögerungs-) Blockeingangssignal zu berechnen, welches das _new_' n' ist. –

Antwort

1

Sie können einen Data Store Memory Block verwenden, um eine persistente Variable zu simulieren.

Da persistente Variablen ihren Wert über Funktionsaufrufe hinweg beibehalten, aber nur innerhalb dieser Funktion aufgerufen werden können, können Sie ein Simulink-Subsystem (repräsentiert Ihre Funktion) einrichten, das einen Data Store Memory-Block enthält (repräsentiert Ihre persistente Variable).

Verwandte Themen