2016-09-06 10 views
0

Ich versuche initialisieren eine benutzerdefinierte Funktion zu machen, ist Simulink die Wie eine Variable in einer benutzerdefinierten MATLAB-Funktion (Simulink)

so etwas wie diese

function [minTR,maxTR,out] = Temperature(u) 
    [minTR] = min(u); 
    [maxTR] = max(u); 
    if((maxTR - minTR > 1.5)) 
     out = 1; 
    else 
     out = 0; 
    end 
    end 
sieht Wo u eine für jede Abtastzeit 1200x1 Array , jetzt ist das Problem, ich will ist, wenn diese Bedingung if((maxTR - minTR > 1.5)) gilt, will ich die out bleiben 1, bis der Unterschied zwischen Maximum und Minimum weniger als sagen wir 0,7, mein Plan war, eine flag setzen, die ich in der Bedingung zu setzen würde werde 1, so wird mein anderer Code ungefähr so ​​aussehen:

else if((maxTR - minTR < 1.5) && flag == 0) 
     out = 0; 
    end 

aber das Problem ist die Initialisierung, ich muss dieses Flag einmal initialisieren, aber simulink führe diese ganze Funktion für jede Abtastzeit aus und das Flag würde immer wieder reinitialisiert werden, weiß jemand was ich tun kann, um das zu erreichen?

+0

Was Sie tun, ist ein Vergleich und Hysterese in Serie. Verwenden Sie bereitgestellte Blöcke. – percusse

Antwort

0

Als percusse in den Kommentaren erwähnt, sollten Sie in bereits bestehende Blöcke (Vergleich + Hysterese) in der Simulink-Bibliothek suchen.

Im Allgemeinen konnte die Initialisierung von Variablen in Matlab/Simulink mit persistent Variablen gelöst werden.

persistent flag 

% If first run. Initialize flag. 
if isempty(flag) 
    flag = false; 
end 

Eine Alternative ist, in einem Ausgangssignal von vorherigen Abtastperiode zu nehmen, indem die delay block verwendet, die mit einem Wert initialisiert werden können.