TIA SCL Werte auf 0 schreiben

Teebow

Level-2
Beiträge
44
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe das Problem, dass ich in meinem Code bestimmte Werte auf 0 schreiben kann und manche nicht:

Code:
//Zyklusmessung Prüfstand

IF "Prf_Ablauf_DB".SchleichVerschiebeTimer THEN
    "Visu".Schleich_Zyklus_War := #SchleichZyklusIstInt;
END_IF;


"R_TRIG_DB"(CLK := "Prf_Ablauf_DB".SchleichVerschiebeTimer OR "Prf_Ablauf_DB".SchleichResetTimer,
            Q => #ResetScheichZyklusTimer);


#SchleichZyklusTimer.TONR(IN := "iSchleich_Prueft",
                          PT := t#3600s,
                          R := #ResetScheichZyklusTimer,
                          ET => #SchleichZyklusIstTime);


#SchleichZyklusIstInt := TIME_TO_INT(#SchleichZyklusIstTime / 1000);


//Zyklusmessung Wagen in Prüfzelle
IF "Prf_Ablauf_DB".WagenVerschiebeTimer THEN
    "Visu".Wagen_Zyklus_War := #WagenZyklusIstInt;
END_IF;


"F_TRIG_DB"(CLK := "Prf_Ablauf_DB".WagenVerschiebeTimer,
            Q => #ResetZyklusWagenTimer);


#WagenZyklusTimer.TONR(IN := "M_Prf_Start",
                       PT := t#3600s,
                       R := #ResetZyklusWagenTimer,
                       ET => #WagenZyklusIstTime);


#WagenZyklusIstInt := TIME_TO_INT(#WagenZyklusIstTime / 1000);


//Ermittlung minimale Prüfzeit und maximale Prüfzeit und dem Schnitt
//Prüfstand
"Visu".Schleich_Zyklus_Min := MIN(IN1 := "Visu".Schleich_Zyklus_Min,
                                  IN2 := "Visu".Schleich_Zyklus_War);


"Visu".Schleich_Zyklus_Max := MAX(IN1 := "Visu".Schleich_Zyklus_Max,
                                  IN2 := "Visu".Schleich_Zyklus_War);


IF "Visu".Schleich_Zyklus_Min = 0 THEN
    "Visu".Schleich_Zyklus_Min := "Visu".Schleich_Zyklus_War;
END_IF;


"Visu".Schleich_Zyklus_Schnitt := (("Visu".Schleich_Zyklus_Min + "Visu".Schleich_Zyklus_Max) / 2);


//Prüfzelle
"Visu".Wagen_Zyklus_Min := MIN(IN1 := "Visu".Wagen_Zyklus_Min,
                               IN2 := "Visu".Wagen_Zyklus_War);


"Visu".Wagen_Zyklus_Max := MAX(IN1 := "Visu".Wagen_Zyklus_Max,
                               IN2 := "Visu".Wagen_Zyklus_War);


IF "Visu".Wagen_Zyklus_Min = 0 THEN
    "Visu".Wagen_Zyklus_Min := "Visu".Wagen_Zyklus_War;
END_IF;


"Visu".Wagen_Zyklus_Stunde := (3600 / (("Visu".Wagen_Zyklus_Min + "Visu".Wagen_Zyklus_Max) / 2));


IF "Visu".ResetWerte THEN
    "Visu".Schleich_Zyklus_War := 0;
    "Visu".Schleich_Zyklus_Min := 0;
    "Visu".Schleich_Zyklus_Max := 0;
    "Visu".Schleich_Zyklus_Schnitt := 0;
    "Visu".Wagen_Zyklus_War := 0;
    "Visu".Wagen_Zyklus_Min := 0;
    "Visu".Wagen_Zyklus_Max := 0;
    "Visu".Wagen_Zyklus_Stunde := 0;
    "Visu".ResetWerte := false;
END_IF;

"Visu".Wagen_Zyklus_War := 0;
"Visu".Wagen_Zyklus_Min := 0;
"Visu".Wagen_Zyklus_Max := 0;
"Visu".Wagen_Zyklus_Stunde := 0;

Eigentlich sollten diese Werte auch auf 0 geschrieben werden aber sie behalten ihren aktuellen Wert bei. Hat da einer ne Idee?

MfG, Teebow
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hatte gehofft das wenn ich die Werte ganz unten im Code auf Null schreibe, sie im Zyklus auch als letztes bearbeitet werden.
Zu dem Zeitpunkt wo man den Visu.ResetWerte betätigt steht die Anlage still und die Zähler sind auch zurück gesetzt und nicht aktiv.
 
Ja, aber der Reset wird nur für einen Zyklus ausgeführt, da du ihn sofort wieder zurück setzt.
Und im nächsten Zyklus sofort wieder beschrieben.
Code:
IF [COLOR=#ff0000]"Visu".ResetWerte[/COLOR] THEN
    "Visu".Schleich_Zyklus_War := 0;
    "Visu".Schleich_Zyklus_Min := 0;
    "Visu".Schleich_Zyklus_Max := 0;
    "Visu".Schleich_Zyklus_Schnitt := 0;
    "Visu".Wagen_Zyklus_War := 0;
    "Visu".Wagen_Zyklus_Min := 0;
    "Visu".Wagen_Zyklus_Max := 0;
    "Visu".Wagen_Zyklus_Stunde := 0;
    [COLOR=#ff0000]"Visu".ResetWerte := false;[/COLOR]
END_IF;
 
Aber es kann höchsten mit 0 beschrieben werden weil die Zähler danach immer noch nicht zählen.
Bei allen Visu.Schleich_...... funktioniert es nämlich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber hier:
Visu".Schleich_Zyklus_War := #SchleichZyklusIstInt;

Schreibst Du z.B. ganz am Anfang...

Kann es sonst sein, dass die z. B. über ein Skript im HMI automatisch geschrieben werden? Das HMI hält sich nicht an SPS Zyklen.
 
Ich habe es jetzt so gelöst, dass ganz oben eine IF NOT Verknüpfung ist die nach ganz unten durch geht.
So habe ich quasi alles darin deaktiviert wenn ich Visu.ResetWerte drücke.
(am TP habe ich dann "Setze Bit während Taste gedrückt" eingestellt)
 
Zurück
Oben