=== FC 9001: Port1_Telegramme_auswerten  [STL] ===
INTERFACE:
  Input:
  Output:
  InOut:
  Temp:
    QuellDB : Any                                       // Zeiger, wo Empfangsdaten sind
    ZielDB : Any                                        // Zeiger, wo Auswertesdaten sind
    Teleg_Kennung_A : DWord
    Teleg_Kennung_B : DWord
    Teleg_Kennung_C : Word
    AMR_DB : Int
    AMR_DW : Int
    Error : Bool
    Lampe_aktivieren : Bool
    AR1Zeiger : DWord                                   // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
    AR1Start : DInt                                     // Startwert mit Offset 0
    PLC_ABP : Word
  Constant:
  Return:
    Ret_Val : Void

--- NW 1: Telegrammkopf übergeben ---
// Kennung A:
      L      "SS_Port1_EmpfangsDaten".Port1.TelegrammKennung[1]
      T      LB20
      L      "SS_Port1_EmpfangsDaten".Port1.TelegrammKennung[2]
      T      LB21
      L      "SS_Port1_EmpfangsDaten".Port1.TelegrammKennung[3]
      T      LB22
      L      "SS_Port1_EmpfangsDaten".Port1.TelegrammKennung[4]
      T      LB23

// Kennung B:
      L      "SS_Port1_EmpfangsDaten".Port1.TelegrammKennung[5]
      T      LB24
      L      "SS_Port1_EmpfangsDaten".Port1.TelegrammKennung[6]
      T      LB25
      L      "SS_Port1_EmpfangsDaten".Port1.TelegrammKennung[7]
      T      LB26
      L      "SS_Port1_EmpfangsDaten".Port1.TelegrammKennung[8]
      T      LB27

// Kennung C:
      L      "SS_Port1_EmpfangsDaten".Port1.TelegrammKennung[9]
      T      LB28
      L      "SS_Port1_EmpfangsDaten".Port1.TelegrammKennung[10]
      T      LB29


--- NW 2: WSAD-Telegramm ? (Arbeitsplatz aktivieren / deaktivieren) ---
      L      Teleg_Kennung_A
      L      'WSAD'
      ==D
      JCN    NoWSAD

CALL FC "Host_ABPtoPLC_ABP" (Host_ABP:="SS_Port1_EmpfangsDaten".Port1.StationsNr, PLC-ABP:=PLC_ABP)

CALL FC "AMRZeiger_ermitteln" (AMR_X:=PLC_ABP, AMR_DB:=AMR_DB, AMR_DW:=AMR_DW, Error:=Error)

      A      Error
      JC     Unbekannt

// Ziel-Pointer erzeugen: (PLC-Daten)
      L      AMR_DW
      ITD
      T      AR1Start                                        // Startwert mit Offset 0

// Externe Anzeige steuern?:
      L      "SS_Port1_EmpfangsDaten".Port1.Aktion_1
      L      11                                              // Einschalten?
      ==I                                                    // Ja !
      =      Lampe_aktivieren
      JC     ExtL

      CAC
      L      12                                              // Ausschalten?
      ==I                                                    // Ja !
      JC     ExtL

// Aktivieren / Deaktivieren:
      L      AR1Start                                        // Startwert mit Offset 0
      +      DINT#62                                         // Offset für Status
      SLD    3
      L      0                                               // Damit DBX_Bit 0
      OD
      T      AR1Zeiger                                       // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)

      A      "SS_Port1_EmpfangsDaten".Port1.Aktion_2[0]
      OPN    DB[AMR_DB]                                      // ABP-DB öffnen
      =      DBX [AR1Zeiger]                                 // ABP aktivieren / deaktivieren

      BEU

// Externe Lampe ein-/ausschalten
ExtL: L      AR1Start                                        // Startwert mit Offset 0
      +      DINT#60                                         // Offset für SS
      SLD    3
      L      7                                               // Damit DBX_Bit 7
      OD
      T      AR1Zeiger                                       // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)

      A      Lampe_aktivieren
      OPN    DB[AMR_DB]                                      // ABP-DB öffnen
      =      DBX [AR1Zeiger]                                 // ABP aktivieren / deaktivieren

      BEU

NoWSAD: NOP 0


--- NW 3: INDX-Telegramm ? (Arbeitsplatz-Linien-Versorgung ---
      L      Teleg_Kennung_A
      L      'INDX'
      ==D
      JCN    NoINDX

CALL FC "Host_ABPtoPLC_ABP" (Host_ABP:="SS_Port1_EmpfangsDaten".Port1.StationsNr, PLC-ABP:=PLC_ABP)

CALL FC "AMRZeiger_ermitteln" (AMR_X:=PLC_ABP, AMR_DB:=AMR_DB, AMR_DW:=AMR_DW, Error:=Error)

      A      Error
      JC     Unbekannt

// Ziel-Pointer erzeugen: (PLC-Daten)
      L      AMR_DW
      ITD
      T      AR1Start                                        // Startwert mit Offset 0

      L      AR1Start                                        // Startwert mit Offset 0
      +      DINT#60                                         // Offset für Status
      SLD    3
      L      "SS_Port1_EmpfangsDaten".Port1.Puffer_LinienNr
      OD
      T      AR1Zeiger                                       // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)

      SET
      OPN    DB[AMR_DB]                                      // ABP-DB öffnen
      =      DBX [AR1Zeiger]                                 // Platz resetten

      BEU

NoINDX: NOP 0


--- NW 4: ECNT-Telegramm ? (Arbeitsplatz nach Beladen ausfahren ---
      L      Teleg_Kennung_A
      L      'ECNT'
      ==D
      JCN    NoECNT

CALL FC "Host_ABPtoPLC_ABP" (Host_ABP:="SS_Port1_EmpfangsDaten".Port1.StationsNr, PLC-ABP:=PLC_ABP)

CALL FC "AMRZeiger_ermitteln" (AMR_X:=PLC_ABP, AMR_DB:=AMR_DB, AMR_DW:=AMR_DW, Error:=Error)

      A      Error
      JC     Unbekannt

// Ziel-Pointer erzeugen: (PLC-Daten)
      L      AMR_DW
      ITD
      T      AR1Start                                        // Startwert mit Offset 0

      L      AR1Start                                        // Startwert mit Offset 0
      +      DINT#61                                         // Offset Status b
      SLD    3
      L      "SS_Port1_EmpfangsDaten".Port1.Puffer_LinienNr
      OD
      T      AR1Zeiger                                       // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)

      SET
      OPN    DB[AMR_DB]                                      // ABP-DB öffnen
      =      DBX [AR1Zeiger]                                 // Platz resetten

      BEU

NoECNT: NOP 0


--- NW 5: Unbekanntes Telegramm ---
Unbekannt: CALL FC "DBMOV" (QuellDB:=9001, QuellDW:=0, ZielDB:=9001, ZielDW:=30, Anzahl_DW:=15, RE_VAL:="MW196")   // Letztes ???-Telegramm speichern


--- NW 6: Baustein Ende ---
      BE

