SPS- Programmierung mit ST

nach IEC 61131 mit CODESYS V2.3, CODESYS V3, e!COCKPIT

Vorlagen Kapitel 10  Bibliotheksfähige Funktionsblöcke (FBs), CRAFCET

  Kopieren Sie den Programmcode und fügen Sie diesen in Ihre Entwicklungsumgebung ein.
      


Aufgabe 10.1 FB Regelstreckensimulation mit I-Verhalten
 
FUNCTION_BLOCK BEHAELTER_I
(*Simulation eines niedrigen Behälters - I-Verhalten*)
VAR_INPUT
 rZUFLUSS,rABFLUSS:REAL;(*0 ... 1.0, Eingangsparameter*)
END_VAR
VAR_OUTPUT
 rHOEHE:REAL;(*0 ... 1.0, Ausgangsparameter*)
END_VAR
VAR
 r_m:REAL;(*Steigung*)
END_VAR
IF rHOEHE <= 0.0 THEN (*Begenzung*)
 rHOEHE:= 0.0; rABFLUSS:= 0.0;
END_IF;
r_m:=(rZUFLUSS-rABFLUSS);(*Steigung*)
rHOEHE:= rHOEHE + r_m*0.1/10.0;
IF rHOEHE > 1.0 THEN (*Begenzung*)
 rHOEHE:= 1.0; RETURN;
END_IF;
  
Aufgabe 10.2 FB Digitalfilter
 
FUNCTION_BLOCK FILTER_M
(*Gleitende Mittelwertbildung mit N+1=4*)
VAR_INPUT
 i_X:INT;(*aktueller Eingangswert,0..10V=>0..27648*)
END_VAR
VAR_OUTPUT
 i_Y:INT;(*berechneter Ausgangswert,0..27648=>0..10V*)
END_VAR
VAR
 x0, x1, x2, x3, y:REAL;
END_VAR
(*alte x-Werte verschieben*)
x3:= x2; x2:= x1;....
(*neuen Wert einlesen*)

(*neuen Ausgangswert berechnen*)

(*Wert in INT wandeln*)
  
Aufgabe 10.3 FB Taktgeber
  
FUNCTION_BLOCK CLOCK_R
(*Taktgeber*)
VAR_INPUT
END_VAR
VAR_OUTPUT
 OUT:REAL;
END_VAR
VAR
 n: INT:= 1;(*Zyklenzahl*)
END_VAR
(*Schalten*)
  ???
Aufgabe 10.6 b) Waschstraße mit Betriebsart Hand erweitern
  
PROGRAM PLC_PRG
(********************************************************************
Autowaschanlage, ablauforientiert programmiert, CASE, IF...
mit einer simulierten Waschstraße mit Hilfe der Visualisierung
und den Baustein MODELL_W

Einloggen und Start, beobachten Sie den Ablauf in der Visualisierung.
*********************************************************************)
VAR
 S1_Start, S0_Stopp : BOOL;(*Taster Visu*)
 S2_Hand :BOOL; (*Schalter Handbetrieb Visu zur Aufgabe b*)
 B1_pos_vorw, B2_pos_hauptw, B3_pos_trock: BOOL;(*simulierter Positionsschalter*)
 P1_startbereit AT %QX0.0: BOOL;(*Anzeige*)
 Q1_Band AT %QX0.2: BOOL;(*Schütz Bandantrieb*)
 M1_Vorw AT %QX0.3: BOOL;(*Ventil*)
 M2_Q2_Hauptw AT %QX1.0: BOOL;(*Ventil+ Schütz Bürsten*)
 Q3_Trockner AT %QX1.1: BOOL;(*Schütz Trocknerantrieb*)
 usiSchrittNr:USINT; usiAktionsNr: USINT := 1; (*Visu Anzeige und Eingabe zur Aufgabe b*)
 WASCH1:WASCH; MODELL1:MODELL_W;(*Instanzen*)
END_VAR
(*Modell der Waschstraße, simuliert die Positionsschalter*)
MODELL1(BAND:= Q1_Band, POS_VORW=> B1_pos_vorw,
        POS_HAUPTW=> B2_pos_hauptw, POS_TROCK=> B3_pos_trock);
