ORGANIZATION_BLOCK "Cycle Execution"
TITLE = Hauptprogramm
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
VERSION : 0.1
//H&M Cheb
   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 : "OB1-Date+Time";   // Date and time OB1 started
   END_VAR


BEGIN
NETWORK
TITLE = Version / Ersteller / letzter Bearbeiter, Datum
      L 'H&M'              ;//Projekt H&M in Cheb
      L 'Fort'             ;//Fortna
      L 'na';
      L 'Cheb'             ;//Cheb
      L 500592             ;//500592
      L 'UH06'             ;//AMR UH06
      L 'IBAE'             ;//Version

      L 'IBAE';//Ersteller

      L 'IBAE';//Letzter Bearbeiter
      L '1106'             ;//Letzte Bearbeitung (Tag/Monat)
      L '2026'             ;//Letzte Bearbeitung (Jahr)
      L 'Ja'             ;//Beim Kunden eingespielt
      L 'Ja'             ;//Internes EPROM

NETWORK
TITLE = Performance-Test

//Aktivieren:
      CLR;
      = "FB_PerfTest_6_Einfahrt".xTestActive;
      = "FB_PerfTest_6_180Grad".xTestActive;
      = "FB_PerfTest_6_PS5_Einfahrt".xTestActive;
      = "FB_PerfTest_6_PS5_Ausfahrt".xTestActive;
      = "FB_PerfTest_6_PS4_Einfahrt".xTestActive;
      = "FB_PerfTest_6_PS4_Ausfahrt".xTestActive;
      = "FB_PerfTest_6_PS3_Einfahrt".xTestActive;
      = "FB_PerfTest_6_PS3_Ausfahrt".xTestActive;
      = "FB_PerfTest_6_PS2_Einfahrt".xTestActive;
      = "FB_PerfTest_6_PS2_Ausfahrt".xTestActive;
      = "FB_PerfTest_6_PS1_Einfahrt".xTestActive;
      = "FB_PerfTest_6_PS1_Ausfahrt".xTestActive;
      = "FB_PerfTest_6_MPS3_Einfahrt".xTestActive;
      = "FB_PerfTest_6_MPS3_Ausfahrt".xTestActive;
      = "FB_PerfTest_6_MPS2_Einfahrt".xTestActive;
      = "FB_PerfTest_6_MPS2_Ausfahrt".xTestActive;
      = "FB_PerfTest_6_MPS1_Einfahrt".xTestActive;
      = "FB_PerfTest_6_MPS1_Ausfahrt".xTestActive;
      = "FB_PerfTest_6_Ausfahrt".xTestActive;

//Resetten:
      CLR;
      = "FB_PerfTest_6_Einfahrt".xInReset;
      = "FB_PerfTest_6_180Grad".xInReset;
      = "FB_PerfTest_6_PS5_Einfahrt".xInReset;
      = "FB_PerfTest_6_PS5_Ausfahrt".xInReset;
      = "FB_PerfTest_6_PS4_Einfahrt".xInReset;
      = "FB_PerfTest_6_PS4_Ausfahrt".xInReset;
      = "FB_PerfTest_6_PS3_Einfahrt".xInReset;
      = "FB_PerfTest_6_PS3_Ausfahrt".xInReset;
      = "FB_PerfTest_6_PS2_Einfahrt".xInReset;
      = "FB_PerfTest_6_PS2_Ausfahrt".xInReset;
      = "FB_PerfTest_6_PS1_Einfahrt".xInReset;
      = "FB_PerfTest_6_PS1_Ausfahrt".xInReset;
      = "FB_PerfTest_6_MPS3_Einfahrt".xInReset;
      = "FB_PerfTest_6_MPS3_Ausfahrt".xInReset;
      = "FB_PerfTest_6_MPS2_Einfahrt".xInReset;
      = "FB_PerfTest_6_MPS2_Ausfahrt".xInReset;
      = "FB_PerfTest_6_MPS1_Einfahrt".xInReset;
      = "FB_PerfTest_6_MPS1_Ausfahrt".xInReset;
      = "FB_PerfTest_6_Ausfahrt".xInReset;

//AMR Einfahrt:
      CALL "FB_PerfTest", "FB_PerfTest_6_Einfahrt"
      (  nInSepNo                    := 3567 , 
         xInSepFlag                  := "BG3567"
      );

//AMR vor 180 Grad-Bogen:
      CALL "FB_PerfTest", "FB_PerfTest_6_180Grad"
      (  nInSepNo                    := 3487 , 
         xInSepFlag                  := "MB3487"
      );

