BloodyMary
Level-2
- Beiträge
- 32
- Reaktionspunkte
- 5
-> Hier kostenlos registrieren
Ich versuche mit gerade an einer Schrittkette in SCL. Leider habe ich das Problem, dass in den aufgerufenen einzelnen Schrittbausteinen die Zeit nicht aktuallisiert wird.
Testweise habe ich einen Datenbaustein angelegt, wo ich vier Zeiten speichern kann.
Wenn ich nun das erste mal Werte in die Zeiten eintrage, z.B. für alle t#5s. Dann wird die Zeit von 5s für alle Schritte übernommen. Wenn ich jetzt aber den Automatikbetrieb ausschalte und die Werte im Datenbaustein überschreibe mit t#6s, dann wird beim nächsten Aufruf der einzelnen Schritte die Zeit aus dem Datenbaustein NICHT übernommen und er arbeitet weiter mit dem 5s.
So langsam bin ich mit meinem Latein am Ende und hoffe auf euer Schwarmwissen.
Automatik_FB:
Rezeptschritt-FB:
Testweise habe ich einen Datenbaustein angelegt, wo ich vier Zeiten speichern kann.
Wenn ich nun das erste mal Werte in die Zeiten eintrage, z.B. für alle t#5s. Dann wird die Zeit von 5s für alle Schritte übernommen. Wenn ich jetzt aber den Automatikbetrieb ausschalte und die Werte im Datenbaustein überschreibe mit t#6s, dann wird beim nächsten Aufruf der einzelnen Schritte die Zeit aus dem Datenbaustein NICHT übernommen und er arbeitet weiter mit dem 5s.
So langsam bin ich mit meinem Latein am Ende und hoffe auf euer Schwarmwissen.
Automatik_FB:
Code:
#R_TRIG_Anwahl_Automatik(CLK := "UC20_PAE_DB".Hand_Auto);
#F_TRIG_Anwahl_Manuell(CLK := "UC20_PAE_DB".Hand_Auto);
IF "UC20_PAE_DB".Hand_Auto AND #R_TRIG_Automatik_Start.Q THEN
#Schrittkette_Aktiv := TRUE;
#Aktiver_Schritt := 0;
#Schritt_aktiv_0 := TRUE;
ELSIF #F_TRIG_Anwahl_Manuell.Q THEN
#Schrittkette_Aktiv := FALSE;
#Aktiver_Schritt := 0;
END_IF;
#R_TRIG_Schritt_aktiv_1(CLK := #Schritt_aktiv_1);
#R_TRIG_Schritt_aktiv_2(CLK := #Schritt_aktiv_2);
#R_TRIG_Schritt_aktiv_3(CLK := #Schritt_aktiv_3);
#R_TRIG_Schritt_aktiv_4(CLK := #Schritt_aktiv_4);
#R_TRIG_Schritt_aktiv_5(CLK := #Schritt_aktiv_5);
// Start- / Stop-Taster
#R_TRIG_Automatik_Start(CLK := "UC20_PAE_DB".Automatik_Start);
#R_TRIG_Automatik_Stop(CLK := "UC20_PAE_DB".Automatik_Stop);
IF #Schrittkette_Aktiv THEN
CASE #Aktiver_Schritt OF
0:
#Rezeptschritt_0(Schritt_aktiv:=#Schritt_aktiv_0,
Nächster_aktiv:=#Schritt_aktiv_1,
Schrittnummer:=#Aktiver_Schritt);
1:
#Rezeptschritt_1(Timer_In := #Schrittkette_Aktiv,
Timer_R := #R_TRIG_Schritt_aktiv_1.Q,
schrittzeit_time:="DB".Zeit1,
Schritt_aktiv:=#Schritt_aktiv_1,
Nächster_aktiv:=#Schritt_aktiv_2,
Schrittnummer:=#Aktiver_Schritt);
2:
#Rezeptschritt_2(Timer_In := #Schrittkette_Aktiv,
Timer_R := #R_TRIG_Schritt_aktiv_2.Q,
schrittzeit_time:="DB".Zeit2,
Schritt_aktiv:=#Schritt_aktiv_2,
Nächster_aktiv:=#Schritt_aktiv_3,
Schrittnummer:=#Aktiver_Schritt);
3:
#Rezeptschritt_3(Timer_In := #Schrittkette_Aktiv,
Timer_R := #R_TRIG_Schritt_aktiv_3.Q,
schrittzeit_time:="DB".Zeit3,
Schritt_aktiv:=#Schritt_aktiv_3,
Nächster_aktiv:=#Schritt_aktiv_4,
Schrittnummer:=#Aktiver_Schritt);
4:
#Rezeptschritt_4(Timer_In := #Schrittkette_Aktiv,
Timer_R := #R_TRIG_Schritt_aktiv_4.Q,
schrittzeit_time:="DB".Zeit4,
Schritt_aktiv:=#Schritt_aktiv_4,
Nächster_aktiv:=#Schritt_aktiv_5,
Schrittnummer:=#Aktiver_Schritt);
5:
#Rezeptschritt_5(Timer_In := #Schrittkette_Aktiv,
Timer_R := #R_TRIG_Schritt_aktiv_5.Q,
Schritt_aktiv:=#Schritt_aktiv_5,
Nächster_aktiv:=#Schritt_aktiv_6,
Schrittnummer:=#Aktiver_Schritt);
END_CASE;
END_IF;
IF #R_TRIG_Anwahl_Automatik.Q OR #F_TRIG_Anwahl_Manuell.Q THEN
#Aktiver_Schritt := 0;
#Rezept_Fertig := FALSE;
#Initialisieren := TRUE;
#Initialisieren_Fertig := FALSE;
#Schritt_aktiv_0 := FALSE;
#Schritt_aktiv_1 := FALSE;
#Schritt_aktiv_2 := FALSE;
#Schritt_aktiv_3 := FALSE;
#Schritt_aktiv_4 := FALSE;
#Schritt_aktiv_5 := FALSE;
#Schritt_aktiv_6 := FALSE;
#Schritt_aktiv_7 := FALSE;
#Schritt_aktiv_8 := FALSE;
#Schritt_aktiv_9 := FALSE;
#Schritt_aktiv_10 := FALSE;
#Schritt_aktiv_11 := FALSE;
#Schritt_aktiv_12 := FALSE;
#Schritt_aktiv_13 := FALSE;
#Schritt_aktiv_14 := FALSE;
#Schritt_aktiv_15 := FALSE;
#Schritt_aktiv_16 := FALSE;
#Schritt_aktiv_17 := FALSE;
#Schritt_aktiv_18 := FALSE;
#Schritt_aktiv_19 := FALSE;
#Schritt_aktiv_20 := FALSE;
#Schritt_aktiv_21 := FALSE;
#Schritt_aktiv_22 := FALSE;
#Schritt_aktiv_23 := FALSE;
END_IF;
Rezeptschritt-FB:
Code:
#Timer_PT := DINT_TO_TIME(IN := INT_TO_DINT(IN := #i_Schrittdaten_Soll.Mischzeit) * 1000);
#Schrittzeit(IN := #Timer_In,
R := #Timer_R,
PT := #schrittzeit_time,
Q => #Schrittzeit_abgelaufen,
ET => #Abgelaufene_Zeit);
IF #Schrittzeit.Q OR #Schrittnummer = 0 THEN
#Schritt_Fertig := TRUE;
#Nächster_aktiv := TRUE;
#Schritt_aktiv := FALSE;
#test := FALSE;
#Schrittnummer := #Schrittnummer + 1;
ELSE
#Schritt_aktiv := TRUE;
#Nächster_aktiv := FALSE;
#Schritt_Fertig := FALSE;
END_IF;