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

DATA_BLOCK DB 1
TITLE =
//Erste_Schritte_AWL
AUTHOR : Siemens
FAMILY : GetStart
NAME : Petrol
VERSION : 1.0

 FB 1
BEGIN
   Switch_On := FALSE; 
   Switch_Off := FALSE; 
   Failure := FALSE; 
   Actual_Speed := 0; 
   Engine_On := FALSE; 
   Preset_Speed_Reached := FALSE; 
   Preset_Speed := 1500; 
END_DATA_BLOCK

DATA_BLOCK DB 2
TITLE =
//Erste_Schritte_AWL
AUTHOR : Siemens
FAMILY : GetStart
NAME : Diesel
VERSION : 1.0

 FB 1
BEGIN
   Switch_On := FALSE; 
   Switch_Off := FALSE; 
   Failure := FALSE; 
   Actual_Speed := 0; 
   Engine_On := FALSE; 
   Preset_Speed_Reached := FALSE; 
   Preset_Speed := 1200; 
END_DATA_BLOCK

FUNCTION FC 1: VOID
TITLE =
//Erste_Schritte_AWL
AUTHOR : Siemens
FAMILY : GetStart
NAME : FAN
VERSION : 1.0


VAR_INPUT
  Engine_On : BOOL ;	//Signal für das Einschalten des Motors
  Timer_Function : TIMER ;	//verwendete Zeitfunktion für die Ausschaltverzögerung
END_VAR
VAR_OUTPUT
  Fan_On : BOOL ;	//Signal für das Einschaltes des Lüfters
END_VAR
BEGIN
NETWORK
TITLE =Lüftersteuerung
//Mit dem Eingangsparameter #Engine_On wird über die Anweisung SA (Starte Zeit
//als Ausschaltverzögerung) die Variable #Timer_Function gestartet.
//#Timer_Function, mit dem Datentyp TIMER, steht hier für eine Zeitfunktion, die 
//später beim Aufruf im OB 1 mit einem Zeitoperanden (z.B. T 1) versorgt wird. 
//Für jedes Motor-Lüfter-Paar müssen Sie beim Aufruf einen anderen Zeitoperanden 
//wählen.
//
//Vor dem Laden wird eine konstante Ausschaltverzögerung mit 4 s Dauer geladen. 
//Sie können die Zeitdauer auch als Eingangsparameter mit dem Datentyp S5TIME 
//übergeben, so daß für jeden Motor eine andere Nachlaufzeit für den jeweiligen 
//Lüfter parametriert werden kann.
      U     #Engine_On;
      L     S5T#4S;
      SA    #Timer_Function;

      U     #Timer_Function;
      =     #Fan_On;
END_FUNCTION

ORGANIZATION_BLOCK OB 1
TITLE =
//Erste_Schritte_AWL
AUTHOR : Siemens
FAMILY : GetStart
NAME : Cycle
VERSION : 1.0


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 ;	//1 (Priority of 1 is lowest)
  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
END_VAR
BEGIN
NETWORK
TITLE =UND-Abfrage
//Wenn der "Taster 1" (E 0.1) und der "Taster 2" (E 0.2) eingeschaltet sind 
//(d.h. Signalzustand "1" = 24V führen), dann ist die "Lampe Grün" (A 4.0) 
//eingeschaltet.
//
//Es müssen beide Eingänge eingeschaltet sein, damit die Lampe leuchtet.
      U     E      0.1;
      U     E      0.2;
      =     A      4.0;

NETWORK
TITLE =ODER-Abfrage
//Wenn der "Taster 3" (E 0.3) oder der "Taster 4" (E 0.4) eingeschaltet ist
//(d.h. Signalzustand "1" = 24 V führen), dann ist die "Lampe Rot" (A 4.1)
//eingeschaltet.
//
//Es genügt, wenn einer der Eingänge eingeschaltet ist, damit die Lampe leuchtet.
      O     E      0.3;
      O     E      0.4;
      =     A      4.1;

NETWORK
TITLE =Speicherndes Ein- und Ausschalten
//Wenn "Automatik Ein" (E0.5) eingeschaltet ist, dann wird mit der Operation S 
//auch "Automatikbetrieb" (A4.2) eingeschaltet und bleibt eingeschaltet, wenn 
//"Automatik Ein" (E0.5) wieder ausgeschaltet wird.
//
//Wenn "Hand Ein" (E0.6) eingeschaltet ist, dann wird mit der Operation R
//"Automatikbetrieb" (A4.2) wieder ausgeschaltet und bleibt ausgeschaltet, auch 
//wenn "Hand Ein" (E0.6) wieder ausgeschaltet wird.
//
//Der Signalzustand wird mit den Operationen S (Setzen) und R (Rücksetzen) 
//gespeichert. Wenn Sie beide Eingänge gleichzeitig einschalten, dann
//wird zuerst das Setzen und dann das Rücksetzen bearbeitet. Bedingt durch 
//die Programmierreihenfolge "siegt" letztendlich das Rücksetzen: 
//"Automatik Ein" (A4.2) wird oder bleibt ausgeschaltet. 
//Man sagt: "Rücksetzen hat Vorrang".
      U     E      0.5;
      S     A      4.2;
      U     E      0.6;
      R     A      4.2;


NETWORK
TITLE =Benzinmotor einschalten
//Aufruf des Funktionsbausteins FB 1 ("Motor") mit den Daten für einen
//Benzinmotor (Datenbaustein "Benzin" DB 1).
      CALL FB     1 , DB     1 (
           Switch_On                := E1.0,
           Switch_Off               := E1.1,
           Failure                  := E1.2,
           Actual_Speed             := MW2,
           Engine_On                := A5.0,
           Preset_Speed_Reached     := A5.1);


NETWORK
TITLE =Dieselmotor einschalten
//Aufruf des Funktionsbausteins FB 1 ("Motor") mit den Daten für einen
//Dieselmotor (Datenbaustein "Diesel" DB 2).
      CALL FB     1 , DB     2 (
           Switch_On                := E1.4,
           Switch_Off               := E1.5,
           Failure                  := E1.6,
           Actual_Speed             := MW4,
           Engine_On                := A5.4,
           Preset_Speed_Reached     := A5.5);


NETWORK
TITLE =Lüftersteuerung für Benzinmotor
//Aufruf der Funktion FC 1 für den Benzinmotor.
      CALL FC     1 (
           Engine_On                := A5.0,
           Timer_Function           := T1,
           Fan_On                   := A5.2);



NETWORK
TITLE =Lüftersteuerung für Dieselmotor
//Aufruf der Funktion FC 1 für den Dieselmotor.
      CALL FC     1 (
           Engine_On                := A5.4,
           Timer_Function           := T2,
           Fan_On                   := A5.6);



END_ORGANIZATION_BLOCK