//PS5:
      CALL "FB_PerfTest", "FB_PerfTest_6_PS5_Einfahrt"
      (  nInSepNo                    := 3242 , 
         xInSepFlag                  := "BG3242"
      );

      CALL "FB_PerfTest", "FB_PerfTest_6_PS5_Ausfahrt"
      (  nInSepNo                    := 3262 , 
         xInSepFlag                  := "MB3262"
      );

//PS4:
      CALL "FB_PerfTest", "FB_PerfTest_6_PS4_Einfahrt"
      (  nInSepNo                    := 3272 , 
         xInSepFlag                  := "BG3272"
      );

      CALL "FB_PerfTest", "FB_PerfTest_6_PS4_Ausfahrt"
      (  nInSepNo                    := 3291 , 
         xInSepFlag                  := "MB3291"
      );

//PS3:
      CALL "FB_PerfTest", "FB_PerfTest_6_PS3_Einfahrt"
      (  nInSepNo                    := 3302 , 
         xInSepFlag                  := "BG3302"
      );

      CALL "FB_PerfTest", "FB_PerfTest_6_PS3_Ausfahrt"
      (  nInSepNo                    := 3321 , 
         xInSepFlag                  := "MB3321"
      );

//PS2:
      CALL "FB_PerfTest", "FB_PerfTest_6_PS2_Einfahrt"
      (  nInSepNo                    := 3332 , 
         xInSepFlag                  := "BG3332"
      );

      CALL "FB_PerfTest", "FB_PerfTest_6_PS2_Ausfahrt"
      (  nInSepNo                    := 3351 , 
         xInSepFlag                  := "MB3351"
      );

//PS1:
      CALL "FB_PerfTest", "FB_PerfTest_6_PS1_Einfahrt"
      (  nInSepNo                    := 3362 , 
         xInSepFlag                  := "BG3362"
      );

      CALL "FB_PerfTest", "FB_PerfTest_6_PS1_Ausfahrt"
      (  nInSepNo                    := 3381 , 
         xInSepFlag                  := "MB3381"
      );

//MPS3:
      CALL "FB_PerfTest", "FB_PerfTest_6_MPS3_Einfahrt"
      (  nInSepNo                    := 3392 , 
         xInSepFlag                  := "BG3392"
      );

      CALL "FB_PerfTest", "FB_PerfTest_6_MPS3_Ausfahrt"
      (  nInSepNo                    := 3411 , 
         xInSepFlag                  := "MB3411"
      );

//MPS2:
      CALL "FB_PerfTest", "FB_PerfTest_6_MPS2_Einfahrt"
      (  nInSepNo                    := 3422 , 
         xInSepFlag                  := "BG3422"
      );

      CALL "FB_PerfTest", "FB_PerfTest_6_MPS2_Ausfahrt"
      (  nInSepNo                    := 3441 , 
         xInSepFlag                  := "MB3441"
      );

//MPS1:
      CALL "FB_PerfTest", "FB_PerfTest_6_MPS1_Einfahrt"
      (  nInSepNo                    := 3452 , 
         xInSepFlag                  := "BG3452"
      );

      CALL "FB_PerfTest", "FB_PerfTest_6_MPS1_Ausfahrt"
      (  nInSepNo                    := 3471 , 
         xInSepFlag                  := "MB3471"
      );

//Ausfahrt:
      CALL "FB_PerfTest", "FB_PerfTest_6_Ausfahrt"
      (  nInSepNo                    := 3542 , 
         xInSepFlag                  := "BG3542"
      );

NETWORK
TITLE = Zum Suchen
      SET;
///      R     "SF0000"             ///Damit Anlage aus!

      U "MB3073";
      U "MB3242";

      CLR;

