Step 7 Vergleichen von Variablen zu verschiedenen Zeitschritten

Leolazer

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

in meinem Programm möchte ich gerne den Zeitpunkt erfassen, an dem meine Temperatur stationär ist und dann zum nächsten Schritt übergehen.
Dabei war meine Überlegung meinen Istwert der Temperatur zum Zeitpunkt jetzt mit dem Istwert der Temperatur vor einer Minute zu vergleichen und eine maximale Abweichung zu definieren. Sobald diese Transitions-Bedingung erfüllt ist wird der nächste Schritt ausgeführt.
Leider habe ich bisher noch nichts zu diesem Thema gefunden:cry:
Könnte ich z.B. einen Merker setzen, der den Istwert der Temperatur zu jedem Zeitpunkt t-1 speichert und sobald dieser Wert dem Istwert zum Zeitpunkt t entspricht kann zum nächsten Schritt weitergeleitet werden?
Hat jemand schon etwas ähnliches programmiert und kann mir dabei weiterhelfen?
Ich arbeite derzeit mit FUP in der SPS.

MFG:)
 
Zuletzt bearbeitet:
MOVE - Bausteine werden Dir helfen.
Mit Move kannst Du den Temperaturwert abhängig in ein Merkerwort kopieren.
Deer Rest ist dann natürlich das Timing und der Vergleich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, ich habe mir das mal angeschaut, das sieht schon mal nicht schlecht aus! Weisst du auch, wie ich dann den Istwert der Temperatur immer zum Zeitpunkt von vor 1 Minute speichern kann? Kann der Merker z.B. seine Werte immer nur in einem Zyklus von einer Minute speichern?
 
Du baust dir einen Merker, der jede Minute für einen Zyklus gesetzt ist.

Ich mach das über Abfrage der Echtzeituhr (SFC1) und nutze dabei die Identität von temporären Variablen und Lokalmerkern.
Code:
FUNCTION "FCZeitimpulse" : VOID
TITLE = Zeitimpulse synchron mit Echtzeituhr


VAR_TEMP
 tDAT : DATE_AND_TIME ; //Abfrage über LocalBytes LB 0-7
 ti1 : INT ;
END_VAR

BEGIN
NETWORK
TITLE =Systemzeit lesen

CALL "READ_CLK" ( RET_VAL := #ti1, CDT := #tDAT);



NETWORK
TITLE =Impuls100mS

 U L 6.4; 
 X "Blink100mS";  //100mS=0 ,100mS=1
 = "Impuls100mS"; //Impulslänge 1 Zyklus

 U L 6.4;
 = "Blink100mS"; 




NETWORK
TITLE =Sekundenimpuls

 U L 5.0; 
 X "Blink1Sek"; 
 = "Impuls1Sek"; //Impulslänge 1 Zyklus

 U L 5.0;
 = "Blink1Sek"; 


 
NETWORK
TITLE =Minutenimpuls

 U L 4.0; 
  X "Blink1Min"; // gerade Minuten =0 ungerade=1
  = "Impuls1Min"; //Impulslänge 1 Zyklus
 
  U L 4.0;
 = "Blink1Min";


END_FUNCTION
 
Zurück
Oben