DATA_BLOCK "OB1_Daten" TITLE = VERSION : 0.1 STRUCT SK1_Schritt_Nr : INT ; SK2_Schritt_Nr : INT ; SK3_Schritt_Nr : INT ; SK3_Schritt_Nr_2 : INT ; Schiebereg_Fuellstand : INT ; END_STRUCT ; BEGIN SK1_Schritt_Nr := 0; SK2_Schritt_Nr := 0; SK3_Schritt_Nr := 0; SK3_Schritt_Nr_2 := 0; Schiebereg_Fuellstand := 0; END_DATA_BLOCK FUNCTION_BLOCK "Schieberegister" TITLE =Schieberegister (FIFO) für 5 Elemente VERSION : 0.1 VAR_INPUT Dicke_Eingang : WORD ; Farbe_Eingang : BOOL ; Einschieben : BOOL ; Ausschieben : BOOL ; reset : BOOL ; END_VAR VAR_OUTPUT Anzahl_Teile : INT ; Farbe_Ausgang : BOOL ; Dicke_Ausgang : WORD ; END_VAR VAR Fuellstand : WORD ; FM_Einschieben : BOOL ; FM_Ausschieben : BOOL ; Dicke_0 : WORD ; Farbe_0 : BOOL ; Dicke_1 : WORD ; Farbe_1 : BOOL ; Dicke_2 : WORD ; Farbe_2 : BOOL ; Dicke_3 : WORD ; Farbe_3 : BOOL ; Dicke_4 : WORD ; Farbe_4 : BOOL ; END_VAR VAR_TEMP Zaehler : INT ; END_VAR BEGIN NETWORK TITLE =Element einfügen U #Einschieben; FP #FM_Einschieben; SPBN Eend; L #Fuellstand; L 5; >=I ; //Sicherheitsabfrage: Überlauf SPB Eend; L #Fuellstand; //Überprüfung ob Schreibpuffer leer L 0; ==I ; SPB Schr; //Schreiben L #Fuellstand; next: T #Zaehler; L 1; //Schreibindex errechnen -D ; L P#4.0; //Mit dem Abstand der Elemente multiplizieren *D ; L P##Dicke_0; //Zeiger auf erstes Element +D ; //Elementoffset addieren LAR1 ; //Zeigerregister AR1 laden U [AR1,P#2.0]; //Position von Farbe im Register = [AR1,P#6.0]; //Position nächste Farbe im Register L W [AR1,P#0.0]; //Position Dicke im Register T W [AR1,P#4.0]; //Position nächste Dicke im Register L #Zaehler; LOOP next; //LOOP (AKKU-1, weiter bis AKKU=0) Schr: U #Farbe_Eingang; //Eingangselement abspeichern = #Farbe_0; L #Dicke_Eingang; T #Dicke_0; L #Fuellstand; //Fuellstand um 1 erhöhen L 1; +I ; T #Fuellstand; Eend: NOP 0; NETWORK TITLE =Element entnehmen U #Ausschieben; FP #FM_Ausschieben; SPBN Aend; L #Fuellstand; L 0; <=I ; //Sicherheitsabfrage: Kein Element im Register SPB Aend; L #Fuellstand; L 1; -D ; L P#4.0; //Mit dem Abstand der Elemente multiplizieren *D ; L P##Dicke_0; //Zeiger auf erstes Element +D ; //Elementoffset addieren LAR1 ; //Zeigerregister AR1 laden U [AR1,P#2.0]; //Position von Farbe im Register = #Farbe_Ausgang; L W [AR1,P#0.0]; //Position Dicke im Register T #Dicke_Ausgang; CLR ; //Position im Register mit 0 überschreiben = [AR1,P#2.0]; L 0; T W [AR1,P#0.0]; L #Fuellstand; //Fuellstand um 1 erniedrigen L 1; -I ; T #Fuellstand; Aend: NOP 0; NETWORK TITLE =Reset: Alles löschen U #reset; //Reset liegt an? SPBN nrst; CLR ; L 0; T #Fuellstand; //Füllstand rücksetzen T #Dicke_Ausgang; //Dickenausgabe rücksetzen = #Farbe_Ausgang; //Farbenausgabe rücksetzen //Elle Elemente im Schieberegister löschen L 5; //Über jedes Element iterieren rloo: T #Zaehler; L 1; -D ; L P#4.0; //Mit Abstand der Elemente multiplizieren *D ; L P##Dicke_0; //Zeiger auf erstes Element +D ; //Elementoffset addieren LAR1 ; //Zeigerregister AR1 laden CLR ; //Element mit 0 überschreiben = [AR1,P#2.0]; L 0; T W [AR1,P#0.0]; L #Zaehler; LOOP rloo; //Nächstes Element nrst: NOP 0; NETWORK TITLE =Ausgangssignal: Anzahl Teile L #Fuellstand; //Füllstand ausgeben T #Anzahl_Teile; END_FUNCTION_BLOCK DATA_BLOCK "DB_Schiebereg_Band" TITLE = VERSION : 0.0 "Schieberegister" BEGIN Dicke_Eingang := W#16#0; Farbe_Eingang := FALSE; Einschieben := FALSE; Ausschieben := FALSE; reset := FALSE; Anzahl_Teile := 0; Farbe_Ausgang := FALSE; Dicke_Ausgang := W#16#0; Fuellstand := W#16#0; FM_Einschieben := FALSE; FM_Ausschieben := FALSE; Dicke_0 := W#16#0; Farbe_0 := FALSE; Dicke_1 := W#16#0; Farbe_1 := FALSE; Dicke_2 := W#16#0; Farbe_2 := FALSE; Dicke_3 := W#16#0; Farbe_3 := FALSE; Dicke_4 := W#16#0; Farbe_4 := FALSE; END_DATA_BLOCK FUNCTION_BLOCK "Eingaenge_Schrittkette_1" TITLE = VERSION : 0.1 VAR_OUTPUT T1_2 : BOOL ; T2_3 : BOOL ; T3_4 : BOOL ; T4_5 : BOOL ; T5_6 : BOOL ; T6_7 : BOOL ; T7_1 : BOOL ; T3_10 : BOOL ; T10_1 : BOOL ; END_VAR BEGIN NETWORK TITLE = U "1B3"; U "1S2"; U "1S2"; U "2B5"; = #T1_2; NETWORK TITLE = U "1B2"; = #T2_3; NETWORK TITLE = U "1S1"; = #T3_4; NETWORK TITLE = U "1S3"; UN "2B2"; = #T4_5; NETWORK TITLE = U "1B1"; U "2B5"; = #T5_6; NETWORK TITLE = U "1S2"; = #T6_7; NETWORK TITLE = U "2B2"; = #T7_1; NETWORK TITLE = U "T_zw_1B1_1S1"; = #T3_10; NETWORK TITLE =Magazinbefüllung quittieren U "Quit"; = #T10_1; END_FUNCTION_BLOCK DATA_BLOCK "DB_Transitionen_SK1" TITLE = VERSION : 0.0 "Eingaenge_Schrittkette_1" BEGIN T1_2 := FALSE; T2_3 := FALSE; T3_4 := FALSE; T4_5 := FALSE; T5_6 := FALSE; T6_7 := FALSE; T7_1 := FALSE; T3_10 := FALSE; T10_1 := FALSE; END_DATA_BLOCK FUNCTION_BLOCK "Ausgaenge_Schrittkette_1" TITLE = VERSION : 0.1 VAR_INPUT Schritt_Nr : INT ; Reset : BOOL ; Aktorfreigabe : BOOL ; Aktornummer : INT ; Aktor_vor : BOOL ; Aktor_zurueck : BOOL ; END_VAR VAR Merker1 : BOOL ; Merker2 : BOOL ; Merker3 : BOOL ; Merker4 : BOOL ; Merker5 : BOOL ; Merker6 : BOOL ; Merker7 : BOOL ; END_VAR BEGIN NETWORK TITLE =1Y1.10 = 1; Magazinschieber fährt nach hinten U( ; U( ; O( ; L 10; L #Schritt_Nr; ==I ; ) ; O( ; L #Schritt_Nr; L 1; ==I ; ) ; O( ; L #Schritt_Nr; L 6; ==I ; ) ; ) ; S #Merker1; U( ; O( ; L 2; L #Schritt_Nr; ==I ; ) ; O #Reset; ) ; R #Merker1; U #Merker1; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 101; ==I ; ) ; U #Aktor_zurueck; = "1Y1.10"; NETWORK TITLE =1Y1.11 = 1;Magazinschieber fährt nach vorne U( ; U( ; L #Schritt_Nr; L 2; ==I ; ) ; S #Merker2; U( ; O( ; L 10; L #Schritt_Nr; ==I ; ) ; O( ; L #Schritt_Nr; L 6; ==I ; ) ; O( ; L 1; L #Schritt_Nr; ==I ; ) ; O #Reset; ) ; R #Merker2; U #Merker2; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 101; ==I ; ) ; U #Aktor_vor; = "1Y1.11"; NETWORK TITLE =1Y2.10 = 1; Vakuum wird ausgeschaltet U( ; U( ; O( ; L 1; L #Schritt_Nr; ==I ; ) ; O( ; L 7; L #Schritt_Nr; ==I ; ) ; ) ; S #Merker3; U( ; O( ; L 5; L #Schritt_Nr; ==I ; ) ; O #Reset; ) ; R #Merker3; U #Merker3; ) ; U #Aktorfreigabe; O ; U #Aktor_zurueck; U( ; L #Aktornummer; L 102; ==I ; ) ; = "1Y2.10"; NETWORK TITLE =1Y2.11 = 1; Vakuum wird eingeschaltet U( ; U( ; L 5; L #Schritt_Nr; ==I ; ) ; S #Merker4; U( ; O( ; L 7; L #Schritt_Nr; ==I ; ) ; O( ; L 1; L #Schritt_Nr; ==I ; ) ; O #Reset; ) ; R #Merker4; U #Merker4; ) ; U #Aktorfreigabe; O ; U #Aktor_vor; U( ; L #Aktornummer; L 102; ==I ; ) ; = "1Y2.11"; NETWORK TITLE =1Y3.10 = 1; Rotor (Umsetzer) fährt in Stellung "Magazin" U( ; U( ; L 4; L #Schritt_Nr; ==I ; ) ; S #Merker5; U( ; O( ; L 6; L #Schritt_Nr; ==I ; ) ; O( ; L 1; L #Schritt_Nr; ==I ; ) ; O #Reset; ) ; R #Merker5; U #Merker5; ) ; U #Aktorfreigabe; O ; U #Aktor_zurueck; U( ; L #Aktornummer; L 103; ==I ; ) ; = "1Y3.10"; NETWORK TITLE =1Y3.11 = 1; Rotor (Umsetzer) fährt in Stellung "Prüfen" U( ; U( ; U( ; O( ; L 6; L #Schritt_Nr; ==I ; ) ; O( ; L 1; L #Schritt_Nr; ==I ; ) ; ) ; S #Merker6; U( ; O( ; L 4; L #Schritt_Nr; ==I ; ) ; O #Reset; ) ; R #Merker6; U #Merker6; ) ; U #Aktorfreigabe; O ; U #Aktor_vor; U( ; L #Aktornummer; L 103; ==I ; ) ; ) ; U "2B6"; = "1Y3.11"; NETWORK TITLE =Zeitunterschied zw. 1B1 und 1S1 U( ; L 3; L #Schritt_Nr; ==I ; ) ; L S5T#1S; SE "T_zw_1B1_1S1"; U( ; O( ; L 4; L #Schritt_Nr; ==I ; ) ; O #Reset; O( ; L 10; L #Schritt_Nr; ==I ; ) ; ) ; R "T_zw_1B1_1S1"; NOP 0; NOP 0; NOP 0; NETWORK TITLE =H_Mag_Leer = 1; Lampe Magazin leer L 10; L #Schritt_Nr; ==I ; = L 0.0; U L 0.0; BLD 102; = "H_Mag_Leer"; U L 0.0; U "Automatikbetrieb"; = "Hupe"; END_FUNCTION_BLOCK DATA_BLOCK "DB_Ausgänge_SK1" TITLE = VERSION : 0.0 "Ausgaenge_Schrittkette_1" BEGIN Schritt_Nr := 0; Reset := FALSE; Aktorfreigabe := FALSE; Aktornummer := 0; Aktor_vor := FALSE; Aktor_zurueck := FALSE; Merker1 := FALSE; Merker2 := FALSE; Merker3 := FALSE; Merker4 := FALSE; Merker5 := FALSE; Merker6 := FALSE; Merker7 := FALSE; END_DATA_BLOCK FUNCTION_BLOCK "Eingänge_Schrittkette_2" TITLE = VERSION : 0.1 VAR_INPUT fuellstand_schieberegist : INT ; END_VAR VAR_OUTPUT T1_2 : BOOL ; T2_3 : BOOL ; T3_4 : BOOL ; T4_5 : BOOL ; T5_6 : BOOL ; T6_7 : BOOL ; T7_1 : BOOL ; T1_9 : BOOL ; T9_10 : BOOL ; T10_1 : BOOL ; T4_11 : BOOL ; T11_12 : BOOL ; T12_13 : BOOL ; T13_7 : BOOL ; END_VAR BEGIN NETWORK TITLE =1Y3.10 = 1; Rotor (Umsetzer) fährt in Stellung "Magazin" U "1Y3.10"; UN "2B3"; U "2B2"; = #T1_2; NETWORK TITLE = U "2B7"; = #T2_3; NETWORK TITLE = U "T_Pruefen"; = #T3_4; NETWORK TITLE = UN "Erster_Zyklus"; U "4B6"; U( ; L #fuellstand_schieberegist; L 4; <=I ; ) ; UN "3B1"; = #T4_5; NETWORK TITLE = UN "T_Bandzeit"; U "2B4"; = #T5_6; NETWORK TITLE = U "1S3"; U "2B5"; = #T6_7; NETWORK TITLE = U "2B6"; = #T7_1; NETWORK TITLE = U "1S3"; U "2B3"; = #T1_9; NETWORK TITLE = U "2B4"; = #T9_10; NETWORK TITLE = U "2B5"; = #T10_1; NETWORK TITLE = U "Erster_Zyklus"; UN "3B1"; U( ; L #fuellstand_schieberegist; L 1; ==I ; ) ; U "4B6"; = #T4_11; NETWORK TITLE = U "2B4"; = #T11_12; NETWORK TITLE = U "3B1"; = #T12_13; NETWORK TITLE = U "1S3"; U "2B5"; = #T13_7; END_FUNCTION_BLOCK DATA_BLOCK "DB_Transitionen_SK2" TITLE = VERSION : 0.0 "Eingänge_Schrittkette_2" BEGIN fuellstand_schieberegist := 0; T1_2 := FALSE; T2_3 := FALSE; T3_4 := FALSE; T4_5 := FALSE; T5_6 := FALSE; T6_7 := FALSE; T7_1 := FALSE; T1_9 := FALSE; T9_10 := FALSE; T10_1 := FALSE; T4_11 := FALSE; T11_12 := FALSE; T12_13 := FALSE; T13_7 := FALSE; END_DATA_BLOCK FUNCTION_BLOCK "Betriebsarten" TITLE = VERSION : 0.1 VAR_INPUT STG_AUS : BOOL := TRUE; //Steuerung aus STG_EIN : BOOL ; //Steuerung ein Start : BOOL ; //Start Automatikbetrieb Auto : BOOL ; //Betriebsart Automatikbetrieb EmB : BOOL ; //Betriebsart Einzelschritt mit Bedingungen EoB : BOOL ; //Betriebsart Einzelschritt ohne Bedingungen EINR : BOOL ; //Betriebsart Einrichtbetrieb ZYKLUS : BOOL := TRUE; //zyklus EIN/AUS NOT_AUS : BOOL ; //Notaus AKTOR_FR : BOOL := TRUE; //Aktionsfreigabe GST_ANL : BOOL ; //Anlage in Grundstellung (Signal von Anlage) Tippen : BOOL ; //Einzelschritt- Weiterschaltung der Schrittkette (EMBundEOB) Quitt : BOOL ; //Erzeugung reset- Signal END_VAR VAR_OUTPUT ANZ_STG : BOOL ; //Anzeige Steuerung Ein aus ANZ_AUTO : BOOL ; //Anzeige Automatik Ein aus ANZ_EmB : BOOL ; //Anzeige Einzelschritt mit Bedingungen Ein Aus ANZ_EoB : BOOL ; //Anzeige Einzelschritt ohne Bedingungen Ein aus ANZ_EINR : BOOL ; //Anzeige Einrichten Ein Aus ANZ_ZYK_E : BOOL ; //Anzeige Zyklus Ein ANZ_ZYK_A : BOOL ; //Anzeige zyklus Aus Reset : BOOL ; //Signal Rücksetzten B0 FR_K_mB : BOOL ; //Signal Weiterschalten mit Bedingungen B1 FR_K_oB : BOOL ; //Signal Weiterschalten ohne Bedingungen B2 FR_AKTION : BOOL ; //Signal Freigabe der Aktion B3 END_VAR VAR STEU_EIN : BOOL ; //Hilfsvariable Steuerung eingeschaltet AUTO_EIN : BOOL ; //Hilfsvariable Automatikbetrieb eingeschaltet TIPPEN_SP : BOOL ; //Speichervariable für tippen F02 : BOOL ; //Hilfsvariable Flankenerkennung TIPPEN IO_WEITER : BOOL ; //Weiterschltimpuls im Einzelschrittbetrieb END_VAR BEGIN NETWORK TITLE = U #STG_EIN; S #STEU_EIN; U( ; ON #STG_AUS; ON #NOT_AUS; ) ; R #STEU_EIN; U #STEU_EIN; = #ANZ_STG; NETWORK TITLE = U #Auto; U #Start; S #AUTO_EIN; U( ; ON #Auto; ON #STEU_EIN; ) ; R #AUTO_EIN; U #AUTO_EIN; = #ANZ_AUTO; NETWORK TITLE = U #STEU_EIN; U #EmB; = #ANZ_EmB; NETWORK TITLE = U #STEU_EIN; U #EoB; = #ANZ_EoB; NETWORK TITLE = U #AUTO_EIN; U #STEU_EIN; U #ZYKLUS; = #ANZ_ZYK_E; NETWORK TITLE = U #STEU_EIN; UN #ZYKLUS; U #AUTO_EIN; = #ANZ_ZYK_A; NETWORK TITLE = U #STEU_EIN; U #EINR; = #ANZ_EINR; NETWORK TITLE = UN #Auto; U( ; U #Tippen; FP #F02; ) ; U #STEU_EIN; = #IO_WEITER; NETWORK TITLE = U #ANZ_EmB; U #IO_WEITER; O #AUTO_EIN; = #FR_K_mB; NETWORK TITLE = UN #Auto; U #ANZ_EoB; U #IO_WEITER; = #FR_K_oB; NETWORK TITLE = U( ; O #AUTO_EIN; O ; U( ; U #Tippen; S #TIPPEN_SP; UN #STEU_EIN; R #TIPPEN_SP; U #TIPPEN_SP; ) ; U #ANZ_EmB; O ; U #ANZ_EoB; U #AKTOR_FR; ) ; U #STEU_EIN; = #FR_AKTION; NETWORK TITLE = UN #STEU_EIN; U #NOT_AUS; U #GST_ANL; U #Quitt; = #Reset; END_FUNCTION_BLOCK DATA_BLOCK "DB_Betriebsarten" TITLE = VERSION : 0.0 "Betriebsarten" BEGIN STG_AUS := TRUE; STG_EIN := FALSE; Start := FALSE; Auto := FALSE; EmB := FALSE; EoB := FALSE; EINR := FALSE; ZYKLUS := TRUE; NOT_AUS := FALSE; AKTOR_FR := TRUE; GST_ANL := FALSE; Tippen := FALSE; Quitt := FALSE; ANZ_STG := FALSE; ANZ_AUTO := FALSE; ANZ_EmB := FALSE; ANZ_EoB := FALSE; ANZ_EINR := FALSE; ANZ_ZYK_E := FALSE; ANZ_ZYK_A := FALSE; Reset := FALSE; FR_K_mB := FALSE; FR_K_oB := FALSE; FR_AKTION := FALSE; STEU_EIN := FALSE; AUTO_EIN := FALSE; TIPPEN_SP := FALSE; F02 := FALSE; IO_WEITER := FALSE; END_DATA_BLOCK FUNCTION_BLOCK "Schrittkette 1 (Magazin)" TITLE = VERSION : 0.1 VAR_INPUT T1_2 : BOOL ; T2_3 : BOOL := TRUE; T3_4 : BOOL := TRUE; T3_10 : BOOL := TRUE; T4_5 : BOOL := TRUE; T5_6 : BOOL := TRUE; T6_7 : BOOL := TRUE; T7_1 : BOOL := TRUE; T10_1 : BOOL := TRUE; Reset : BOOL ; Weiter_oB : BOOL ; Weiter_mB : BOOL ; END_VAR VAR_OUTPUT Schritt : INT ; END_VAR VAR SM_1 : BOOL := TRUE; SM_2 : BOOL ; SM_3 : BOOL ; SM_4 : BOOL ; SM_5 : BOOL ; SM_6 : BOOL ; SM_7 : BOOL ; SM_10 : BOOL ; END_VAR BEGIN NETWORK TITLE = U( ; U( ; O #Reset; O ; U( ; UN #SM_3; U #SM_10; O ; UN #SM_6; U #SM_7; ) ; U( ; U( ; U #T7_1; U #SM_7; O ; U #T10_1; U #SM_10; ) ; U #Weiter_mB; O #Weiter_oB; ) ; ) ; S #SM_1; U #SM_2; R #SM_1; U #SM_1; ) ; SPBNB _001; L 1; T #Schritt; _001: NOP 0; NETWORK TITLE = U( ; UN #SM_10; U( ; U #Weiter_mB; U #T1_2; O #Weiter_oB; ) ; U #SM_1; S #SM_2; U( ; O #SM_3; O #Reset; ) ; R #SM_2; U #SM_2; ) ; SPBNB _002; L 2; T #Schritt; _002: NOP 0; NETWORK TITLE = U( ; U #SM_2; U( ; U #T2_3; U #Weiter_mB; O #Weiter_oB; ) ; UN #SM_1; S #SM_3; U( ; O #SM_10; O #SM_4; O #Reset; ) ; R #SM_3; U #SM_3; ) ; SPBNB _003; L 3; T #Schritt; _003: NOP 0; NETWORK TITLE = U( ; UN #SM_2; U( ; U #Weiter_mB; U #T3_4; O #Weiter_oB; ) ; U #SM_3; S #SM_4; U( ; O #SM_5; O #Reset; ) ; R #SM_4; U #SM_4; ) ; SPBNB _004; L 4; T #Schritt; _004: NOP 0; NETWORK TITLE = U( ; UN #SM_3; U( ; U #Weiter_mB; U #T4_5; O #Weiter_oB; ) ; U #SM_4; S #SM_5; U( ; O #SM_6; O #Reset; ) ; R #SM_5; U #SM_5; ) ; SPBNB _005; L 5; T #Schritt; _005: NOP 0; NETWORK TITLE = U( ; UN #SM_4; U( ; U #T5_6; U #Weiter_mB; O #Weiter_oB; ) ; U #SM_5; S #SM_6; U( ; O #Reset; O #SM_7; ) ; R #SM_6; U #SM_6; ) ; SPBNB _006; L 6; T #Schritt; _006: NOP 0; NETWORK TITLE = U( ; UN #SM_5; U( ; U #Weiter_mB; U #T6_7; O #Weiter_oB; ) ; U #SM_6; S #SM_7; U( ; O #SM_1; O #Reset; ) ; R #SM_7; U #SM_7; ) ; SPBNB _007; L 7; T #Schritt; _007: NOP 0; NETWORK TITLE = U( ; UN #SM_2; U( ; U #Weiter_mB; U #T3_10; O #Weiter_oB; ) ; U #SM_3; S #SM_10; U( ; O #SM_1; O #Reset; ) ; R #SM_10; U #SM_10; ) ; SPBNB _008; L 10; T #Schritt; _008: NOP 0; END_FUNCTION_BLOCK DATA_BLOCK "DB_Schrittkette_1" TITLE = VERSION : 0.0 "Schrittkette 1 (Magazin)" BEGIN T1_2 := FALSE; T2_3 := TRUE; T3_4 := TRUE; T3_10 := TRUE; T4_5 := TRUE; T5_6 := TRUE; T6_7 := TRUE; T7_1 := TRUE; T10_1 := TRUE; Reset := FALSE; Weiter_oB := FALSE; Weiter_mB := FALSE; Schritt := 0; SM_1 := TRUE; SM_2 := FALSE; SM_3 := FALSE; SM_4 := FALSE; SM_5 := FALSE; SM_6 := FALSE; SM_7 := FALSE; SM_10 := FALSE; END_DATA_BLOCK FUNCTION_BLOCK "Ausgänge_Schrittkette_2" TITLE = VERSION : 0.1 VAR_INPUT Schritt_Nr : INT ; Reset : BOOL ; Aktorfreigabe : BOOL ; Aktornummer : INT ; Aktor_vor : BOOL ; Aktor_zurueck : BOOL ; END_VAR VAR_OUTPUT gemessene_dicke : WORD ; gemessene_farbe : BOOL ; gem_wert_schieben : BOOL ; END_VAR VAR Merker1 : BOOL ; Merker2 : BOOL ; Merker3 : BOOL ; Merker4 : BOOL ; Merker5 : BOOL ; Merker6 : BOOL ; Merker7 : BOOL ; Merker_Farbe : BOOL ; Merker_Erstdurchlauf : BOOL ; END_VAR BEGIN NETWORK TITLE =2Y2.10 = 1; Prüfzylinder wird gesenkt U( ; U( ; O( ; L #Schritt_Nr; L 1; ==I ; ) ; O( ; L #Schritt_Nr; L 7; ==I ; ) ; ) ; S #Merker1; U( ; O( ; L #Schritt_Nr; L 2; ==I ; ) ; O #Reset; ) ; R #Merker1; U #Merker1; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 201; ==I ; ) ; U #Aktor_zurueck; = "2Y2.10"; NETWORK TITLE =2Y2.11 = 1; Prüfzylinder wird gehoben U( ; U( ; L #Schritt_Nr; L 2; ==I ; ) ; S #Merker2; U( ; O( ; L #Schritt_Nr; L 1; ==I ; ) ; O( ; L #Schritt_Nr; L 7; ==I ; ) ; O #Reset; ) ; R #Merker2; U #Merker2; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 201; ==I ; ) ; U #Aktor_vor; = "2Y2.11"; NETWORK TITLE =Auswerfer vor U( ; U( ; O( ; L #Schritt_Nr; L 11; ==I ; ) ; O( ; L #Schritt_Nr; L 9; ==I ; ) ; O( ; L #Schritt_Nr; L 5; ==I ; ) ; ) ; S #Merker3; U( ; O( ; L #Schritt_Nr; L 12; ==I ; ) ; O( ; L #Schritt_Nr; L 1; ==I ; ) ; O( ; L #Schritt_Nr; L 6; ==I ; ) ; O( ; L #Schritt_Nr; L 10; ==I ; ) ; O #Reset; ) ; R #Merker3; U #Merker3; ) ; U #Aktorfreigabe; O ; U #Aktor_vor; U( ; L #Aktornummer; L 202; ==I ; ) ; = "2Y1"; NETWORK TITLE =Pruefen Materialstaerke Zeit U( ; L #Schritt_Nr; L 3; ==I ; ) ; L S5T#1S; SE "T_Pruefen"; U( ; O( ; L #Schritt_Nr; L 4; ==I ; ) ; O #Reset; ) ; R "T_Pruefen"; NOP 0; NOP 0; NOP 0; NETWORK TITLE =2K1 = 1; Bandmotor wird eingeschaltet O( ; U( ; L #Schritt_Nr; L 11; ==I ; ) ; S #Merker_Erstdurchlauf; U( ; O( ; L #Schritt_Nr; L 13; ==I ; ) ; O #Reset; ) ; R #Merker_Erstdurchlauf; U #Merker_Erstdurchlauf; ) ; O ; U "T_Bandzeit"; U( ; L #Schritt_Nr; L 5; ==I ; ) ; U #Aktorfreigabe; O ; U #Aktor_vor; U( ; L #Aktornummer; L 203; ==I ; ) ; = "2K1"; NETWORK TITLE =Bandvorschub an U( ; L #Schritt_Nr; L 5; ==I ; ) ; L S5T#500MS; SI "T_Bandzeit"; NOP 0; NOP 0; NOP 0; NOP 0; NETWORK TITLE =Teilefarbe zwischenspeichern U( ; L #Schritt_Nr; L 1; ==I ; ) ; U "2B1"; S #Merker_Farbe; U( ; L #Schritt_Nr; L 1; ==I ; ) ; UN "2B1"; R #Merker_Farbe; NOP 0; NETWORK TITLE =Teilefarbe ausgeben U #Merker_Farbe; = #gemessene_farbe; NETWORK TITLE =Analogsensor einlesen U( ; L #Schritt_Nr; L 4; ==I ; ) ; SPBNB _001; L "Dicke_Analogwert"; T #gemessene_dicke; _001: NOP 0; NETWORK TITLE =Erzeugung Signal: Schieberegister einschieben L #Schritt_Nr; L 4; ==I ; = #gem_wert_schieben; NETWORK TITLE =Signal "Erster Zyklus" rücksetzen L #Schritt_Nr; L 13; ==I ; R "Erster_Zyklus"; END_FUNCTION_BLOCK DATA_BLOCK "DB_Ausgänge_SK2" TITLE = VERSION : 0.0 "Ausgänge_Schrittkette_2" BEGIN Schritt_Nr := 0; Reset := FALSE; Aktorfreigabe := FALSE; Aktornummer := 0; Aktor_vor := FALSE; Aktor_zurueck := FALSE; gemessene_dicke := W#16#0; gemessene_farbe := FALSE; gem_wert_schieben := FALSE; Merker1 := FALSE; Merker2 := FALSE; Merker3 := FALSE; Merker4 := FALSE; Merker5 := FALSE; Merker6 := FALSE; Merker7 := FALSE; Merker_Farbe := FALSE; Merker_Erstdurchlauf := FALSE; END_DATA_BLOCK FUNCTION_BLOCK "Schrittkette 2 (Prüfen)" TITLE = VERSION : 0.1 VAR_INPUT T1_2 : BOOL ; T2_3 : BOOL := TRUE; T3_4 : BOOL := TRUE; T4_5 : BOOL := TRUE; T5_6 : BOOL := TRUE; T6_7 : BOOL := TRUE; T7_1 : BOOL := TRUE; T1_9 : BOOL := TRUE; T9_10 : BOOL := TRUE; T10_1 : BOOL := TRUE; T4_11 : BOOL ; T11_12 : BOOL ; T12_13 : BOOL ; T13_7 : BOOL ; Reset : BOOL ; Weiter_oB : BOOL ; Weiter_mB : BOOL ; END_VAR VAR_OUTPUT Schritt : INT ; END_VAR VAR SM_1 : BOOL := TRUE; SM_2 : BOOL ; SM_3 : BOOL ; SM_4 : BOOL ; SM_5 : BOOL ; SM_6 : BOOL ; SM_7 : BOOL ; SM_9 : BOOL ; SM_10 : BOOL ; SM_11 : BOOL ; SM_12 : BOOL ; SM_13 : BOOL ; END_VAR BEGIN NETWORK TITLE = U( ; U( ; O #Reset; O ; U( ; UN #SM_9; U #SM_10; ON #SM_6; O #SM_7; ) ; U( ; U( ; U #T10_1; U #SM_10; O ; U #T7_1; U #SM_7; ) ; U #Weiter_mB; O #Weiter_oB; ) ; ) ; S #SM_1; U( ; O #SM_2; O #SM_9; ) ; R #SM_1; U #SM_1; ) ; SPBNB _001; L 1; T #Schritt; _001: NOP 0; NETWORK TITLE = U( ; UN #SM_7; UN #SM_10; U( ; U #Weiter_mB; U #T1_2; O #Weiter_oB; ) ; U #SM_1; S #SM_2; U( ; O #SM_3; O #Reset; ) ; R #SM_2; U #SM_2; ) ; SPBNB _002; L 2; T #Schritt; _002: NOP 0; NETWORK TITLE = U( ; U #SM_2; U( ; U #T2_3; U #Weiter_mB; O #Weiter_oB; ) ; UN #SM_1; S #SM_3; U( ; O #SM_4; O #Reset; ) ; R #SM_3; U #SM_3; ) ; SPBNB _003; L 3; T #Schritt; _003: NOP 0; NETWORK TITLE = U( ; UN #SM_2; U( ; U #Weiter_mB; U #T3_4; O #Weiter_oB; ) ; U #SM_3; S #SM_4; U( ; O #SM_11; O #SM_5; O #Reset; ) ; R #SM_4; U #SM_4; ) ; SPBNB _004; L 4; T #Schritt; _004: NOP 0; NETWORK TITLE = U( ; UN #SM_3; U( ; U #Weiter_mB; U #T4_5; O #Weiter_oB; ) ; U #SM_4; S #SM_5; U( ; O #SM_6; O #Reset; ) ; R #SM_5; U #SM_5; ) ; SPBNB _005; L 5; T #Schritt; _005: NOP 0; NETWORK TITLE = U( ; UN #SM_4; U( ; U #Weiter_mB; U #T5_6; O #Weiter_oB; ) ; U #SM_5; S #SM_6; U( ; O #SM_7; O #Reset; ) ; R #SM_6; U #SM_6; ) ; SPBNB _006; L 6; T #Schritt; _006: NOP 0; NETWORK TITLE = U( ; U( ; U #SM_6; UN #SM_5; O ; UN #SM_12; U #SM_13; ) ; U( ; U( ; U #T13_7; U #SM_13; O ; U #T6_7; U #SM_6; ) ; U #Weiter_mB; O #Weiter_oB; ) ; S #SM_7; U( ; O #SM_1; O #Reset; ) ; R #SM_7; U #SM_7; ) ; SPBNB _007; L 7; T #Schritt; _007: NOP 0; NETWORK TITLE = U( ; UN #SM_7; UN #SM_10; U( ; U #Weiter_mB; U #T1_9; O #Weiter_oB; ) ; U #SM_1; S #SM_9; U( ; O #SM_10; O #Reset; ) ; R #SM_9; U #SM_9; ) ; SPBNB _008; L 9; T #Schritt; _008: NOP 0; NETWORK TITLE = U( ; UN #SM_1; U( ; U #Weiter_mB; U #T9_10; O #Weiter_oB; ) ; U #SM_9; S #SM_10; U( ; O #SM_1; O #Reset; ) ; R #SM_10; U #SM_10; ) ; SPBNB _009; L 10; T #Schritt; _009: NOP 0; NETWORK TITLE = U( ; UN #SM_3; U( ; U #Weiter_mB; U #T4_11; O #Weiter_oB; ) ; U #SM_4; S #SM_11; U( ; O #SM_12; O #Reset; ) ; R #SM_11; U #SM_11; ) ; SPBNB _00a; L 11; T #Schritt; _00a: NOP 0; NETWORK TITLE = U( ; UN #SM_4; U( ; U #Weiter_mB; U #T11_12; O #Weiter_oB; ) ; U #SM_11; S #SM_12; U( ; O #SM_13; O #Reset; ) ; R #SM_12; U #SM_12; ) ; SPBNB _00b; L 12; T #Schritt; _00b: NOP 0; NETWORK TITLE = U( ; UN #SM_11; U( ; U #Weiter_mB; U #T12_13; O #Weiter_oB; ) ; U #SM_12; S #SM_13; U( ; O #SM_7; O #Reset; ) ; R #SM_13; U #SM_13; ) ; SPBNB _00c; L 13; T #Schritt; _00c: NOP 0; END_FUNCTION_BLOCK DATA_BLOCK "DB_Schrittkette_2" TITLE = VERSION : 0.0 "Schrittkette 2 (Prüfen)" BEGIN T1_2 := FALSE; T2_3 := TRUE; T3_4 := TRUE; T4_5 := TRUE; T5_6 := TRUE; T6_7 := TRUE; T7_1 := TRUE; T1_9 := TRUE; T9_10 := TRUE; T10_1 := TRUE; T4_11 := FALSE; T11_12 := FALSE; T12_13 := FALSE; T13_7 := FALSE; Reset := FALSE; Weiter_oB := FALSE; Weiter_mB := FALSE; Schritt := 0; SM_1 := TRUE; SM_2 := FALSE; SM_3 := FALSE; SM_4 := FALSE; SM_5 := FALSE; SM_6 := FALSE; SM_7 := FALSE; SM_9 := FALSE; SM_10 := FALSE; SM_11 := FALSE; SM_12 := FALSE; SM_13 := FALSE; END_DATA_BLOCK FUNCTION_BLOCK "Eingänge Schrittkette_3" TITLE = VERSION : 0.1 VAR_INPUT Anzahl_Teile : INT ; Farbe_Rot : BOOL ; END_VAR VAR_OUTPUT T1_2 : BOOL ; T2_3 : BOOL ; T3_4 : BOOL ; T4_5 : BOOL ; T5_6 : BOOL ; T6_7_u_6_16 : BOOL ; T7_8 : BOOL ; T8_9_u_17_9 : BOOL ; T9_10 : BOOL ; T10_11_u_10_18 : BOOL ; T11_12 : BOOL ; T12_13_u_19_13 : BOOL ; T13_14 : BOOL ; T14_15 : BOOL ; T15_1 : BOOL ; T16_17 : BOOL ; T18_19 : BOOL ; END_VAR BEGIN NETWORK TITLE = U "4B6"; = #T1_2; NETWORK TITLE = O "4B4"; O "4B3"; = #T2_3; NETWORK TITLE = U "4B1"; = #T3_4; NETWORK TITLE = U "3B1"; = #T4_5; NETWORK TITLE = U "3B7"; U "3B1"; = #T5_6; NETWORK TITLE = U "4B4"; = #T6_7_u_6_16; NETWORK TITLE = U "4B5"; = #T7_8; NETWORK TITLE = U "4B5"; U "4B7"; = #T8_9_u_17_9; NETWORK TITLE = U "4B9"; = #T9_10; NETWORK TITLE = U "3B6"; = #T10_11_u_10_18; NETWORK TITLE = U "4B6"; = #T11_12; NETWORK TITLE = U "4B4"; U "4B6"; = #T12_13_u_19_13; NETWORK TITLE = U "4B2"; = #T13_14; NETWORK TITLE = U #Farbe_Rot; U "4B4"; O ; UN #Farbe_Rot; U "4B5"; = #T14_15; NETWORK TITLE = UN "4B9"; = #T15_1; NETWORK TITLE = U "4B7"; = #T16_17; NETWORK TITLE = U "4B4"; = #T18_19; END_FUNCTION_BLOCK DATA_BLOCK "DB_Transitionen_SK3" TITLE = VERSION : 0.0 "Eingänge Schrittkette_3" BEGIN Anzahl_Teile := 0; Farbe_Rot := FALSE; T1_2 := FALSE; T2_3 := FALSE; T3_4 := FALSE; T4_5 := FALSE; T5_6 := FALSE; T6_7_u_6_16 := FALSE; T7_8 := FALSE; T8_9_u_17_9 := FALSE; T9_10 := FALSE; T10_11_u_10_18 := FALSE; T11_12 := FALSE; T12_13_u_19_13 := FALSE; T13_14 := FALSE; T14_15 := FALSE; T15_1 := FALSE; T16_17 := FALSE; T18_19 := FALSE; END_DATA_BLOCK FUNCTION_BLOCK "Schrittkette 3 (Greifer)" TITLE = VERSION : 0.1 VAR_INPUT T1_2 : BOOL ; T2_3 : BOOL := TRUE; T3_4 : BOOL := TRUE; T4_5 : BOOL := TRUE; T5_6 : BOOL := TRUE; T6_7_u_6_16 : BOOL := TRUE; T7_8 : BOOL := TRUE; T8_9_u_17_9 : BOOL := TRUE; T9_10 : BOOL := TRUE; T10_11_u_10_18 : BOOL := TRUE; T11_12 : BOOL := TRUE; T12_13_u_19_13 : BOOL := TRUE; T13_14 : BOOL := TRUE; T14_15 : BOOL := TRUE; T15_1 : BOOL ; T16_17 : BOOL ; T18_19 : BOOL ; Reset : BOOL ; Weiter_ob : BOOL ; Weiter_mb : BOOL ; END_VAR VAR_OUTPUT Schritt : INT ; Schritt2 : INT ; END_VAR VAR SM_1 : BOOL := TRUE; SM_2 : BOOL ; SM_3 : BOOL ; SM_4 : BOOL ; SM_5 : BOOL ; SM_6 : BOOL ; SM_7 : BOOL ; SM_8 : BOOL ; SM_9 : BOOL ; SM_10 : BOOL ; SM_11 : BOOL ; SM_12 : BOOL ; SM_13 : BOOL ; SM_14 : BOOL ; SM_15 : BOOL ; SM_16 : BOOL ; SM_17 : BOOL ; SM_18 : BOOL ; SM_19 : BOOL ; END_VAR BEGIN NETWORK TITLE = U( ; O #Reset; O ; UN #SM_14; U #SM_15; U( ; U #T15_1; U #Weiter_mb; O #Weiter_ob; ) ; ) ; S #SM_1; U #SM_2; R #SM_1; U #SM_1; = L 0.0; U L 0.0; SPBNB _001; L 1; T #Schritt; _001: NOP 0; U L 0.0; SPBNB _002; L 0; T #Schritt2; _002: NOP 0; NETWORK TITLE = U( ; UN #SM_15; U #SM_1; U( ; U #T1_2; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_2; U( ; O #SM_3; O #Reset; ) ; R #SM_2; U #SM_2; ) ; SPBNB _003; L 2; T #Schritt; _003: NOP 0; NETWORK TITLE = U( ; UN #SM_1; U #SM_2; U( ; U #T2_3; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_3; U( ; O #SM_4; O #Reset; ) ; R #SM_3; U #SM_3; ) ; SPBNB _004; L 3; T #Schritt; _004: NOP 0; NETWORK TITLE = U( ; UN #SM_2; U #SM_3; U( ; U #T3_4; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_4; U( ; O #SM_5; O #Reset; ) ; R #SM_4; U #SM_4; ) ; SPBNB _005; L 4; T #Schritt; _005: NOP 0; NETWORK TITLE = U( ; UN #SM_3; U #SM_4; U( ; U #T4_5; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_5; U( ; O #SM_6; O #Reset; ) ; R #SM_5; U #SM_5; ) ; SPBNB _006; L 5; T #Schritt; _006: NOP 0; NETWORK TITLE = U( ; UN #SM_4; U #SM_5; U( ; U #T5_6; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_6; U( ; U #SM_7; U #SM_16; O #Reset; ) ; R #SM_6; U #SM_6; ) ; SPBNB _007; L 6; T #Schritt; _007: NOP 0; NETWORK TITLE = U( ; UN #SM_5; U #SM_6; U( ; U #T6_7_u_6_16; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_7; U( ; O #SM_8; O #Reset; ) ; R #SM_7; U #SM_7; ) ; SPBNB _008; L 7; T #Schritt; _008: NOP 0; NETWORK TITLE = U( ; UN #SM_6; U #SM_7; U( ; U #T7_8; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_8; U( ; O #SM_9; O #Reset; ) ; R #SM_8; U #SM_8; ) ; SPBNB _009; L 8; T #Schritt; _009: NOP 0; NETWORK TITLE = UN #SM_16; U #SM_17; UN #SM_7; U #SM_8; U( ; U #T8_9_u_17_9; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_9; U( ; O #SM_10; O #Reset; ) ; R #SM_9; U #SM_9; = L 0.0; U L 0.0; SPBNB _00a; L 9; T #Schritt; _00a: NOP 0; U L 0.0; SPBNB _00b; L 0; T #Schritt2; _00b: NOP 0; NETWORK TITLE = U( ; UN #SM_17; UN #SM_8; U #SM_9; U( ; U #T9_10; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_10; U( ; U #SM_11; U #SM_18; O #Reset; ) ; R #SM_10; U #SM_10; ) ; SPBNB _00c; L 10; T #Schritt; _00c: NOP 0; NETWORK TITLE = U( ; UN #SM_9; U #SM_10; U( ; U #T10_11_u_10_18; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_11; U( ; O #SM_12; O #Reset; ) ; R #SM_11; U #SM_11; ) ; SPBNB _00d; L 11; T #Schritt; _00d: NOP 0; NETWORK TITLE = U( ; UN #SM_10; U #SM_11; U( ; U #T11_12; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_12; U( ; O #SM_13; O #Reset; ) ; R #SM_12; U #SM_12; ) ; SPBNB _00e; L 12; T #Schritt; _00e: NOP 0; NETWORK TITLE = UN #SM_18; U #SM_19; UN #SM_11; U #SM_12; U( ; U #T12_13_u_19_13; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_13; U( ; O #SM_14; O #Reset; ) ; R #SM_13; U #SM_13; = L 0.0; U L 0.0; SPBNB _00f; L 13; T #Schritt; _00f: NOP 0; U L 0.0; SPBNB _010; L 0; T #Schritt2; _010: NOP 0; NETWORK TITLE = U( ; UN #SM_19; UN #SM_12; U #SM_13; U( ; U #T13_14; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_14; U( ; O #SM_15; O #Reset; ) ; R #SM_14; U #SM_14; ) ; SPBNB _011; L 14; T #Schritt; _011: NOP 0; NETWORK TITLE = U( ; UN #SM_13; U #SM_14; U( ; U #T14_15; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_15; U( ; O #SM_1; O #Reset; ) ; R #SM_15; U #SM_15; ) ; SPBNB _012; L 15; T #Schritt; _012: NOP 0; NETWORK TITLE = U( ; UN #SM_5; U #SM_6; U( ; U #T6_7_u_6_16; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_16; U( ; O #SM_17; O #Reset; ) ; R #SM_16; U #SM_16; ) ; SPBNB _013; L 16; T #Schritt2; _013: NOP 0; NETWORK TITLE = U( ; UN #SM_6; U #SM_16; U( ; U #T16_17; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_17; U( ; O #SM_9; O #Reset; ) ; R #SM_17; U #SM_17; ) ; SPBNB _014; L 17; T #Schritt2; _014: NOP 0; NETWORK TITLE = U( ; UN #SM_9; U #SM_10; U( ; U #T10_11_u_10_18; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_18; U( ; O #SM_19; O #Reset; ) ; R #SM_18; U #SM_18; ) ; SPBNB _015; L 18; T #Schritt2; _015: NOP 0; NETWORK TITLE = U( ; UN #SM_10; U #SM_18; U( ; U #T18_19; U #Weiter_mb; O #Weiter_ob; ) ; S #SM_19; U( ; O #SM_13; O #Reset; ) ; R #SM_19; U #SM_19; ) ; SPBNB _016; L 19; T #Schritt2; _016: NOP 0; END_FUNCTION_BLOCK DATA_BLOCK "DB_Schrittkette_3" TITLE = VERSION : 0.0 "Schrittkette 3 (Greifer)" BEGIN T1_2 := FALSE; T2_3 := TRUE; T3_4 := TRUE; T4_5 := TRUE; T5_6 := TRUE; T6_7_u_6_16 := TRUE; T7_8 := TRUE; T8_9_u_17_9 := TRUE; T9_10 := TRUE; T10_11_u_10_18 := TRUE; T11_12 := TRUE; T12_13_u_19_13 := TRUE; T13_14 := TRUE; T14_15 := TRUE; T15_1 := FALSE; T16_17 := FALSE; T18_19 := FALSE; Reset := FALSE; Weiter_ob := FALSE; Weiter_mb := FALSE; Schritt := 0; Schritt2 := 0; SM_1 := TRUE; SM_2 := FALSE; SM_3 := FALSE; SM_4 := FALSE; SM_5 := FALSE; SM_6 := FALSE; SM_7 := FALSE; SM_8 := FALSE; SM_9 := FALSE; SM_10 := FALSE; SM_11 := FALSE; SM_12 := FALSE; SM_13 := FALSE; SM_14 := FALSE; SM_15 := FALSE; SM_16 := FALSE; SM_17 := FALSE; SM_18 := FALSE; SM_19 := FALSE; END_DATA_BLOCK FUNCTION_BLOCK "Ausgänge_Schrittkette_3" TITLE = VERSION : 0.1 VAR_INPUT Schritt_Nr : INT ; Schritt_Nr_2 : INT ; Reset : BOOL ; Aktornummer : INT ; Aktorfreigabe : BOOL ; Aktor_vor : BOOL ; Aktor_zurueck : BOOL ; END_VAR VAR Merker_1 : BOOL ; Merker_2 : BOOL ; Merker_3 : BOOL ; Merker_4 : BOOL ; Merker_5 : BOOL ; Merker_6 : BOOL ; Merker_7 : BOOL ; Merker_8 : BOOL ; Merker_9 : BOOL ; Merker_10 : BOOL ; Merker_11 : BOOL ; Merker_12 : BOOL ; END_VAR BEGIN NETWORK TITLE =4K1 = 1; Vertikalmotor Handhabungsgerät hoch U( ; U( ; O( ; L #Schritt_Nr; L 1; ==I ; ) ; O( ; L #Schritt_Nr; L 11; ==I ; ) ; ) ; S #Merker_1; U( ; O( ; L 16; L #Schritt_Nr_2; ==I ; ) ; O #Reset; O( ; L #Schritt_Nr; L 12; ==I ; ) ; O( ; L #Schritt_Nr; L 2; ==I ; ) ; ) ; R #Merker_1; U #Merker_1; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 303; ==I ; ) ; U #Aktor_zurueck; = "4K1"; NETWORK TITLE =4K2 = 1; Vertikalmotor Handhabungsgerät runter U( ; U( ; L #Schritt_Nr_2; L 16; ==I ; ) ; S #Merker_2; U( ; O #Reset; O( ; L #Schritt_Nr; L 1; ==I ; ) ; O( ; L #Schritt_Nr_2; L 17; ==I ; ) ; O( ; L #Schritt_Nr; L 11; ==I ; ) ; ) ; R #Merker_2; U #Merker_2; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 303; ==I ; ) ; U #Aktor_vor; = "4K2"; NETWORK TITLE =4K3 = 1; Horizontalmotor Handhabungsgerät zurück U( ; U( ; O( ; U( ; L #Schritt_Nr_2; L 18; ==I ; ) ; L S5T#1S300MS; SE "T_Aushub_Handhabung"; U( ; O( ; L #Schritt_Nr_2; L 19; ==I ; ) ; O #Reset; ) ; R "T_Aushub_Handhabung"; NOP 0; NOP 0; U "T_Aushub_Handhabung"; ) ; O( ; L #Schritt_Nr; L 2; ==I ; ) ; ) ; S #Merker_3; U( ; O( ; L #Schritt_Nr; L 3; ==I ; ) ; O #Reset; O( ; L #Schritt_Nr; L 14; ==I ; ) ; O( ; L #Schritt_Nr_2; L 19; ==I ; ) ; O( ; L #Schritt_Nr; L 6; ==I ; ) ; ) ; R #Merker_3; U #Merker_3; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 304; ==I ; ) ; U #Aktor_zurueck; = "4K3"; NETWORK TITLE =4K4 = 1; Horizontalmotor Handhabungsgerät vor O E 1.6; O ; U( ; U( ; O( ; L #Schritt_Nr; L 6; ==I ; ) ; O( ; L #Schritt_Nr; L 14; ==I ; ) ; ) ; S #Merker_4; U( ; O( ; L #Schritt_Nr; L 2; ==I ; ) ; O #Reset; O( ; L #Schritt_Nr; L 15; ==I ; ) ; O( ; L #Schritt_Nr_2; L 18; ==I ; ) ; O( ; L #Schritt_Nr; L 8; ==I ; ) ; ) ; R #Merker_4; U #Merker_4; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 304; ==I ; ) ; U #Aktor_vor; = "4K4"; NETWORK TITLE =4K5 = 1; Drehung Handhabungsgerät links U( ; U( ; L #Schritt_Nr; L 13; ==I ; ) ; S #Merker_5; U( ; O #Reset; O( ; L #Schritt_Nr; L 14; ==I ; ) ; O( ; L #Schritt_Nr; L 3; ==I ; ) ; ) ; R #Merker_5; U #Merker_5; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 305; ==I ; ) ; U #Aktor_vor; = "4K5"; NETWORK TITLE =4K6 = 1; Drehung Handhabungsgerät rechts U( ; U( ; L #Schritt_Nr; L 3; ==I ; ) ; S #Merker_6; U( ; O #Reset; O( ; L #Schritt_Nr; L 13; ==I ; ) ; O( ; L #Schritt_Nr; L 4; ==I ; ) ; ) ; R #Merker_6; U #Merker_6; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 305; ==I ; ) ; U #Aktor_zurueck; = "4K6"; NETWORK TITLE =3Y2 = 1; Werkstückspanner U( ; U( ; L #Schritt_Nr; L 5; ==I ; ) ; S #Merker_8; U( ; O #Reset; O( ; L #Schritt_Nr; L 10; ==I ; ) ; ) ; R #Merker_8; U #Merker_8; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 301; ==I ; ) ; U #Aktor_vor; = "3Y2"; NETWORK TITLE =4Y1 = 1; Greifer auf U( ; U( ; O( ; L #Schritt_Nr; L 15; ==I ; ) ; O( ; L #Schritt_Nr; L 1; ==I ; ) ; ) ; S #Merker_9; U( ; O #Reset; O( ; L #Schritt_Nr; L 9; ==I ; ) ; ) ; R #Merker_9; U #Merker_9; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 302; ==I ; ) ; U #Aktor_zurueck; = "4Y1"; NETWORK TITLE =4Y2 = 1; Greifer zu U( ; U( ; L #Schritt_Nr; L 9; ==I ; ) ; S #Merker_10; U( ; O #Reset; O( ; L #Schritt_Nr; L 15; ==I ; ) ; ) ; R #Merker_10; U #Merker_10; ) ; U #Aktorfreigabe; O ; U( ; L #Aktornummer; L 302; ==I ; ) ; U #Aktor_vor; = "4Y2"; END_FUNCTION_BLOCK DATA_BLOCK "DB_Ausgänge_SK3" TITLE = VERSION : 0.0 "Ausgänge_Schrittkette_3" BEGIN Schritt_Nr := 0; Schritt_Nr_2 := 0; Reset := FALSE; Aktornummer := 0; Aktorfreigabe := FALSE; Aktor_vor := FALSE; Aktor_zurueck := FALSE; Merker_1 := FALSE; Merker_2 := FALSE; Merker_3 := FALSE; Merker_4 := FALSE; Merker_5 := FALSE; Merker_6 := FALSE; Merker_7 := FALSE; Merker_8 := FALSE; Merker_9 := FALSE; Merker_10 := FALSE; Merker_11 := FALSE; Merker_12 := FALSE; END_DATA_BLOCK ORGANIZATION_BLOCK "Programmzyklus" TITLE = "Main Program Sweep (Cycle)" VERSION : 0.1 VAR_TEMP OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1) OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1) OB1_PRIORITY : BYTE ; //Priority of OB Execution OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1) OB1_RESERVED_1 : BYTE ; //Reserved for system OB1_RESERVED_2 : BYTE ; //Reserved for system OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds) OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds) OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds) OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started TEMP_T1_T2_SK1 : BOOL ; TEMP_T2_T3_SK1 : BOOL ; TEMP_T3_T4_SK1 : BOOL ; TEMP_T4_T5_SK1 : BOOL ; TEMP_T5_T6_SK1 : BOOL ; TEMP_T6_T7_SK1 : BOOL ; TEMP_T7_T1_Sk1 : BOOL ; TEMP_T3_T10_SK1 : BOOL ; TEMP_T10_T1_SK1 : BOOL ; TEMP_Reset : BOOL ; TEMP_T1_T2_SK2 : BOOL ; TEMP_T2_T3_SK2 : BOOL ; TEMP_T3_T4_SK2 : BOOL ; TEMP_T4_T5_SK2 : BOOL ; TEMP_T5_T6_SK2 : BOOL ; TEMP_T6_T7_SK2 : BOOL ; TEMP_T7_T1_SK2 : BOOL ; TEMP_T1_T9_SK2 : BOOL ; TEMP_T9_T10_SK2 : BOOL ; TEMP_T10_T1_SK2 : BOOL ; TEMP_T4_T11_SK2 : BOOL ; TEMP_T11_T12_SK2 : BOOL ; TEMP_T12_T13_SK2 : BOOL ; TEMP_T13_T7_SK2 : BOOL ; TEMP_Fr_k_mb : BOOL ; TEMP_Fr_k_ob : BOOL ; TEMP_Fr_Aktion : BOOL ; TEMP_gemessene_dicke : WORD ; TEMP_gemessene_farbe : BOOL ; TEMP_wert_einschieben : BOOL ; TEMP_T1_T2_SK3 : BOOL ; TEMP_T2_T3_SK3 : BOOL ; TEMP_T3_T4_SK3 : BOOL ; TEMP_T4_T5_SK3 : BOOL ; TEMP_T5_T6_SK3 : BOOL ; TEMP_T6_T7_u_T6_T16_SK3 : BOOL ; TEMP_T7_T8_SK3 : BOOL ; TEMP_T8_T9_u_T17_T9_SK3 : BOOL ; TEMP_T9_T10_SK3 : BOOL ; TEMP_T10_T11_u_10_18_SK3 : BOOL ; TEMP_T11_T12_SK3 : BOOL ; TEMP_T12_T13_u_19_13_SK3 : BOOL ; TEMP_T13_T14_SK3 : BOOL ; TEMP_T14_T15_SK3 : BOOL ; TEMP_T15_T1_SK3 : BOOL ; TEMP_T16_T17_SK3 : BOOL ; TEMP_T18_T19_SK3 : BOOL ; TEMP_schiebereg_aus : BOOL ; TEMP_schiebereg_farbe : BOOL ; TEMP_Aktor_vor : BOOL ; TEMP_Aktor_zurueck : BOOL ; TEMP_Aktornummer : INT ; TEMP_Dicke : WORD ; END_VAR BEGIN NETWORK TITLE =Handbetrieb: "Aktor vor" Signal erzeugen und verriegeln U "Handbetrieb"; UN "AktorRück_Hand"; U "AktorVor_Hand"; = #TEMP_Aktor_vor; NETWORK TITLE =Handbetrieb: "Aktor zurueck" Signal erzeugen und verriegeln U "Handbetrieb"; U "AktorRück_Hand"; UN "AktorVor_Hand"; = #TEMP_Aktor_zurueck; NETWORK TITLE =Handbetrieb: Aktornummer von BCD wandeln //Der BTI-Befehl wird nicht direkt verwendet, weil dies bei einer fehlerhaften //BCD-Zahl zu einem STOP der Anlage führt. Stattdessen wird mit dem FC100 im //Fehlerfall eine -1 ausgegeben. CALL "BCD_zu_INT_Wandler" ( bcd_wert := "Aktornummer_Hand", fehler_wert := -1, RET_VAL := #TEMP_Aktornummer); NOP 0; NETWORK TITLE =Transitionen für Schrittkette 1 CALL "Eingaenge_Schrittkette_1" , "DB_Transitionen_SK1" ( T1_2 := #TEMP_T1_T2_SK1, T2_3 := #TEMP_T2_T3_SK1, T3_4 := #TEMP_T3_T4_SK1, T4_5 := #TEMP_T4_T5_SK1, T5_6 := #TEMP_T5_T6_SK1, T6_7 := #TEMP_T6_T7_SK1, T7_1 := #TEMP_T7_T1_Sk1, T3_10 := #TEMP_T3_T10_SK1, T10_1 := #TEMP_T10_T1_SK1); NOP 0; NETWORK TITLE =Betriebsarten U "EIN"; = L 34.0; BLD 103; U "EIN"; = L 34.1; BLD 103; U "Start"; = L 34.2; BLD 103; U "Automatikbetrieb"; = L 34.3; BLD 103; U "Handbetrieb"; = L 34.6; BLD 103; U "NOT_AUS"; = L 35.0; BLD 103; U "Handbetrieb"; = L 35.1; BLD 103; U "Grundstellung"; = L 35.2; BLD 103; U "Quit"; = L 35.4; BLD 103; CALL "Betriebsarten" , "DB_Betriebsarten" ( STG_AUS := L 34.0, STG_EIN := L 34.1, Start := L 34.2, Auto := L 34.3, EINR := L 34.6, NOT_AUS := L 35.0, AKTOR_FR := L 35.1, GST_ANL := L 35.2, Quitt := L 35.4, ANZ_STG := "H_Steuerung_Ein", ANZ_AUTO := "H_Automatikbetrieb", ANZ_EINR := "H_Handbetrieb", Reset := #TEMP_Reset, FR_K_mB := #TEMP_Fr_k_mb, FR_K_oB := #TEMP_Fr_k_ob, FR_AKTION := #TEMP_Fr_Aktion); NOP 0; NETWORK TITLE =Merker "Erster Zyklus" U #TEMP_Reset; // Wenn RESET aktiv, dann... SPBN ners; SET ; // Merker "Erster Zyklus" setzen = "Erster_Zyklus"; ners: NOP 0; NETWORK TITLE =Schrittkette 1 (Magazin) U #TEMP_T1_T2_SK1; = L 34.0; BLD 103; U #TEMP_T2_T3_SK1; = L 34.1; BLD 103; U #TEMP_T3_T4_SK1; = L 34.2; BLD 103; U #TEMP_T3_T10_SK1; = L 34.3; BLD 103; U #TEMP_T4_T5_SK1; = L 34.4; BLD 103; U #TEMP_T5_T6_SK1; = L 34.5; BLD 103; U #TEMP_T6_T7_SK1; = L 34.6; BLD 103; U #TEMP_T7_T1_Sk1; = L 34.7; BLD 103; U #TEMP_T10_T1_SK1; = L 35.0; BLD 103; U #TEMP_Reset; = L 35.1; BLD 103; U #TEMP_Fr_k_ob; = L 35.2; BLD 103; U #TEMP_Fr_k_mb; = L 35.3; BLD 103; CALL "Schrittkette 1 (Magazin)" , "DB_Schrittkette_1" ( T1_2 := L 34.0, T2_3 := L 34.1, T3_4 := L 34.2, T3_10 := L 34.3, T4_5 := L 34.4, T5_6 := L 34.5, T6_7 := L 34.6, T7_1 := L 34.7, T10_1 := L 35.0, Reset := L 35.1, Weiter_oB := L 35.2, Weiter_mB := L 35.3, Schritt := "OB1_Daten".SK1_Schritt_Nr); NOP 0; NETWORK TITLE =Ausgänge für Schrittkette 1 U #TEMP_Reset; = L 34.0; BLD 103; U #TEMP_Fr_Aktion; = L 34.1; BLD 103; U #TEMP_Aktor_vor; = L 34.2; BLD 103; U #TEMP_Aktor_zurueck; = L 34.3; BLD 103; CALL "Ausgaenge_Schrittkette_1" , "DB_Ausgänge_SK1" ( Schritt_Nr := "OB1_Daten".SK1_Schritt_Nr, Reset := L 34.0, Aktorfreigabe := L 34.1, Aktornummer := #TEMP_Aktornummer, Aktor_vor := L 34.2, Aktor_zurueck := L 34.3); NOP 0; NETWORK TITLE =Transitionen für Schrittkette 2 CALL "Eingänge_Schrittkette_2" , "DB_Transitionen_SK2" ( fuellstand_schieberegist := "OB1_Daten".Schiebereg_Fuellstand, T1_2 := #TEMP_T1_T2_SK2, T2_3 := #TEMP_T2_T3_SK2, T3_4 := #TEMP_T3_T4_SK2, T4_5 := #TEMP_T4_T5_SK2, T5_6 := #TEMP_T5_T6_SK2, T6_7 := #TEMP_T6_T7_SK2, T7_1 := #TEMP_T7_T1_SK2, T1_9 := #TEMP_T1_T9_SK2, T9_10 := #TEMP_T9_T10_SK2, T10_1 := #TEMP_T10_T1_SK2, T4_11 := #TEMP_T4_T11_SK2, T11_12 := #TEMP_T11_T12_SK2, T12_13 := #TEMP_T12_T13_SK2, T13_7 := #TEMP_T13_T7_SK2); NOP 0; NETWORK TITLE =Schrittkette 2 (Prüfen) U #TEMP_T1_T2_SK2; = L 34.0; BLD 103; U #TEMP_T2_T3_SK2; = L 34.1; BLD 103; U #TEMP_T3_T4_SK2; = L 34.2; BLD 103; U #TEMP_T4_T5_SK2; = L 34.3; BLD 103; U #TEMP_T5_T6_SK2; = L 34.4; BLD 103; U #TEMP_T6_T7_SK2; = L 34.5; BLD 103; U #TEMP_T7_T1_SK2; = L 34.6; BLD 103; U #TEMP_T1_T9_SK2; = L 34.7; BLD 103; U #TEMP_T9_T10_SK2; = L 35.0; BLD 103; U #TEMP_T10_T1_SK2; = L 35.1; BLD 103; U #TEMP_T4_T11_SK2; = L 35.2; BLD 103; U #TEMP_T11_T12_SK2; = L 35.3; BLD 103; U #TEMP_T12_T13_SK2; = L 35.4; BLD 103; U #TEMP_T13_T7_SK2; = L 35.5; BLD 103; U #TEMP_Reset; = L 35.6; BLD 103; U #TEMP_Fr_k_ob; = L 35.7; BLD 103; U #TEMP_Fr_k_mb; = L 36.0; BLD 103; CALL "Schrittkette 2 (Prüfen)" , "DB_Schrittkette_2" ( T1_2 := L 34.0, T2_3 := L 34.1, T3_4 := L 34.2, T4_5 := L 34.3, T5_6 := L 34.4, T6_7 := L 34.5, T7_1 := L 34.6, T1_9 := L 34.7, T9_10 := L 35.0, T10_1 := L 35.1, T4_11 := L 35.2, T11_12 := L 35.3, T12_13 := L 35.4, T13_7 := L 35.5, Reset := L 35.6, Weiter_oB := L 35.7, Weiter_mB := L 36.0, Schritt := "OB1_Daten".SK2_Schritt_Nr); NOP 0; NETWORK TITLE =Ausgänge für Schrittkette 2 U #TEMP_Reset; = L 34.0; BLD 103; U #TEMP_Fr_Aktion; = L 34.1; BLD 103; U #TEMP_Aktor_vor; = L 34.2; BLD 103; U #TEMP_Aktor_zurueck; = L 34.3; BLD 103; CALL "Ausgänge_Schrittkette_2" , "DB_Ausgänge_SK2" ( Schritt_Nr := "OB1_Daten".SK2_Schritt_Nr, Reset := L 34.0, Aktorfreigabe := L 34.1, Aktornummer := #TEMP_Aktornummer, Aktor_vor := L 34.2, Aktor_zurueck := L 34.3, gemessene_dicke := #TEMP_gemessene_dicke, gemessene_farbe := #TEMP_gemessene_farbe, gem_wert_schieben := #TEMP_wert_einschieben); NOP 0; NETWORK TITLE =Signal erzeugen: Schieberegister entnehmen L 8; L "OB1_Daten".SK3_Schritt_Nr; ==I ; = #TEMP_schiebereg_aus; NETWORK TITLE =Daten in Schieberegister einschieben und entnehmen U #TEMP_gemessene_farbe; = L 34.0; BLD 103; U #TEMP_wert_einschieben; = L 34.1; BLD 103; U #TEMP_schiebereg_aus; = L 34.2; BLD 103; U #TEMP_Reset; = L 34.3; BLD 103; CALL "Schieberegister" , "DB_Schiebereg_Band" ( Dicke_Eingang := #TEMP_gemessene_dicke, Farbe_Eingang := L 34.0, Einschieben := L 34.1, Ausschieben := L 34.2, reset := L 34.3, Anzahl_Teile := "OB1_Daten".Schiebereg_Fuellstand, Farbe_Ausgang := #TEMP_schiebereg_farbe, Dicke_Ausgang := #TEMP_Dicke); NOP 0; NETWORK TITLE =Dicke von Teil im Greifer und Füllstand Schieberegister ausgeben L "OB1_Daten".Schiebereg_Fuellstand; DTB ; // Kein ITB, weil ITB nur 3-stellig T "Ausgabe_SchReg_Fuellst"; // Auf BCD-Anzeige 1 ausgeben L #TEMP_Dicke; DTB ; // Kein ITB, weil ITB nur 3-stellig T "Ausgabe_Teiledicke"; // Auf BCD-ANzeige 2 ausgeben NETWORK TITLE =Transitionen für Schrittkette 3 U #TEMP_schiebereg_farbe; = L 34.0; BLD 103; CALL "Eingänge Schrittkette_3" , "DB_Transitionen_SK3" ( Anzahl_Teile := "OB1_Daten".SK3_Schritt_Nr_2, Farbe_Rot := L 34.0, T1_2 := #TEMP_T1_T2_SK3, T2_3 := #TEMP_T2_T3_SK3, T3_4 := #TEMP_T3_T4_SK3, T4_5 := #TEMP_T4_T5_SK3, T5_6 := #TEMP_T5_T6_SK3, T6_7_u_6_16 := #TEMP_T6_T7_u_T6_T16_SK3, T7_8 := #TEMP_T7_T8_SK3, T8_9_u_17_9 := #TEMP_T8_T9_u_T17_T9_SK3, T9_10 := #TEMP_T9_T10_SK3, T10_11_u_10_18 := #TEMP_T10_T11_u_10_18_SK3, T11_12 := #TEMP_T11_T12_SK3, T12_13_u_19_13 := #TEMP_T12_T13_u_19_13_SK3, T13_14 := #TEMP_T13_T14_SK3, T14_15 := #TEMP_T14_T15_SK3, T15_1 := #TEMP_T15_T1_SK3, T16_17 := #TEMP_T16_T17_SK3, T18_19 := #TEMP_T18_T19_SK3); NOP 0; NETWORK TITLE =Schrittkette 3 (Greifer) U #TEMP_T1_T2_SK3; = L 34.0; BLD 103; U #TEMP_T2_T3_SK3; = L 34.1; BLD 103; U #TEMP_T3_T4_SK3; = L 34.2; BLD 103; U #TEMP_T4_T5_SK3; = L 34.3; BLD 103; U #TEMP_T5_T6_SK3; = L 34.4; BLD 103; U #TEMP_T6_T7_u_T6_T16_SK3; = L 34.5; BLD 103; U #TEMP_T7_T8_SK3; = L 34.6; BLD 103; U #TEMP_T8_T9_u_T17_T9_SK3; = L 34.7; BLD 103; U #TEMP_T9_T10_SK3; = L 35.0; BLD 103; U #TEMP_T10_T11_u_10_18_SK3; = L 35.1; BLD 103; U #TEMP_T11_T12_SK3; = L 35.2; BLD 103; U #TEMP_T12_T13_u_19_13_SK3; = L 35.3; BLD 103; U #TEMP_T13_T14_SK3; = L 35.4; BLD 103; U #TEMP_T14_T15_SK3; = L 35.5; BLD 103; U #TEMP_T15_T1_SK3; = L 35.6; BLD 103; U #TEMP_T16_T17_SK3; = L 35.7; BLD 103; U #TEMP_T18_T19_SK3; = L 36.0; BLD 103; U #TEMP_Reset; = L 36.1; BLD 103; U #TEMP_Fr_k_ob; = L 36.2; BLD 103; U #TEMP_Fr_k_mb; = L 36.3; BLD 103; CALL "Schrittkette 3 (Greifer)" , "DB_Schrittkette_3" ( T1_2 := L 34.0, T2_3 := L 34.1, T3_4 := L 34.2, T4_5 := L 34.3, T5_6 := L 34.4, T6_7_u_6_16 := L 34.5, T7_8 := L 34.6, T8_9_u_17_9 := L 34.7, T9_10 := L 35.0, T10_11_u_10_18 := L 35.1, T11_12 := L 35.2, T12_13_u_19_13 := L 35.3, T13_14 := L 35.4, T14_15 := L 35.5, T15_1 := L 35.6, T16_17 := L 35.7, T18_19 := L 36.0, Reset := L 36.1, Weiter_ob := L 36.2, Weiter_mb := L 36.3, Schritt := "OB1_Daten".SK3_Schritt_Nr, Schritt2 := "OB1_Daten".SK3_Schritt_Nr_2); NOP 0; NETWORK TITLE =Ausgänge für Schrittkette 3 U #TEMP_Reset; = L 34.0; BLD 103; U #TEMP_Fr_Aktion; = L 34.1; BLD 103; U #TEMP_Aktor_vor; = L 34.2; BLD 103; U #TEMP_Aktor_zurueck; = L 34.3; BLD 103; CALL "Ausgänge_Schrittkette_3" , "DB_Ausgänge_SK3" ( Schritt_Nr := "OB1_Daten".SK3_Schritt_Nr, Schritt_Nr_2 := "OB1_Daten".SK3_Schritt_Nr_2, Reset := L 34.0, Aktornummer := #TEMP_Aktornummer, Aktorfreigabe := L 34.1, Aktor_vor := L 34.2, Aktor_zurueck := L 34.3); NOP 0; END_ORGANIZATION_BLOCK ORGANIZATION_BLOCK "RACK_FLT" TITLE = "Loss Of Rack Fault" VERSION : 0.1 VAR_TEMP OB86_EV_CLASS : BYTE ; //16#38/39 Event class 3 OB86_FLT_ID : BYTE ; //16#C1/C4/C5, Fault identifcation code OB86_PRIORITY : BYTE ; //Priority of OB Execution OB86_OB_NUMBR : BYTE ; //86 (Organization block 86, OB86) OB86_RESERVED_1 : BYTE ; //Reserved for system OB86_RESERVED_2 : BYTE ; //Reserved for system OB86_MDL_ADDR : WORD ; //Base address of IM module in rack with fault OB86_RACKS_FLTD : ARRAY [0 .. 31 ] OF BOOL ; //Racks in fault OB86_DATE_TIME : DATE_AND_TIME ; //Date and time OB86 started END_VAR BEGIN NETWORK TITLE = END_ORGANIZATION_BLOCK ORGANIZATION_BLOCK "COMPLETE RESTART" TITLE = "Complete Restart" //Hochlauf-OB //Wird einmal beim Start der SPS ausgeführt VERSION : 0.1 VAR_TEMP OB100_EV_CLASS : BYTE ; //16#13, Event class 1, Entering event state, Event logged in diagnostic buffer OB100_STRTUP : BYTE ; //16#81/82/83/84 Method of startup OB100_PRIORITY : BYTE ; //Priority of OB Execution OB100_OB_NUMBR : BYTE ; //100 (Organization block 100, OB100) OB100_RESERVED_1 : BYTE ; //Reserved for system OB100_RESERVED_2 : BYTE ; //Reserved for system OB100_STOP : WORD ; //Event that caused CPU to stop (16#4xxx) OB100_STRT_INFO : DWORD ; //Information on how system started OB100_DATE_TIME : DATE_AND_TIME ; //Date and time OB100 started END_VAR BEGIN NETWORK TITLE =1: Erster Zyklus SET ; // Merker "Erster Zyklus" setzen = "Erster_Zyklus"; END_ORGANIZATION_BLOCK FUNCTION "BCD_zu_INT_Wandler" : INT VAR_INPUT bcd_wert : WORD; fehler_wert : INT; END_VAR BEGIN SET ; SAVE ; = L 0.1; L #bcd_wert; L W#16#F; UW ; L 9; >I ; L #bcd_wert; L W#16#F0; UW ; L 144; = L 0.2; >I ; O L 0.2; L #bcd_wert; L W#16#F00; UW ; L 2304; = L 0.2; >I ; O L 0.2; SPBN A7d0; L #fehler_wert; T #RET_VAL; SPA A7d1; A7d0: L #bcd_wert; BTI ; T #RET_VAL; A7d1: CLR ; U L 0.1; SAVE ; BE ; END_FUNCTION