NETWORK
TITLE = Neustart ?
      U "SGes".Neustart;
      L s5t#30s;
      SE "T0";
      U "T0";
      U "SF0000"           ;//Also haben Eingänge Verbindung
      R "SGes".Neustart;

      U "SGes".Neustart;
      = "6_HMI_Err_UH06_AMR".System.Bus_Anlauf;
      BEB;

      U "M900.7";
      R "DAMR_Bereich".A01_UH06.Not_Aus.UH06;
      R "DAMR_Bereich".A01_UH06.Not_Aus.UZ0601;
      R "DAMR_Bereich".A01_UH06.Not_Aus.UZ0602;
      R "DAMR_Bereich".A01_UH06.Not_Aus.UZ0603;
      R "DAMR_Bereich".A01_UH06.Not_Aus.UZ0611;
      R "DAMR_Bereich".A01_UH06.Not_Aus.UZ0612;
      R "DAMR_Bereich".A01_UH06.Not_Aus.UZ0613;
      R "DAMR_Bereich".A01_UH06.Not_Aus.UZ0614;
      R "DAMR_Bereich".A01_UH06.Not_Aus.UZ0615;
      R "DAMR_Bereich".A01_UH06.Not_Aus.UZ0621;
      R "DAMR_Bereich".A01_UH06.Not_Aus.UZ0622;
      R "DAMR_Bereich".A01_UH06_Halle4.Not_Aus.UZ0620;
      R "DAMR_Bereich".A01_UC061.Not_Aus.UZ6102;
      R "DAMR_Bereich".A01_UC061.Not_Aus.UZ6103;
      R "DAMR_Bereich".A01_UC061.Not_Aus.UZ6104;

NETWORK
TITLE = Simulation / Anlage blockieren

//SET: Anlage kann nicht eingeschaltet werden
//CLR: Anlage Normalbetrieb
      CLR;
      R "SF0000";

//AMR: Ausfahren automatisch alle 20s simulieren
      SET;
      R "DAMR_Bereich".Simulation.aktiv;

//Ohne PC fahren
      SET;
      R "SGes".Ohne_PC_Fahren;

//Simulation ohne Hardware
      SET;
      R "SGes".Simulation_ohne_HW_aktiv;

//Erst mal ohne Not-Aus-Partner:
      SET;
      S "DSchnittstelle_zu_Safety".ToSafety.Ohne_Partner;

//Start nach Störung am UH07:
      U "M900.7";
      R "M900.7";
      S "SF0002";
      S "SF0177"           ;//UC061

//Feuer-/BST-Zeug:
      U "DI0033"           ;//Meldezentrale
      U "DI0034";
      U "DI0035"           ;//BST4
      U "DI0036";
      U "DI0037";
      U "DI0170"           ;//BST3
      U "DI0171";
      U "DI0172";
      CLR;

NETWORK
TITLE = Eingang ansteuern
      CALL "Set_Input"
      (  Enable                      := "M2000.1" , 
         Status                      := "M2000.0" , 
         InByte                      := "MD2002" , 
         InBit                       := "MW2006"
      );

      U "SF0002";
//      S     "SF0177" //Molina auskommentiert 19.05.2026. Hauptschrank quittiert nur AMR
      S "SF0041";
      S "SF0043";
      S "SF0045";
      S "SF0047";
      S "SF0051";//Molina eingefügt 19.05.2026
      S "SF0053";//Molina eingefügt 19.05.2026
      S "SF0055";//Molina eingefügt 19.05.2026
      S "SF0057";//Molina eingefügt 19.05.2026
//      S     "SF0121" //Molina auskommentiert 19.05.2026. Hauptschrank quittiert nur AMR
      S "SF0123";
      S "SF0125";
//      S     "SF0182" //Molina auskommentiert 19.05.2026. Hauptschrank quittiert nur AMR
//      S     "SF0183" //Molina auskommentiert 19.05.2026. Hauptschrank quittiert nur AMR
//      S     "SF0184" //Molina auskommentiert 19.05.2026. Hauptschrank quittiert nur AMR
//      S     "SF0185" //Molina auskommentiert 19.05.2026. Hauptschrank quittiert nur AMR
//      S     "SF0186" //Molina auskommentiert 19.05.2026. Hauptschrank quittiert nur AMR
//      S     "SF0187" //Molina auskommentiert 19.05.2026. Hauptschrank quittiert nur AMR

NETWORK
TITLE = Daten von Host empfangen
      CALL "Daten_von_Host_empfangen", "DDaten_von_Host_empfangen";

NETWORK
TITLE = Daten von UH07/Outbound holen
      U "INTERFACE_FROM_UH07_Byte1".%X0;
      = "DSchnittstelle_zu_Outbound".From_UH07.MA0203_A_vor;
      U "INTERFACE_FROM_UH07_Byte1".%X1;
      = "DSchnittstelle_zu_Outbound".From_UH07.MA0203_A_start;
      U "INTERFACE_FROM_UH07_Byte1".%X2;
      = "DSchnittstelle_zu_Outbound".From_UH07.MA0200_kein_Stau;
      U "INTERFACE_FROM_UH07_Byte1".%X3;
      = "DSchnittstelle_zu_Outbound".From_UH07.MA0200_aktiv;
      U "INTERFACE_FROM_UH07_Byte1".%X4;
      = "DSchnittstelle_zu_Outbound".From_UH07.BG3724_aktiv;

