-> Hier kostenlos registrieren
Habe bisher eher mit Step7 zu tun, kleinere Sachen mit Beckhoff.
Nun soll aber unser komplettes S7-Programm auf Beckhoff umgestellt werden.
Ich bin schon mal damit angefangen einzelne Bausteine umzustellen und hätte nun gerne gewusst was ich in nachfolgendem Programmm besser / anders machen könnte/sollte.
Wäre für jede Anregung dankbar!
Es handelt sich hier um insgesamt 5 Stückzähler, 4 werden über 1 Signal gezählt und können einzeln zurück gesetzt werden. Zähler 5 wird immer nur um 1 hochgezählt.
Nun soll aber unser komplettes S7-Programm auf Beckhoff umgestellt werden.
Ich bin schon mal damit angefangen einzelne Bausteine umzustellen und hätte nun gerne gewusst was ich in nachfolgendem Programmm besser / anders machen könnte/sollte.
Wäre für jede Anregung dankbar!
Es handelt sich hier um insgesamt 5 Stückzähler, 4 werden über 1 Signal gezählt und können einzeln zurück gesetzt werden. Zähler 5 wird immer nur um 1 hochgezählt.
Code:
FUNCTION_BLOCK FB46_Stueckzaehler
VAR_INPUT
Impuls:BOOL;
Presse_UT:BOOL;
Freigabe_Zaehler_Kiste:BOOL;
Freigabe_Zaehler_Auftrag:BOOL;
Freigabe_Zaehler_Schicht:BOOL;
Freigabe_Zaehler_Gesamt:BOOL;
END_VAR
VAR_OUTPUT
Stueckzahl_erreicht:BOOL;
END_VAR
VAR
FLK_1:R_TRIG;
FLK_2:R_TRIG;
Zaehler: INT;
END_VAR
FLK_1(CLK:=Impuls, Q=> );
FLK_2(CLK:=Presse_UT, Q=> );
IF FLK_1.Q=TRUE THEN
(*Stückzähler Kiste*)
IF Freigabe_Zaehler_Kiste THEN
FB46_Stueckzaehler_Ist[1]:=FB46_Stueckzaehler_Ist[1]+FB46_Stueckzaehler_Teile_pro_Hub;
END_IF
(*Stückzähler Auftrag*)
IF Freigabe_Zaehler_Auftrag THEN
FB46_Stueckzaehler_Ist[2]:=FB46_Stueckzaehler_Ist[2]+FB46_Stueckzaehler_Teile_pro_Hub;
END_IF
(*Stückzähler Schicht*)
IF Freigabe_Zaehler_Schicht THEN
FB46_Stueckzaehler_Ist[3]:=FB46_Stueckzaehler_Ist[3]+FB46_Stueckzaehler_Teile_pro_Hub;
END_IF
(*Stückzähler Gesamt*)
IF Freigabe_Zaehler_Gesamt THEN
FB46_Stueckzaehler_Ist[4]:=FB46_Stueckzaehler_Ist[4]+FB46_Stueckzaehler_Teile_pro_Hub;
END_IF
END_IF
(*Stückzähler Gesamthubzahl*)
IF FLK_2.Q=TRUE THEN
FB46_Stueckzaehler_Ist[5]:=FB46_Stueckzaehler_Ist[5]+1;
END_IF
(*Stückzahl erreicht*)
IF (FB46_Stueckzaehler_Ist[1]>=FB46_Stueckzaehler_Soll[1]) OR
(FB46_Stueckzaehler_Ist[2]>=FB46_Stueckzaehler_Soll[2]) THEN
Stueckzahl_erreicht:=TRUE;
END_IF
(*Stückzähler zurücksetzen*)
FOR Zaehler:=1 TO 4 DO
IF FB46_Stueckzaehler_null[Zaehler]=TRUE THEN
FB46_Stueckzaehler_Ist[Zaehler]:=0;
END_IF
END_FOR;