FUNCTION_BLOCK FB 1
TITLE =
//Erste_Schritte_AWL
AUTHOR : Siemens
FAMILY : GetStart
NAME : ENGINE
VERSION : 1.0


VAR_INPUT
  Switch_On : BOOL ;	//Motor einschalten
  Switch_Off : BOOL ;	//Motor ausschalten
  Failure : BOOL ;	//Motorstörung, führt zum Ausschalten
  Actual_Speed : INT ;	//tatsächliche Motordrehzahl
END_VAR
VAR_OUTPUT
  Engine_On : BOOL ;	//Motor wird eingeschaltet
  Preset_Speed_Reached : BOOL ;	//Solldrehzahl erreicht
END_VAR
VAR
  Preset_Speed : INT  := 1500;	//geforderte Motordrehzahl
END_VAR
BEGIN
NETWORK
TITLE =Motor einschalten, Negation von Signalen
//Zum Einschalten des Motors werden die Operationen S (Setzen) und R (Rücksetzen) 
//verwendet und so ein speicherndes Verhalten erreicht.
//
//Der Motor wird eingeschaltet, wenn die Variable #Switch_On eingeschaltet ist 
//(Signalzustand "1" führt) und die Variable "Automatikbetrieb" ausgeschaltet ist
//(Signalzustand "0" führt). Die Abfrage auf Signalzustand "0" wird durch ein 
//nachgestelltes "N" also "UN" dargestellt.
//
//Der Motor wird wieder ausgeschaltet, wenn die Variable #Switch_Off einge-
//schaltet ist oder die Variable #Failure Signalzustand "0" führt. #Failure
//ist ein "nullaktives" Signal, das im Normalfall "1" führt (wenn keine Störung
//ansteht) und im Störfall "0" führt. Auch hier erreichen wir die gewünschte
//Funktionalität, wenn wir das Signal #Failure mit "ON" auf Signalzustand "0" 
//abfragen.
//
//Hinweis: "Bausteinlokale" Variablen werden mit #name dargestellt; sie sind nur
//im Baustein "gültig". Globale Variablen "name" stehen in Anführungszeichen; sie
//sind im gesamten Programm "gültig".
      U     #Switch_On;
      UN    A      4.2;
      S     #Engine_On;
      O     #Switch_Off;
      ON    #Failure;
      R     #Engine_On;
NETWORK
TITLE =Drehzahl überwachen
//Ein Vergleicher überwacht die Motordrehzahl. Er prüft, ob die Istdrehzahl
//größer oder gleich der Solldrehzahl ist. Ist das der Fall, setzt der Vergleicher
//die Variable #Preset_Speed_Reached.
//
//Die zu vergleichenden Variablen werden mit der Ladeanweisung "L" in die
//internen Register geladen. Die Anweisung ">=I" vergleicht dann den Inhalt
//der internen Register (hier: auf größer-gleich mit Zahlenformat INTEGER)
//und liefert ein binäres Vergleichsergebnis. Dieses wird der Variablen
//#Preset_Speed_Reached zugewiesen.
//
//Die Motor-Istdrehzahl ist ein Eingangs-Bausteinparameter (Deklaration "in"), 
//da sie motorspezifisch ist. Auch die Solldrehzahl ist motorspezifisch; da sie
//jedoch ein fester Wert ist, kann sie statisch in den Motordaten gespeichert 
//werden (Deklaration "stat"). Man spricht hier von "statischen Lokalvariablen".
      L     #Actual_Speed;
      L     #Preset_Speed;
      >=I   ;
      =     #Preset_Speed_Reached;
END_FUNCTION_BLOCK