NETWORK
TITLE = 100ms Impuls Takt erzeugen / Taktanzahl übergeben
      U "M35.0";//von OB35 (100ms Zeitinterrupt)
      R "M35.0";
      = "100ms-Impuls";//nur als Impuls
      L "MW36"             ;//Anzahl der 100ms-Takte
      T "MW2";//übernehmen

      L 0;
      T "MW36";//Takte neu aufaddieren

      L "MW38";//Anzahl der 10ms-Takte
      T "MW4";//übernehmen

      L 0;
      T "MW38";//Takte neu aufaddieren

//Old-Takt erzeugen:
      L "Clock_Byte";
      T "Old_Takt";

      U "1s-Takt";
      FP "Fp-1s-Impuls";
      = "1s-Impuls"        ;//1s-Impuls

      UN "10s-Impuls";
      L S5T#10S;
      SE "T10";
      U "T10";
      = "10s-Impuls";

NETWORK
TITLE = Systemzeit übergeben
      L #OB1_DATE_TIME.Jahr;
      T "SGes".DATE_TIME.Jahr;

      L #OB1_DATE_TIME.Monat;
      T "SGes".DATE_TIME.Monat;

      L #OB1_DATE_TIME.Tag;
      T "SGes".DATE_TIME.Tag;

      L #OB1_DATE_TIME.Stunde;
      BTI;//Wandeln in
      + 1                  ;//CPU-Systemzeit ist 1h zu wenig (keine Ahnung warum)
      ITB;
      T "SGes".DATE_TIME.Stunde;

      L #OB1_DATE_TIME.Minute;
      T "SGes".DATE_TIME.Minute;

      L #OB1_DATE_TIME.Sekunde;
      T "SGes".DATE_TIME.Sekunde;

      L #OB1_DATE_TIME.MSekunde;
      T "DAMR_Bereich".Simulation.MSekunden;

NETWORK
TITLE = System
      CALL "AMR_Bereich", "DAMR_Bereich";

NETWORK
TITLE = Kamera-Leser
      CALL "FB_BarcodeReader", "FB_BarcodeReader_DB";

      CALL "FB_CommunicationWES_DeviceHub", "FB_CommunicationWES_DeviceHub_DB"
      (  fbInOutSendFIFO             := "DB_LGF_FIFO_CommWES" , 
         arFifoSendBuffer            := "DB_Buffer_CommunicationWES".BUFFER
      );

      CALL "FB_CommunicationLogger", "FB_CommunicationLogger_DB"
      (  fbInOutSendFIFO             := "DB_LGF_FIFO_CommLogger" , 
         arFifoSendBuffer            := "DB_Buffer_CommunicationLogger".BUFFER
      );



NETWORK
TITLE = 0_Higway > AMR
      CALL "HW>AMR_Bereich";

NETWORK
TITLE = 1_Arbeitsplätze
      CALL "Arbeitsplätze";

NETWORK
TITLE = 2_Highway > Outbound
      CALL "HW>OB_Bereich";

NETWORK
TITLE = Visu-Zeug
      CALL "Visu_HMOmniSchleuse", "DVisu_HMOmnischleuse";

      CALL "Visu_HMOmniSchleuse_Plus", "DVisu_HMOmniSchleuse_Plus";

      CALL "Visu_HMOmniBereich_Plus", "DVisu_HMOmniBereich_Plus";

      CALL "Visu_HMOmniWeiche", "DVisu_HMOmniWeiche";

      CALL "Visu_HM_ABP", "DVisu_HM_ABP";

      CALL "Visu_CheckTrolley", "DVisu_CheckTrolley";

NETWORK
TITLE = Lampentest
      CALL "LTest";

NETWORK
TITLE = Ausgang ansteuern
      CALL "Set_Output"
      (  Enable                      := "M1000.1" , 
         Status                      := "M1000.0" , 
         OutByte                     := "MD1002" , 
         OutBit                      := "MW1006"
      );

NETWORK
TITLE = Daten an UH07/Outbound senden
      U "DSchnittstelle_zu_Outbound".To_UH07.MA0200_A_vor;
      = "INTERFACE_TO_UH07_Byte2".%X0;
      U "DSchnittstelle_zu_Outbound".To_UH07.MA0200_A_start;
      = "INTERFACE_TO_UH07_Byte2".%X1;
      U "DSchnittstelle_zu_Outbound".To_UH07.MA0203_kein_Stau;
      = "INTERFACE_TO_UH07_Byte2".%X2;
      U "DSchnittstelle_zu_Outbound".To_UH07.MA0203_aktiv;
      = "INTERFACE_TO_UH07_Byte2".%X3;