(*Waschstraße 1*)
WASCH1(
       START:= S1_Start,
       STOPP:= S0_Stopp,
       POS_VORW:= B1_pos_vorw,
       POS_HAUPTW:= B2_pos_hauptw,
       POS_TROCK:= B3_pos_trock,
       BEREIT=> P1_startbereit,
       BAND=> Q1_Band,
       VOR_WAESCHE=> M1_Vorw,
       HAUPT_WAESCHE=> M2_Q2_Hauptw,
       TROCKNER=> Q3_Trockner,
       SCHRITT=> usiSchrittNr);
 
FUNCTION_BLOCK WASCH
VAR_INPUT
 START, STOPP, POS_VORW, POS_HAUPTW, POS_TROCK:BOOL;
END_VAR
VAR_OUTPUT
 BEREIT, BAND, VOR_WAESCHE, HAUPT_WAESCHE, TROCKNER:BOOL;
 SCHRITT:USINT;
END_VAR
VAR
 FREIGABE:RS; TON1:TON;// lokale Instanzen
 step_no: USINT;
END_VAR
(*********** Automatikbetrieb *****************)
(* Schrittkette *)
TON1(IN:= step_no = 4, PT:= T#8S);
CASE step_no OF
 0: IF START THEN
     step_no:= 1;
    END_IF;
 1: IF POS_VORW THEN
     step_no:= 2;
    END_IF;
 2: IF POS_HAUPTW THEN
    
 step_no:= 3;
    END_IF;
 3: IF POS_TROCK THEN
     step_no:= 4;
    END_IF;
 4: IF TON1.Q THEN
     step_no:= 0;
    END_IF;
END_CASE;
(*Aktionsfreigabe*)
FREIGABE(SET:= START, RESET1:= STOPP);
(* Aktionen *)
BEREIT:= step_no = 0;
BAND:= step_no > 0 AND FREIGABE.Q1;
VOR_WAESCHE:= step_no = 2 AND FREIGABE.Q1;
HAUPT_WAESCHE:= step_no = 3 AND FREIGABE.Q1;
TROCKNER:= step_no = 4 AND FREIGABE.Q1;
SCHRITT:=step_no; (*Anzeige*)
  
FUNCTION_BLOCK MODELL_W
(*********************************************
Simulierte die Waschstraße
Sensoren B1...B3 abhängig vom BAND schalten
Steuern und beobachten über die Visualisierung
**********************************************)
VAR_INPUT
 BAND, WEGFAHREN:BOOL;
END_VAR
VAR_OUTPUT
 POS_VORW, POS_HAUPTW, POS_TROCK:BOOL;
END_VAR
VAR
 TON1:TON; CTU1:CTU;
END_VAR
(*Sensoren B1...B3 abhängig vom BAND schalten*)
TON1(IN:= NOT TON1.Q, PT:= T#0.1S);
CTU1(CU:= BAND AND TON1.Q);
POS_VORW:= CTU1.CV > 7 AND CTU1.CV < 31;
POS_HAUPTW:= CTU1.CV > 35 AND CTU1.CV < 60;
POS_TROCK:= CTU1.CV > 65 AND CTU1.CV < 90;
CTU1.RESET:= WEGFAHREN; (*Schaltfläche Visu*)
  
Übung 10.2 Waschstraße mit Drehbürste

Importieren Sie die Vorlage von InfoClick, da diese eine Visualisierung enthält

VAR_GLOBAL
(**********************************************************
Eine Zuordnung zu den Adressen des Prozessabbildes mit dem
Schlüsselwort AT wurde bewusst nicht erstellt, die Variablen
können dann vom MODELL-Baustein leicht beschrieben werden.
**********************************************************)
 S00_Stopp :BOOL;(*Taster Visu*)
 S01_Start :BOOL;(*Taster Visu*)
 S02_Hand :BOOL; (*Schalter Handbetrieb Visu*)
 B01_Anfang :BOOL;(*Anfangsposition, wird von MODELL_B beschrieben*)
 B02_Ende :BOOL;(*Endposition, wird von MODELL_B beschrieben*)
 B11 :BOOL;(*Lichtschranke, wird von MODELL_B beschrieben*)
 B12 :BOOL;(*Lichtschranke, wird von MODELL_B beschrieben*)
 P1_Bereit:BOOL;(*Visu*)
 Q00_Band :BOOL;(*Schütz Förderband, wird von MODELL_B gelesen*)
 M00_Vorwasch :BOOL;(*Ventil Vorwäsche, wird von MODELL_B gelesen*)
 M01_Wasch :BOOL;(*Ventil Hauptwäsche, wird von MODELL_B gelesen*)
 Q10_Buerste :BOOL;(*Schütz Bürstenantrieb, wird von MODELL_B gelesen*)
 M11_ab :BOOL;(*Ventil Bürsten ab, wird von MODELL_B gelesen*)
 M12_auf :BOOL;(*Ventil Bürsten auf, wird von MODELL_B gelesen*)
END_VAR

PROGRAM PLC_PRG
(**********************************************************************
Autowaschstraße mit Drehbürste, Modell und Visualisierung.
Funktionsbeschreibung:
Automatik: Ist das Auto in die Waschstraße gefahren und Start betätigt,
so wird die Anlage freigegeben. Der Bandantrieb schaltet ein, das
Vorwaschventil öffnet. Wird B11 erreicht, so schließt das Vorwasch-
ventil, der Bürstenantrieb schaltet ein, das Hauptwaschventil öffnet.
Solange B11=1 fährt die Bürste über M12 auf, wird B11=0, solange fährt
die Bürste über M11 ab. Dies gilt auch für B12. Wird B02 erreicht,
so wird alles ausgeschaltet.
Handbetrieb: Ist der Schalter Hand eigeschaltet, so kann ein Aktor
abhängig von der Aktionsnumer über Start tippend geschaltet werden.
***********************************************************************)
VAR
 MODELL:MODELL_B;
END_VAR
MODELL(
       BAND:= Q00_Band,
       AUF:= M12_auf,
       AB:= M11_ab,
       ANF=> B01_Anfang,
       END=> B02_Ende,
       SEN1=> B11,
       SEN2=> B12);
(*** Waschstraße 1 der Anlage ***)
????


FUNCTION_BLOCK AUTOWASCH
VAR_INPUT
 xSTOPP, xSTART, xHand:BOOL;(*Visu*)
 usiAKTION_NR:USINT:= 4;(*Eingabe in Visu*)
(*Prozess*)
END_VAR
VAR_OUTPUT
 xBEREIT:BOOL;(*Visu*)
(*Prozess*)
 usiSCHRITTNR: USINT;
END_VAR
VAR
END_VAR
(*** Handbetrieb ******************************
Aktionsnummer wählen und S1-Start betätigen*)

(*** Automatikbetrieb *************************)
(*** Schrittkette ***)

(*** Aktionsfreigabe **************************)

(*** Aktionen *********************************)

FUNCTION_BLOCK MODELL_B
VAR_INPUT
 BAND, Auf, AB:BOOL;
END_VAR
VAR_OUTPUT
 ANF,END,SEN1,SEN2:BOOL;
END_VAR
VAR
 Auto:BOOL;
 z:REAL;(*Position Auto*)
 Auto_ein, Auto_aus: BOOL;(*Visu*)
 v: INT;(*Position Bürste*)
END_VAR
(*Auto*)
IF Auto_ein THEN Auto := TRUE;
 ELSIF Auto_aus THEN Auto:=FALSE;
END_IF;

(*B01 Anfang*)
IF Auto AND z > -80.0 THEN
  ANF:=TRUE;
 ELSE ANF:= FALSE;
END_IF;

(*Auto fährt, Position z*)
IF Auto AND Q00_Band THEN
  z:=z-0.5;
 ELSIF NOT Auto THEN z:=0;
END_IF;

(*B11*)
IF Auto AND v <=0 AND v > -12 AND z < -60 AND z > -90
         OR v > -26 AND z < -88 AND z > -150 THEN
  SEN1:=TRUE;
 ELSE SEN1:= FALSE;
END_IF;

(*B12*)
IF v <=0 AND v > -12 AND z < -100 AND z > -120 OR v > -26
         AND z < -118 AND z > -173 THEN
  SEN2:=TRUE;
 ELSE SEN2:= FALSE;
END_IF;

(*Bürste fährt, Position*)
IF AUF AND v > -30 THEN v:=v-1;
 ELSIF AB AND v <= -1 THEN v:=v+1;
END_IF;

(*B02 Ende*)
IF Auto AND z < -205 THEN
  END:=TRUE;
 ELSE END:= FALSE;
END_IF;  


© Vogel Buchverlag