NETWORK
TITLE = Daten an Host senden
      CALL "Daten_Host_senden", "DDaten_Host_senden";

NETWORK
TITLE = Daten in SendFifo schreiben
      U "M83.1";
      R "M83.1";
      SPBN nix;

      CALL "Daten_in_SendFIFO_speichern", "Daten_für_SendFIFO"
      (  "TelegrammKennung[1]"       := 'B' , 
         "TelegrammKennung[2]"       := '2' , 
         "TelegrammKennung[3]"       := 'C' , 
         "TelegrammKennung[4]"       := 'D' , 
         "TelegrammKennung[5]"       := 'E' , 
         "TelegrammKennung[6]"       := 'F' , 
         "TelegrammKennung[7]"       := 'G' , 
         "TelegrammKennung[8]"       := 'I' , 
         "TelegrammKennung[9]"       := 'J' , 
         "TelegrammKennung[10]"      := 'K' , 
         TrolleyID                   := DINT#4711 , 
         StationsNr                  := 13 , 
         Puffer_LinienNr             := 7 , 
         StoreGroup                  := DINT#0815 , 
         Status_1_Int                := 83 , 
         "Status_2_Bit[0]"           := 1 , 
         "Status_2_Bit[1]"           := 0 , 
         "Status_2_Bit[2]"           := 1 , 
         "Status_2_Bit[3]"           := 0 , 
         "Status_2_Bit[4]"           := 1 , 
         "Status_2_Bit[5]"           := 0 , 
         "Status_2_Bit[6]"           := 1 , 
         "Status_2_Bit[7]"           := 1 , 
         "Reserve[1]_Int"            := 62 , 
         "Reserve[2]_Int"            := 63 , 
         Port                        := 2 , 
         Ret_Val_FIFO_IN             := "MB199" , 
         Error                       := "M83.0"
      );

nix:      NOP 0;

NETWORK
TITLE = Ende
      BE;

NETWORK
TITLE = Daten in SendFifo schreiben
      U "M83.1";
      R "M83.1";
      SPBN nixi;

      CALL "Daten_in_SendFIFO_speichern", "Daten_für_SendFIFO"
      (  "TelegrammKennung[1]"       := 'A' , 
         "TelegrammKennung[2]"       := 'B' , 
         "TelegrammKennung[3]"       := 'C' , 
         "TelegrammKennung[4]"       := 'D' , 
         "TelegrammKennung[5]"       := 'E' , 
         "TelegrammKennung[6]"       := 'F' , 
         "TelegrammKennung[7]"       := 'G' , 
         "TelegrammKennung[8]"       := 'I' , 
         "TelegrammKennung[9]"       := 'J' , 
         "TelegrammKennung[10]"      := 'K' , 
         TrolleyID                   := DINT#4711 , 
         StationsNr                  := 13 , 
         Puffer_LinienNr             := 7 , 
         StoreGroup                  := DINT#0815 , 
         Status_1_Int                := 83 , 
         "Status_2_Bit[0]"           := 1 , 
         "Status_2_Bit[1]"           := 0 , 
         "Status_2_Bit[2]"           := 1 , 
         "Status_2_Bit[3]"           := 0 , 
         "Status_2_Bit[4]"           := 1 , 
         "Status_2_Bit[5]"           := 0 , 
         "Status_2_Bit[6]"           := 1 , 
         "Status_2_Bit[7]"           := 1 , 
         "Reserve[1]_Int"            := 62 , 
         "Reserve[2]_Int"            := 63 , 
         Port                        := 1 , 
         Ret_Val_FIFO_IN             := "MB199" , 
         Error                       := "M83.0"
      );

nixi:      NOP 0;

NETWORK
TITLE = Eingang ansteuern
      CALL "Set_Input"
      (  Enable                      := "M2000.1" , 
         Status                      := "M2000.0" , 
         InByte                      := "MD2002" , 
         InBit                       := "MW2006"
      );

NETWORK
TITLE = Ausgang ansteuern
      U "Clock_1Hz";
      = "M1000.0";

      CALL "Set_Output"
      (  Enable                      := "M1000.1" , 
         Status                      := "M1000.0" , 
         OutByte                     := "MD1002" , 
         OutBit                      := "MW1006"
      );

END_ORGANIZATION_BLOCK

