ソースを参照

Das sind die unangetasteten SPS-Files für die E-Zylinder-Linie von S.Werschlein, die mir Reckendorfer gegeben hat

jcech 2 年 前
コミット
f76cb294ec
共有100 個のファイルを変更した3945 個の追加0 個の削除を含む
  1. 0 0
      Logical/Global.typ
  2. 189 0
      Logical/Global.var
  3. 9 0
      Logical/KurvenProgramme/Kurve1/IEC.prg
  4. 42 0
      Logical/KurvenProgramme/Kurve1/Main.st
  5. 0 0
      Logical/KurvenProgramme/Kurve1/Types.typ
  6. 0 0
      Logical/KurvenProgramme/Kurve1/Variables.var
  7. 9 0
      Logical/KurvenProgramme/Kurve2/IEC.prg
  8. 42 0
      Logical/KurvenProgramme/Kurve2/Main.st
  9. 0 0
      Logical/KurvenProgramme/Kurve2/Types.typ
  10. 0 0
      Logical/KurvenProgramme/Kurve2/Variables.var
  11. 9 0
      Logical/KurvenProgramme/Kurve3/IEC.prg
  12. 42 0
      Logical/KurvenProgramme/Kurve3/Main.st
  13. 0 0
      Logical/KurvenProgramme/Kurve3/Types.typ
  14. 0 0
      Logical/KurvenProgramme/Kurve3/Variables.var
  15. 9 0
      Logical/KurvenProgramme/Kurve4/IEC.prg
  16. 42 0
      Logical/KurvenProgramme/Kurve4/Main.st
  17. 0 0
      Logical/KurvenProgramme/Kurve4/Types.typ
  18. 0 0
      Logical/KurvenProgramme/Kurve4/Variables.var
  19. 9 0
      Logical/KurvenProgramme/Liftgate/IEC.prg
  20. 71 0
      Logical/KurvenProgramme/Liftgate/Main.st
  21. 0 0
      Logical/KurvenProgramme/Liftgate/Types.typ
  22. 5 0
      Logical/KurvenProgramme/Liftgate/Variables.var
  23. 11 0
      Logical/KurvenProgramme/Package.pkg
  24. 9 0
      Logical/Main/IEC.prg
  25. 52 0
      Logical/Main/Main.st
  26. 0 0
      Logical/Main/Types.typ
  27. 0 0
      Logical/Main/Variables.var
  28. 16 0
      Logical/Package.pkg
  29. 9 0
      Logical/RFID/IEC.prg
  30. 950 0
      Logical/RFID/Main.st
  31. 0 0
      Logical/RFID/Types.typ
  32. 20 0
      Logical/RFID/Variables.var
  33. 34 0
      Logical/Stationen_Variablen/Kurve_1.typ
  34. 32 0
      Logical/Stationen_Variablen/Kurve_2.typ
  35. 32 0
      Logical/Stationen_Variablen/Kurve_3.typ
  36. 32 0
      Logical/Stationen_Variablen/Kurve_4.typ
  37. 18 0
      Logical/Stationen_Variablen/Package.pkg
  38. 45 0
      Logical/Stationen_Variablen/Tisch_1.typ
  39. 45 0
      Logical/Stationen_Variablen/Tisch_2.typ
  40. 45 0
      Logical/Stationen_Variablen/Tisch_3.typ
  41. 45 0
      Logical/Stationen_Variablen/Tisch_4.typ
  42. 45 0
      Logical/Stationen_Variablen/Tisch_5.typ
  43. 54 0
      Logical/Stationen_Variablen/Tisch_6.typ
  44. 45 0
      Logical/Stationen_Variablen/Tisch_7.typ
  45. 45 0
      Logical/Stationen_Variablen/Tisch_8.typ
  46. 14 0
      Logical/TischProgramme/Package.pkg
  47. 9 0
      Logical/TischProgramme/Tisch1/IEC.prg
  48. 129 0
      Logical/TischProgramme/Tisch1/Main.st
  49. 0 0
      Logical/TischProgramme/Tisch1/Types.typ
  50. 0 0
      Logical/TischProgramme/Tisch1/Variables.var
  51. 9 0
      Logical/TischProgramme/Tisch2/IEC.prg
  52. 127 0
      Logical/TischProgramme/Tisch2/Main.st
  53. 0 0
      Logical/TischProgramme/Tisch2/Types.typ
  54. 0 0
      Logical/TischProgramme/Tisch2/Variables.var
  55. 9 0
      Logical/TischProgramme/Tisch3/IEC.prg
  56. 128 0
      Logical/TischProgramme/Tisch3/Main.st
  57. 0 0
      Logical/TischProgramme/Tisch3/Types.typ
  58. 0 0
      Logical/TischProgramme/Tisch3/Variables.var
  59. 9 0
      Logical/TischProgramme/Tisch4/IEC.prg
  60. 131 0
      Logical/TischProgramme/Tisch4/Main.st
  61. 0 0
      Logical/TischProgramme/Tisch4/Types.typ
  62. 0 0
      Logical/TischProgramme/Tisch4/Variables.var
  63. 9 0
      Logical/TischProgramme/Tisch5/IEC.prg
  64. 127 0
      Logical/TischProgramme/Tisch5/Main.st
  65. 0 0
      Logical/TischProgramme/Tisch5/Types.typ
  66. 0 0
      Logical/TischProgramme/Tisch5/Variables.var
  67. 9 0
      Logical/TischProgramme/Tisch6/IEC.prg
  68. 363 0
      Logical/TischProgramme/Tisch6/Main.st
  69. 0 0
      Logical/TischProgramme/Tisch6/Types.typ
  70. 5 0
      Logical/TischProgramme/Tisch6/Variables.var
  71. 9 0
      Logical/TischProgramme/Tisch7/IEC.prg
  72. 149 0
      Logical/TischProgramme/Tisch7/Main.st
  73. 0 0
      Logical/TischProgramme/Tisch7/Types.typ
  74. 4 0
      Logical/TischProgramme/Tisch7/Variables.var
  75. 9 0
      Logical/TischProgramme/Tisch8/IEC.prg
  76. 127 0
      Logical/TischProgramme/Tisch8/Main.st
  77. 0 0
      Logical/TischProgramme/Tisch8/Types.typ
  78. 0 0
      Logical/TischProgramme/Tisch8/Variables.var
  79. 18 0
      Logical/Zylinder/Package.pkg
  80. 9 0
      Logical/Zylinder/Zylinder_Kurve1/IEC.prg
  81. 74 0
      Logical/Zylinder/Zylinder_Kurve1/Main.st
  82. 0 0
      Logical/Zylinder/Zylinder_Kurve1/Types.typ
  83. 3 0
      Logical/Zylinder/Zylinder_Kurve1/Variables.var
  84. 9 0
      Logical/Zylinder/Zylinder_Kurve2/IEC.prg
  85. 74 0
      Logical/Zylinder/Zylinder_Kurve2/Main.st
  86. 0 0
      Logical/Zylinder/Zylinder_Kurve2/Types.typ
  87. 3 0
      Logical/Zylinder/Zylinder_Kurve2/Variables.var
  88. 9 0
      Logical/Zylinder/Zylinder_Kurve3/IEC.prg
  89. 74 0
      Logical/Zylinder/Zylinder_Kurve3/Main.st
  90. 0 0
      Logical/Zylinder/Zylinder_Kurve3/Types.typ
  91. 3 0
      Logical/Zylinder/Zylinder_Kurve3/Variables.var
  92. 9 0
      Logical/Zylinder/Zylinder_Kurve4/IEC.prg
  93. 74 0
      Logical/Zylinder/Zylinder_Kurve4/Main.st
  94. 0 0
      Logical/Zylinder/Zylinder_Kurve4/Types.typ
  95. 3 0
      Logical/Zylinder/Zylinder_Kurve4/Variables.var
  96. 9 0
      Logical/Zylinder/Zylinder_Tisch1/IEC.prg
  97. 133 0
      Logical/Zylinder/Zylinder_Tisch1/Main.st
  98. 0 0
      Logical/Zylinder/Zylinder_Tisch1/Types.typ
  99. 3 0
      Logical/Zylinder/Zylinder_Tisch1/Variables.var
  100. 0 0
      Logical/Zylinder/Zylinder_Tisch2/IEC.prg

+ 0 - 0
Logical/Global.typ


+ 189 - 0
Logical/Global.var

@@ -0,0 +1,189 @@
+VAR
+	VK_Start : BOOL;
+	VK_Stop : BOOL;
+END_VAR
+VAR CONSTANT
+	STATUS_AUSGEFAHREN : USINT := 2;
+	STATUS_BUSY : USINT := 255;
+	STATUS_DRUCKLOS : USINT := 5;
+	STATUS_EINGEFAHREN : USINT := 1;
+	STATUS_ERROR : USINT := 200;
+	STATUS_FEHLERRESET : USINT := 50;
+	STATUS_MITTELSTELLUNG : USINT := 3;
+	KMD_AUSFAHREN : USINT := 2;
+	KMD_DRUCKLOS : USINT := 5;
+	KMD_EINFAHREN : USINT := 1;
+	KMD_FERTIG : USINT := 0;
+	KMD_MITTELSTELLUNG : USINT := 3;
+	KMD_START : USINT := 12;
+	KMD_STOP : USINT := 11;
+END_VAR
+VAR
+	gError : ARRAY[0..99] OF BOOL;
+	gKurve_2 : Kurve_2_Typ;
+	gKurve_3 : Kurve_3_Typ;
+	gKurve_4 : Kurve_4_Typ;
+	gKurve_1 : Kurve_1_Typ;
+	Kurve_1 : USINT;
+	Kurve_2 : USINT;
+	Kurve_3 : USINT;
+	Kurve_4 : USINT;
+	gTisch_1 : Tisch_1_Typ;
+	gTisch_2 : Tisch_2_Typ;
+	gTisch_3 : Tisch_3_Typ;
+	gTisch_4 : Tisch_4_Typ;
+	gTisch_5 : Tisch_5_Typ;
+	gTisch_6 : Tisch_6_Typ;
+	gTisch_7 : Tisch_7_Typ;
+	gTisch_8 : Tisch_8_Typ;
+	Tisch_1 : USINT;
+	Tisch_2 : USINT;
+	Tisch_3 : USINT;
+	Tisch_4 : USINT;
+	Tisch_5 : USINT;
+	Tisch_6 : USINT;
+	Tisch_7 : USINT;
+	Tisch_8 : USINT;
+	gDO_Motor_K5 : BOOL;
+	gDO_Motor_K6 : BOOL;
+	gDO_Motor_K7 : BOOL;
+	gDO_Motor_K8 : BOOL;
+	gDO_Motor_K1 : BOOL;
+	gDO_Motor_K2 : BOOL;
+	gDO_Motor_K3 : BOOL;
+	gDO_Motor_K4 : BOOL;
+	gMerker_Motoren_ein : BOOL;
+	Liftgate : USINT;
+	Liftgate_oeffnen : USINT;
+	gTaster_Liftgate_oeffnen : BOOL;
+	gMerker_Liftgate_Leuchte_Rot : BOOL;
+	gMerker_Liftgate_entriegelt : BOOL;
+	gTaster_Liftgate_Leuchte_Rot : BOOL;
+	Rot_blinken : USINT;
+	gTaster_Liftgate_Leuchte_Gruen : BOOL;
+	gTaster_Liftgate_verriegeln : BOOL;
+	gMerker_Stop_an_Kurve2 : BOOL;
+	gTisch_1_RFID_Read : ARRAY[0..9] OF USINT;
+	gTisch_1_RFID_Write : ARRAY[0..9] OF USINT;
+	gMerker_Tisch_1_RFID_Vorhanden : BOOL;
+	gMerker_Tisch_1_Auftrag_Lesen : BOOL;
+	Tisch_1_RFID : USINT;
+	gMerker_RFID_Value_Tisch_1 : USINT;
+	gTisch_2_RFID_Read : ARRAY[0..9] OF USINT;
+	gTisch_2_RFID_Write : ARRAY[0..9] OF USINT;
+	gTisch_3_RFID_Read : ARRAY[0..9] OF USINT;
+	gTisch_3_RFID_Write : ARRAY[0..9] OF USINT;
+	gTisch_4_RFID_Read : ARRAY[0..9] OF USINT;
+	gTisch_4_RFID_Write : ARRAY[0..9] OF USINT;
+	gTisch_5_RFID_Read : ARRAY[0..9] OF USINT;
+	gTisch_5_RFID_Write : ARRAY[0..9] OF USINT;
+	gTisch_6_RFID_Read : ARRAY[0..9] OF USINT;
+	gTisch_6_RFID_Write : ARRAY[0..9] OF USINT;
+	gTisch_7_RFID_Read : ARRAY[0..9] OF USINT;
+	gTisch_7_RFID_Write : ARRAY[0..9] OF USINT;
+	gTisch_8_RFID_Read : ARRAY[0..9] OF USINT;
+	gTisch_8_RFID_Write : ARRAY[0..9] OF USINT;
+	gMerker_Tisch_2_RFID_Vorhanden : BOOL;
+	gMerker_Tisch_2_Auftrag_Lesen : BOOL;
+	Tisch_2_RFID : USINT;
+	gMerker_RFID_Value_Tisch_2 : USINT;
+	gMerker_Tisch_3_RFID_Vorhanden : BOOL;
+	gMerker_Tisch_3_Auftrag_Lesen : BOOL;
+	Tisch_3_RFID : USINT;
+	gMerker_RFID_Value_Tisch_3 : USINT;
+	gMerker_Tisch_4_RFID_Vorhanden : BOOL;
+	gMerker_Tisch_4_Auftrag_Lesen : BOOL;
+	Tisch_4_RFID : USINT;
+	gMerker_RFID_Value_Tisch_4 : USINT;
+	gMerker_Tisch_5_RFID_Vorhanden : BOOL;
+	gMerker_Tisch_5_Auftrag_Lesen : BOOL;
+	Tisch_5_RFID : USINT;
+	gMerker_RFID_Value_Tisch_5 : USINT;
+	gMerker_Tisch_6_RFID_Vorhanden : BOOL;
+	gMerker_Tisch_6_Auftrag_Lesen : BOOL;
+	Tisch_6_RFID : USINT;
+	gMerker_RFID_Value_Tisch_6 : USINT;
+	gMerker_Tisch_7_RFID_Vorhanden : BOOL;
+	gMerker_Tisch_7_Auftrag_Lesen : BOOL;
+	Tisch_7_RFID : USINT;
+	gMerker_RFID_Value_Tisch_7 : USINT;
+	gMerker_Tisch_8_RFID_Vorhanden : BOOL;
+	gMerker_Tisch_8_Auftrag_Lesen : BOOL;
+	Tisch_8_RFID : USINT;
+	gMerker_RFID_Value_Tisch_8 : USINT;
+	RFID_Schreiben : USINT;
+	gMerker_neuen_Befehl_schreiben : BOOL;
+	gMerker_Schreibe_Traegernummer : USINT;
+	gSensor_Balluff_IO_Link_Read : ARRAY[0..9] OF USINT;
+	gSensor_Balluff_IO_Link_Write : ARRAY[0..9] OF USINT;
+	gDI_Laser_fertig : BOOL;
+	gDI_keiner_Stoerung_Laser : BOOL;
+	gDO_Start_Laser : BOOL;
+	gDO_doppelt_lasern : BOOL;
+	gMerker_Tisch_1_alles_nullen : BOOL;
+	gMerker_Tisch_1_RFID_Reset : BOOL;
+	gMerker_Tisch_2_alles_nullen : BOOL;
+	gMerker_Tisch_2_RFID_Reset : BOOL;
+	gMerker_Tisch_3_alles_nullen : BOOL;
+	gMerker_Tisch_3_RFID_Reset : BOOL;
+	gMerker_Tisch_4_alles_nullen : BOOL;
+	gMerker_Tisch_4_RFID_Reset : BOOL;
+	gMerker_Tisch_5_alles_nullen : BOOL;
+	gMerker_Tisch_5_RFID_Reset : BOOL;
+	gMerker_Tisch_6_alles_nullen : BOOL;
+	gMerker_Tisch_6_RFID_Reset : BOOL;
+	gMerker_Tisch_7_alles_nullen : BOOL;
+	gMerker_Tisch_7_RFID_Reset : BOOL;
+	gMerker_Tisch_8_alles_nullen : BOOL;
+	gMerker_Tisch_8_RFID_Reset : BOOL;
+END_VAR
+VAR RETAIN
+	gTaster_Tisch_1_aus : BOOL;
+	gTaster_Tisch_2_aus : BOOL;
+	gTaster_Tisch_3_aus : BOOL;
+	gTaster_Tisch_4_aus : BOOL;
+	gTaster_Tisch_5_aus : BOOL;
+	gTaster_Tisch_6_aus : BOOL;
+	gTaster_Tisch_7_aus : BOOL;
+	gTaster_Tisch_8_aus : BOOL;
+END_VAR
+VAR
+	gMerker_RFID_Tisch_1_gelesen : BOOL;
+	gMerker_RFID_Tisch_2_gelesen : BOOL;
+	gMerker_RFID_Tisch_3_gelesen : BOOL;
+	gMerker_RFID_Tisch_4_gelesen : BOOL;
+	gMerker_RFID_Tisch_5_gelesen : BOOL;
+	gMerker_RFID_Tisch_6_gelesen : BOOL;
+	gMerker_RFID_Tisch_7_gelesen : BOOL;
+	gMerker_RFID_Tisch_8_gelesen : BOOL;
+	gVK_Freigabe_manuell : BOOL;
+	gVK_Stopper_Tisch_6 : BOOL;
+	gVK_Vorstopper_Tisch_6 : BOOL;
+	gVK_Aushebeeinheit_Tisch_6 : BOOL;
+	gVK_doppelt_Lasern : BOOL;
+	gVK_Start_Laser : BOOL;
+	gDO_Laser_Seitentuer_oeffnen : BOOL;
+	gDI_Laser_Automatik : BOOL;
+	gDI_Laser_Manuell : BOOL;
+	gMerker_Laser_Automatik : BOOL;
+	gMerker_Laser_Halbautomatik : BOOL;
+	gMerker_Laser_Manuell : BOOL;
+	Tisch_6_Manuell : USINT;
+	OPCUA_TEST_1 : USINT;
+	OPCUATEST2 : USINT;
+	Tisch_6_Automatik : USINT;
+	OPCUATEST3 : STRING[80];
+	gMerker_OPCUA_Schreibauftrag : BOOL;
+	gMerker_OPCUA_Seriennummer_Test : USINT;
+	gMerker_Tisch_1_lesen_fertig : BOOL;
+	OPCUA_TEST4 : USINT;
+	gMerker_Tisch_2_lesen_fertig : BOOL;
+	gMerker_Tisch_3_lesen_fertig : BOOL;
+	gMerker_Tisch_4_lesen_fertig : BOOL;
+	gMerker_Tisch_5_lesen_fertig : BOOL;
+	gMerker_Tisch_6_lesen_fertig : BOOL;
+	gMerker_Tisch_7_lesen_fertig : BOOL;
+	gMerker_Tisch_8_lesen_fertig : BOOL;
+	gMerker_block_RFID_read_Tisch_6 : BOOL;
+	gDO_Laser_Absaugung : BOOL;
+END_VAR

+ 9 - 0
Logical/KurvenProgramme/Kurve1/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 42 - 0
Logical/KurvenProgramme/Kurve1/Main.st

@@ -0,0 +1,42 @@
+
+PROGRAM _INIT
+
+	Kurve_1 := 0;
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+
+CASE Kurve_1 OF	
+
+	0:
+	IF gKurve_1.Inputs.Vor_Stopper = TRUE AND gKurve_1.Inputs.Stausensor = FALSE THEN
+		gKurve_1.Cmd.Stopper := KMD_EINFAHREN;
+		Kurve_1 := 10;
+	END_IF
+	 
+	10:
+	IF gKurve_1.Status.Stopper = STATUS_EINGEFAHREN AND gKurve_1.Inputs.Nach_Stopper = TRUE THEN
+		Kurve_1 := 20;
+	END_IF
+
+	20:
+	IF gKurve_1.Status.Stopper = STATUS_EINGEFAHREN AND gKurve_1.Inputs.Nach_Stopper = FALSE THEN
+		gKurve_1.Cmd.Stopper := KMD_AUSFAHREN;
+		Kurve_1 := 30;
+	END_IF
+
+	30:
+	IF gKurve_1.Status.Stopper = STATUS_AUSGEFAHREN AND gKurve_1.Inputs.Stausensor = TRUE THEN
+		Kurve_1 := 0;
+	END_IF
+
+END_CASE
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/KurvenProgramme/Kurve1/Types.typ


+ 0 - 0
Logical/KurvenProgramme/Kurve1/Variables.var


+ 9 - 0
Logical/KurvenProgramme/Kurve2/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 42 - 0
Logical/KurvenProgramme/Kurve2/Main.st

@@ -0,0 +1,42 @@
+
+PROGRAM _INIT
+	
+	Kurve_2 := 0;
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+
+CASE Kurve_2 OF	
+
+	0:
+	IF gKurve_2.Inputs.Vor_Stopper = TRUE AND gKurve_2.Inputs.Stausensor = FALSE AND gMerker_Stop_an_Kurve2 = FALSE THEN
+		gKurve_2.Cmd.Stopper := KMD_EINFAHREN;
+		Kurve_2 := 10;
+	END_IF
+	 
+	10:
+	IF gKurve_2.Status.Stopper = STATUS_EINGEFAHREN AND gKurve_2.Inputs.Nach_Stopper = TRUE THEN
+		Kurve_2 := 20;
+	END_IF
+
+	20:
+	IF gKurve_2.Status.Stopper = STATUS_EINGEFAHREN AND gKurve_2.Inputs.Nach_Stopper = FALSE THEN
+		gKurve_2.Cmd.Stopper := KMD_AUSFAHREN;
+		Kurve_2 := 30;
+	END_IF
+
+	30:
+	IF gKurve_2.Status.Stopper = STATUS_AUSGEFAHREN AND gKurve_2.Inputs.Stausensor = TRUE THEN
+		Kurve_2 := 0;
+	END_IF
+
+END_CASE
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/KurvenProgramme/Kurve2/Types.typ


+ 0 - 0
Logical/KurvenProgramme/Kurve2/Variables.var


+ 9 - 0
Logical/KurvenProgramme/Kurve3/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 42 - 0
Logical/KurvenProgramme/Kurve3/Main.st

@@ -0,0 +1,42 @@
+
+PROGRAM _INIT
+	
+	Kurve_3 := 0;	
+
+END_PROGRAM
+
+PROGRAM _CYCLIC
+
+CASE Kurve_3 OF	
+
+	0:
+	IF gKurve_3.Inputs.Vor_Stopper = TRUE AND gKurve_3.Inputs.Stausensor = FALSE THEN
+		gKurve_3.Cmd.Stopper := KMD_EINFAHREN;
+		Kurve_3 := 10;
+	END_IF
+	 
+	10:
+	IF gKurve_3.Status.Stopper = STATUS_EINGEFAHREN AND gKurve_3.Inputs.Nach_Stopper = TRUE THEN
+		Kurve_3 := 20;
+	END_IF
+
+	20:
+	IF gKurve_3.Status.Stopper = STATUS_EINGEFAHREN AND gKurve_3.Inputs.Nach_Stopper = FALSE THEN
+		gKurve_3.Cmd.Stopper := KMD_AUSFAHREN;
+		Kurve_3 := 30;
+	END_IF
+
+	30:
+	IF gKurve_3.Status.Stopper = STATUS_AUSGEFAHREN AND gKurve_3.Inputs.Stausensor = TRUE THEN
+		Kurve_3 := 0;
+	END_IF
+
+END_CASE
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/KurvenProgramme/Kurve3/Types.typ


+ 0 - 0
Logical/KurvenProgramme/Kurve3/Variables.var


+ 9 - 0
Logical/KurvenProgramme/Kurve4/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 42 - 0
Logical/KurvenProgramme/Kurve4/Main.st

@@ -0,0 +1,42 @@
+
+PROGRAM _INIT
+
+	Kurve_4 := 0;
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+
+CASE Kurve_4 OF	
+
+	0:
+	IF gKurve_4.Inputs.Vor_Stopper = TRUE AND gKurve_4.Inputs.Stausensor = FALSE THEN
+		gKurve_4.Cmd.Stopper := KMD_EINFAHREN;
+		Kurve_4 := 10;
+	END_IF
+	 
+	10:
+	IF gKurve_4.Status.Stopper = STATUS_EINGEFAHREN AND gKurve_4.Inputs.Nach_Stopper = TRUE THEN
+		Kurve_4 := 20;
+	END_IF
+
+	20:
+	IF gKurve_4.Status.Stopper = STATUS_EINGEFAHREN AND gKurve_4.Inputs.Nach_Stopper = FALSE THEN
+		gKurve_4.Cmd.Stopper := KMD_AUSFAHREN;
+		Kurve_4 := 30;
+	END_IF
+
+	30:
+	IF gKurve_4.Status.Stopper = STATUS_AUSGEFAHREN AND gKurve_4.Inputs.Stausensor = TRUE THEN
+		Kurve_4 := 0;
+	END_IF
+
+END_CASE
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/KurvenProgramme/Kurve4/Types.typ


+ 0 - 0
Logical/KurvenProgramme/Kurve4/Variables.var


+ 9 - 0
Logical/KurvenProgramme/Liftgate/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 71 - 0
Logical/KurvenProgramme/Liftgate/Main.st

@@ -0,0 +1,71 @@
+
+PROGRAM _INIT
+	
+	Liftgate := 0;
+	RTInfo_0(enable:=1);
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+	
+	CASE Liftgate_oeffnen OF
+
+		0:
+		IF gTaster_Liftgate_oeffnen = TRUE THEN
+			gMerker_Liftgate_Leuchte_Rot := TRUE;
+			gTaster_Liftgate_Leuchte_Gruen := FALSE;
+			gMerker_Stop_an_Kurve2 := TRUE;
+			Liftgate_oeffnen := 10;
+		END_IF
+
+		10: lWarten_Liftgate := lWarten_Liftgate + (RTInfo_0.cycle_time/1000);
+		IF gKurve_3.Inputs.Vor_Stopper = FALSE AND lWarten_Liftgate >= 2000 AND Kurve_2 = 0 THEN
+			gMerker_Liftgate_entriegelt := TRUE;
+			Rot_blinken := 0;
+			gMerker_Liftgate_Leuchte_Rot := FALSE;
+			gTaster_Liftgate_Leuchte_Rot := TRUE;
+			Liftgate_oeffnen := 0;
+		ELSIF gKurve_3.Inputs.Vor_Stopper = TRUE THEN
+				gKurve_2.Cmd.Stopper := KMD_AUSFAHREN;
+				lWarten_Liftgate := 0;
+				Liftgate_oeffnen := 10;
+//		ELSIF gKurve_2.Inputs.Vor_Stopper = TRUE THEN
+//				lWarten_Liftgate := 0;
+		END_IF
+		
+	END_CASE
+
+	CASE Rot_blinken OF
+	
+		0: lWarten_Blinken := lWarten_Blinken + (RTInfo_0.cycle_time/1000);
+		IF gMerker_Liftgate_Leuchte_Rot = TRUE AND lWarten_Blinken >= 500 THEN
+			gTaster_Liftgate_Leuchte_Rot := TRUE;
+			lWarten_Blinken := 0;
+			Rot_blinken := 10;
+		END_IF
+	
+		10: lWarten_Blinken := lWarten_Blinken + (RTInfo_0.cycle_time/1000);
+		IF lWarten_Blinken >= 500 THEN
+			gTaster_Liftgate_Leuchte_Rot := FALSE;
+			lWarten_Blinken := 0;
+			Rot_blinken := 0;
+		END_IF
+	 
+	END_CASE
+
+	IF gTaster_Liftgate_verriegeln = TRUE THEN
+		Liftgate_oeffnen := 0;
+		gTaster_Liftgate_Leuchte_Rot := FALSE;
+		gMerker_Liftgate_Leuchte_Rot := FALSE;
+		gTaster_Liftgate_Leuchte_Gruen := TRUE;
+		gMerker_Liftgate_entriegelt := FALSE;
+		gMerker_Stop_an_Kurve2 := FALSE;
+	END_IF		
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/KurvenProgramme/Liftgate/Types.typ


+ 5 - 0
Logical/KurvenProgramme/Liftgate/Variables.var

@@ -0,0 +1,5 @@
+VAR
+	lWarten_Blinken : UDINT;
+	RTInfo_0 : RTInfo;
+	lWarten_Liftgate : UDINT;
+END_VAR

+ 11 - 0
Logical/KurvenProgramme/Package.pkg

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Package xmlns="http://br-automation.co.at/AS/Package">
+  <Objects>
+    <Object Type="Program" Language="IEC">Kurve1</Object>
+    <Object Type="Program" Language="IEC">Kurve2</Object>
+    <Object Type="Program" Language="IEC">Kurve3</Object>
+    <Object Type="Program" Language="IEC">Kurve4</Object>
+    <Object Type="Program" Language="IEC">Liftgate</Object>
+  </Objects>
+</Package>

+ 9 - 0
Logical/Main/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 52 - 0
Logical/Main/Main.st

@@ -0,0 +1,52 @@
+
+PROGRAM _INIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+	
+	gDO_doppelt_lasern;
+	gDI_keiner_Stoerung_Laser;
+	gDI_Laser_fertig;
+	gDO_Start_Laser;  
+	
+	IF VK_Start = TRUE THEN
+		gMerker_Motoren_ein := TRUE;
+		VK_Start := FALSE;
+	END_IF
+	
+	IF VK_Stop = TRUE THEN
+		gMerker_Motoren_ein := FALSE;
+		VK_Stop := FALSE;
+	END_IF
+	
+	IF gMerker_Motoren_ein = TRUE THEN	 
+		gDO_Motor_K1 := TRUE;
+		gDO_Motor_K2 := TRUE;
+		gDO_Motor_K3 := TRUE;
+		gDO_Motor_K4 := TRUE;
+		gDO_Motor_K5 := TRUE;
+		gDO_Motor_K6 := TRUE;
+		gDO_Motor_K7 := TRUE;
+		gDO_Motor_K8 := TRUE;
+	END_IF
+ 
+	IF gMerker_Motoren_ein = FALSE THEN	 
+		gDO_Motor_K1 := FALSE;
+		gDO_Motor_K2 := FALSE;
+		gDO_Motor_K3 := FALSE;
+		gDO_Motor_K4 := FALSE;
+		gDO_Motor_K5 := FALSE;
+		gDO_Motor_K6 := FALSE;
+		gDO_Motor_K7 := FALSE;
+		gDO_Motor_K8 := FALSE;
+	END_IF
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/Main/Types.typ


+ 0 - 0
Logical/Main/Variables.var


+ 16 - 0
Logical/Package.pkg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Package Version="1.00.0" xmlns="http://br-automation.co.at/AS/Package">
+  <Objects>
+    <Object Type="File" Description="Global data types">Global.typ</Object>
+    <Object Type="File" Description="Global variables">Global.var</Object>
+    <Object Type="Package" Description="Global libraries">Libraries</Object>
+    <Object Type="Package">mappView</Object>
+    <Object Type="Program" Language="IEC">RFID</Object>
+    <Object Type="Program" Language="IEC">Main</Object>
+    <Object Type="Package">TischProgramme</Object>
+    <Object Type="Package">KurvenProgramme</Object>
+    <Object Type="Package">Zylinder</Object>
+    <Object Type="Package">Stationen_Variablen</Object>
+  </Objects>
+</Package>

+ 9 - 0
Logical/RFID/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 950 - 0
Logical/RFID/Main.st

@@ -0,0 +1,950 @@
+
+PROGRAM _INIT
+	
+	RTInfo_0(enable:=1);
+	Wartezeit_OPCUA := 1100;
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+
+//**********************************	Tisch 1		***********************************************
+	
+	(* Lesen *)
+
+	gMerker_Tisch_1_RFID_Vorhanden := gTisch_1_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
+	
+	IF gMerker_Tisch_1_Auftrag_Lesen = TRUE THEN
+		//			gMerker_Lesen_Fertig := FALSE;
+		gTisch_1_RFID_Write[1] := 1;(* Befehl Datenträger lesen *)
+		gTisch_1_RFID_Write[2] := 0;
+		gTisch_1_RFID_Write[3] := 0;
+		gTisch_1_RFID_Write[4] := 8;  (* Anzahl Bytes Lowbytes *)
+		gTisch_1_RFID_Write[5] := 0;
+		gTisch_1_RFID_Write[6] := 0;
+		gTisch_1_RFID_Write[7] := 0;
+		gTisch_1_RFID_Write[8] := 0;
+		gTisch_1_RFID_Write[9] := 1;
+		gTisch_1_RFID_Write[0].0 := TRUE;
+	END_IF
+	   
+	(* Schreiben *)	
+	
+	(* Befehlsdaten *)
+	IF gMerker_neuen_Befehl_schreiben = TRUE THEN
+		gTisch_1_RFID_Write[1] := 2;  (* Datenträger beschreiben *)
+		gTisch_1_RFID_Write[2] := 0;  (* Daten *)
+		gTisch_1_RFID_Write[3] := 0;  (* Daten *)
+		gTisch_1_RFID_Write[4] := 8;  (* Anzahl Bytes Lowbytes *)
+		gTisch_1_RFID_Write[5] := 0;  (* Daten *)
+		gTisch_1_RFID_Write[6] := 0;  (* Daten *)
+		gTisch_1_RFID_Write[7] := 0;  (* Daten *)
+		gTisch_1_RFID_Write[8] := 0;  (* Daten *)
+		gTisch_1_RFID_Write[0].0 := TRUE; (* neuer Auftrag steht an *)
+	END_IF
+		
+	(* Write Variable nullen *)
+	
+	IF gMerker_Tisch_1_alles_nullen = TRUE THEN
+		gTisch_1_RFID_Write[1] := 0;
+		gTisch_1_RFID_Write[2] := 0;
+		gTisch_1_RFID_Write[3] := 0;
+		gTisch_1_RFID_Write[4] := 0;  
+		gTisch_1_RFID_Write[5] := 0;
+		gTisch_1_RFID_Write[6] := 0;
+		gTisch_1_RFID_Write[7] := 0; 
+		gTisch_1_RFID_Write[8] := 0;
+		gTisch_1_RFID_Write[0] := 0;
+	END_IF
+	
+	gTisch_1_RFID_Write[9] := gTisch_1_RFID_Write[0];
+	
+	CASE Tisch_1_RFID OF
+		
+		0:
+			IF gMerker_Tisch_1_RFID_Vorhanden  = TRUE AND gTisch_1.Inputs.Vor_Stopper = TRUE AND gMerker_Tisch_1_RFID_Reset = FALSE (*AND gMerker_Tisch_1_lesen_fertig = FALSE*) THEN
+				gMerker_Tisch_1_Auftrag_Lesen := TRUE;
+				Tisch_1_RFID := 10;
+			END_IF
+		
+		10: lWarten_RFID_Fehler_Tisch_1 := lWarten_RFID_Fehler_Tisch_1 + (RTInfo_0.cycle_time/1000);
+			IF gTisch_1_RFID_Read[0] = 135 THEN
+				gMerker_RFID_Value_Tisch_1 := gTisch_1_RFID_Read[1];
+	//			gMerker_RFID_Tisch_1_gelesen := TRUE;
+	//			gMerker_Tisch_1_lesen_fertig := TRUE;
+				lWarten_RFID_Fehler_Tisch_1 := 0;
+				Tisch_1_RFID := 15;
+			ELSIF lWarten_RFID_Fehler_Tisch_1 >= 5000 AND gTisch_1_RFID_Read[0] <> 135 THEN
+				gMerker_Tisch_1_Auftrag_Lesen := FALSE;
+				gMerker_Tisch_1_RFID_Reset := TRUE;
+				lWarten_RFID_Fehler_Tisch_1 := 0;
+				Tisch_1_RFID := 100;
+			END_IF
+		
+		15:
+			IF gMerker_RFID_Value_Tisch_1 <> 0 THEN
+				gMerker_RFID_Tisch_1_gelesen := TRUE;
+				gMerker_Tisch_1_lesen_fertig := TRUE;
+				Tisch_1_RFID := 20;
+			ELSIF gMerker_RFID_Value_Tisch_1 = 0 THEN
+					gMerker_RFID_Tisch_1_gelesen := FALSE;
+					gMerker_Tisch_1_lesen_fertig := FALSE;
+					Tisch_1_RFID := 100;
+			END_IF				
+			
+		20: lWarten_fuer_OPCUA_Tisch_1 := lWarten_fuer_OPCUA_Tisch_1 + (RTInfo_0.cycle_time/1000);
+			IF gMerker_Tisch_1_RFID_Vorhanden = FALSE AND gTisch_1.Inputs.Vor_Stopper = FALSE AND lWarten_fuer_OPCUA_Tisch_1 >= Wartezeit_OPCUA THEN
+				gMerker_Tisch_1_Auftrag_Lesen := FALSE;
+				gMerker_RFID_Value_Tisch_1 := 0;
+				gTisch_1_RFID_Write[0] := 4;
+				Tisch_1_RFID := 30;
+			END_IF
+		
+		30: 
+			IF gTisch_1_RFID_Read[0] = 0 THEN
+				gTisch_1_RFID_Write[0] := 0;
+				Tisch_1_RFID := 0;
+			END_IF
+		
+		100:
+			IF gMerker_Tisch_1_Auftrag_Lesen = FALSE AND gMerker_Tisch_1_RFID_Reset = TRUE THEN
+				gTisch_1_RFID_Write[0] := 4;
+				gMerker_RFID_Value_Tisch_1 := 0;
+				Tisch_1_RFID := 110;
+			END_IF
+		
+		110:
+			IF gTisch_1_RFID_Read[0] = 0 THEN
+				gMerker_Tisch_1_alles_nullen := TRUE;
+				Tisch_1_RFID := 120;
+			END_IF
+		
+		120:
+			IF gTisch_1_RFID_Write[0] = 0 AND gTisch_1_RFID_Write[1] = 0 AND gTisch_1_RFID_Write[2] = 0 AND gTisch_1_RFID_Write[3] = 0 AND gTisch_1_RFID_Write[4] = 0 AND gTisch_1_RFID_Write[5] = 0 AND gTisch_1_RFID_Write[6] = 0 AND gTisch_1_RFID_Write[7] = 0 AND gTisch_1_RFID_Write[8] = 0 AND gTisch_1_RFID_Write[9] = 0 THEN
+				gMerker_Tisch_1_alles_nullen := FALSE;
+				gMerker_Tisch_1_RFID_Reset := FALSE;
+				Tisch_1_RFID := 0;
+			END_IF			
+				
+	END_CASE
+	
+	
+	// SCHREIBEN AUF ALLE GLEICH
+	
+		CASE RFID_Schreiben OF
+			
+			0:
+			IF gMerker_Tisch_1_RFID_Vorhanden = TRUE AND gMerker_OPCUA_Schreibauftrag = TRUE AND gMerker_Tisch_1_lesen_fertig = TRUE THEN
+				gTisch_1_RFID_Write[0] := 4;
+				RFID_Schreiben := 10;
+			END_IF
+			
+			10:	
+			IF gTisch_1_RFID_Read[0] = 0 THEN
+				gMerker_Tisch_1_alles_nullen := TRUE;
+				RFID_Schreiben := 20;
+			END_IF			
+				
+			20:
+			IF gTisch_1_RFID_Write[0] = 0 AND gTisch_1_RFID_Write[1] = 0 AND gTisch_1_RFID_Write[2] = 0 AND gTisch_1_RFID_Write[3] = 0 AND gTisch_1_RFID_Write[4] = 0 AND gTisch_1_RFID_Write[5] = 0 AND gTisch_1_RFID_Write[6] = 0 AND gTisch_1_RFID_Write[7] = 0 AND gTisch_1_RFID_Write[8] = 0 AND gTisch_1_RFID_Write[9] = 0 THEN
+				gMerker_Tisch_1_alles_nullen := FALSE;
+				gMerker_neuen_Befehl_schreiben := TRUE;
+				RFID_Schreiben := 30;
+			END_IF
+			
+			30: 
+			IF gTisch_1_RFID_Read[0] = 163 THEN
+				gMerker_neuen_Befehl_schreiben := FALSE;	
+				gMerker_Tisch_1_alles_nullen := TRUE;
+				RFID_Schreiben := 40;
+			END_IF
+			
+			40:
+			IF gTisch_1_RFID_Write[0] = 0 AND gTisch_1_RFID_Write[1] = 0 AND gTisch_1_RFID_Write[2] = 0 AND gTisch_1_RFID_Write[3] = 0 AND gTisch_1_RFID_Write[4] = 0 AND gTisch_1_RFID_Write[5] = 0 AND gTisch_1_RFID_Write[6] = 0 AND gTisch_1_RFID_Write[7] = 0 AND gTisch_1_RFID_Write[8] = 0 AND gTisch_1_RFID_Write[9] = 0 THEN
+				gMerker_Tisch_1_alles_nullen := FALSE;
+				gTisch_1_RFID_Write[1] := gMerker_OPCUA_Seriennummer_Test;
+				gTisch_1_RFID_Write[2] := 0;
+				gTisch_1_RFID_Write[3] := 0;
+				gTisch_1_RFID_Write[4] := 0;  
+				gTisch_1_RFID_Write[5] := 0;
+				gTisch_1_RFID_Write[6] := 0;
+				gTisch_1_RFID_Write[7] := 0; 
+				gTisch_1_RFID_Write[8] := 0;
+				gTisch_1_RFID_Write[0] := 65;
+				RFID_Schreiben := 50;
+			END_IF
+					
+			50:
+			IF gTisch_1_RFID_Read[0] = 167 THEN
+				gMerker_Tisch_1_alles_nullen := TRUE;
+				RFID_Schreiben := 60;
+			END_IF
+						
+			60:
+			IF gTisch_1_RFID_Write[0] = 0 AND gTisch_1_RFID_Write[1] = 0 AND gTisch_1_RFID_Write[2] = 0 AND gTisch_1_RFID_Write[3] = 0 AND gTisch_1_RFID_Write[4] = 0 AND gTisch_1_RFID_Write[5] = 0 AND gTisch_1_RFID_Write[6] = 0 AND gTisch_1_RFID_Write[7] = 0 AND gTisch_1_RFID_Write[8] = 0 AND gTisch_1_RFID_Write[9] = 0 THEN
+				gMerker_Tisch_1_alles_nullen := FALSE;
+				gMerker_OPCUA_Schreibauftrag := FALSE;
+				gMerker_Tisch_1_lesen_fertig := FALSE;
+	//			gMerker_Tisch_1_Auftrag_Lesen := TRUE;
+				RFID_Schreiben := 0; // war 70
+			END_IF
+									
+//			70:
+//			IF gMerker_Tisch_1_RFID_Vorhanden = FALSE THEN
+//	//			gMerker_Tisch_1_Auftrag_Lesen := FALSE;
+//				RFID_Schreiben := 0;
+//			END_IF	
+									
+		END_CASE
+
+	//**********************************	Tisch 2		***********************************************
+	
+	(* Lesen *)
+
+	gMerker_Tisch_2_RFID_Vorhanden := gTisch_2_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
+	
+	IF gMerker_Tisch_2_Auftrag_Lesen = TRUE THEN
+		//			gMerker_Lesen_Fertig := FALSE;
+		gTisch_2_RFID_Write[1] := 1;(* Befehl Datenträger lesen *)
+		gTisch_2_RFID_Write[2] := 0;
+		gTisch_2_RFID_Write[3] := 0;
+		gTisch_2_RFID_Write[4] := 8;  (* Anzahl Bytes Lowbytes *)
+		gTisch_2_RFID_Write[5] := 0;
+		gTisch_2_RFID_Write[6] := 0;
+		gTisch_2_RFID_Write[7] := 0;
+		gTisch_2_RFID_Write[8] := 0;
+		gTisch_2_RFID_Write[9] := 1;
+		gTisch_2_RFID_Write[0].0 := TRUE;
+	END_IF
+		
+	(* Write Variable nullen *)
+	
+	IF gMerker_Tisch_2_alles_nullen = TRUE THEN
+		gTisch_2_RFID_Write[1] := 0;
+		gTisch_2_RFID_Write[2] := 0;
+		gTisch_2_RFID_Write[3] := 0;
+		gTisch_2_RFID_Write[4] := 0;  
+		gTisch_2_RFID_Write[5] := 0;
+		gTisch_2_RFID_Write[6] := 0;
+		gTisch_2_RFID_Write[7] := 0; 
+		gTisch_2_RFID_Write[8] := 0;
+		gTisch_2_RFID_Write[0] := 0;
+	END_IF
+	
+	gTisch_2_RFID_Write[9] := gTisch_2_RFID_Write[0];
+	
+	CASE Tisch_2_RFID OF
+		
+		0:
+			IF gMerker_Tisch_2_RFID_Vorhanden  = TRUE AND gTisch_2.Inputs.Vor_Stopper = TRUE AND gMerker_Tisch_2_RFID_Reset = FALSE (*AND gMerker_Tisch_2_lesen_fertig = FALSE*) THEN
+				gMerker_Tisch_2_Auftrag_Lesen := TRUE;
+				Tisch_2_RFID := 10;
+			END_IF
+		
+		10: lWarten_RFID_Fehler_Tisch_2 := lWarten_RFID_Fehler_Tisch_2 + (RTInfo_0.cycle_time/1000);
+			IF gTisch_2_RFID_Read[0] = 135 THEN
+				gMerker_RFID_Value_Tisch_2 := gTisch_2_RFID_Read[1];
+				//			gMerker_RFID_Tisch_2_gelesen := TRUE;
+				//			gMerker_Tisch_2_lesen_fertig := TRUE;
+				lWarten_RFID_Fehler_Tisch_2 := 0;
+				Tisch_2_RFID := 15;
+			ELSIF lWarten_RFID_Fehler_Tisch_2 >= 5000 AND gTisch_2_RFID_Read[0] <> 135 THEN
+				gMerker_Tisch_2_Auftrag_Lesen := FALSE;
+				gMerker_Tisch_2_RFID_Reset := TRUE;
+				lWarten_RFID_Fehler_Tisch_2 := 0;
+				Tisch_2_RFID := 100;
+			END_IF
+		
+		15:
+			IF gMerker_RFID_Value_Tisch_2 <> 0 THEN
+				gMerker_RFID_Tisch_2_gelesen := TRUE;
+				gMerker_Tisch_2_lesen_fertig := TRUE;
+				Tisch_2_RFID := 20;
+			ELSIF gMerker_RFID_Value_Tisch_2 = 0 THEN
+				gMerker_RFID_Tisch_2_gelesen := FALSE;
+				gMerker_Tisch_2_lesen_fertig := FALSE;
+				Tisch_2_RFID := 100;
+			END_IF				
+			
+		20: lWarten_fuer_OPCUA_Tisch_2 := lWarten_fuer_OPCUA_Tisch_2 + (RTInfo_0.cycle_time/1000);
+			IF gMerker_Tisch_2_RFID_Vorhanden = FALSE AND gTisch_2.Inputs.Vor_Stopper = FALSE AND lWarten_fuer_OPCUA_Tisch_2 >= Wartezeit_OPCUA THEN
+				gMerker_Tisch_2_Auftrag_Lesen := FALSE;
+				gMerker_RFID_Value_Tisch_2 := 0;
+				gTisch_2_RFID_Write[0] := 4;
+				Tisch_2_RFID := 30;
+			END_IF
+		
+		30: 
+			IF gTisch_2_RFID_Read[0] = 0 THEN
+				gTisch_2_RFID_Write[0] := 0;
+				Tisch_2_RFID := 0;
+			END_IF
+		
+		100:
+			IF gMerker_Tisch_2_Auftrag_Lesen = FALSE AND gMerker_Tisch_2_RFID_Reset = TRUE THEN
+				gTisch_2_RFID_Write[0] := 4;
+				gMerker_RFID_Value_Tisch_2 := 0;
+				Tisch_2_RFID := 110;
+			END_IF
+		
+		110:
+			IF gTisch_2_RFID_Read[0] = 0 THEN
+				gMerker_Tisch_2_alles_nullen := TRUE;
+				Tisch_2_RFID := 120;
+			END_IF
+		
+		120:
+			IF gTisch_2_RFID_Write[0] = 0 AND gTisch_2_RFID_Write[1] = 0 AND gTisch_2_RFID_Write[2] = 0 AND gTisch_2_RFID_Write[3] = 0 AND gTisch_2_RFID_Write[4] = 0 AND gTisch_2_RFID_Write[5] = 0 AND gTisch_2_RFID_Write[6] = 0 AND gTisch_2_RFID_Write[7] = 0 AND gTisch_2_RFID_Write[8] = 0 AND gTisch_2_RFID_Write[9] = 0 THEN
+				gMerker_Tisch_2_alles_nullen := FALSE;
+				gMerker_Tisch_2_RFID_Reset := FALSE;
+				Tisch_2_RFID := 0;
+			END_IF			
+				
+	END_CASE
+	
+
+//**********************************	Tisch 3		***********************************************
+	
+	(* Lesen *)
+
+	gMerker_Tisch_3_RFID_Vorhanden := gTisch_3_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
+	
+	IF gMerker_Tisch_3_Auftrag_Lesen = TRUE THEN
+		//			gMerker_Lesen_Fertig := FALSE;
+		gTisch_3_RFID_Write[1] := 1;(* Befehl Datenträger lesen *)
+		gTisch_3_RFID_Write[2] := 0;
+		gTisch_3_RFID_Write[3] := 0;
+		gTisch_3_RFID_Write[4] := 8;  (* Anzahl Bytes Lowbytes *)
+		gTisch_3_RFID_Write[5] := 0;
+		gTisch_3_RFID_Write[6] := 0;
+		gTisch_3_RFID_Write[7] := 0;
+		gTisch_3_RFID_Write[8] := 0;
+		gTisch_3_RFID_Write[9] := 1;
+		gTisch_3_RFID_Write[0].0 := TRUE;
+	END_IF
+		
+	(* Write Variable nullen *)
+	
+	IF gMerker_Tisch_3_alles_nullen = TRUE THEN
+		gTisch_3_RFID_Write[1] := 0;
+		gTisch_3_RFID_Write[2] := 0;
+		gTisch_3_RFID_Write[3] := 0;
+		gTisch_3_RFID_Write[4] := 0;  
+		gTisch_3_RFID_Write[5] := 0;
+		gTisch_3_RFID_Write[6] := 0;
+		gTisch_3_RFID_Write[7] := 0; 
+		gTisch_3_RFID_Write[8] := 0;
+		gTisch_3_RFID_Write[0] := 0;
+	END_IF
+	
+	gTisch_3_RFID_Write[9] := gTisch_3_RFID_Write[0];
+	
+	CASE Tisch_3_RFID OF
+		
+		0:
+			IF gMerker_Tisch_3_RFID_Vorhanden  = TRUE AND gTisch_3.Inputs.Vor_Stopper = TRUE AND gMerker_Tisch_3_RFID_Reset = FALSE (*AND gMerker_Tisch_3_lesen_fertig = FALSE*) THEN
+				gMerker_Tisch_3_Auftrag_Lesen := TRUE;
+				Tisch_3_RFID := 10;
+			END_IF
+		
+		10: lWarten_RFID_Fehler_Tisch_3 := lWarten_RFID_Fehler_Tisch_3 + (RTInfo_0.cycle_time/1000);
+			IF gTisch_3_RFID_Read[0] = 135 THEN
+				gMerker_RFID_Value_Tisch_3 := gTisch_3_RFID_Read[1];
+				//			gMerker_RFID_Tisch_3_gelesen := TRUE;
+				//			gMerker_Tisch_3_lesen_fertig := TRUE;
+				lWarten_RFID_Fehler_Tisch_3 := 0;
+				Tisch_3_RFID := 15;
+			ELSIF lWarten_RFID_Fehler_Tisch_3 >= 5000 AND gTisch_3_RFID_Read[0] <> 135 THEN
+				gMerker_Tisch_3_Auftrag_Lesen := FALSE;
+				gMerker_Tisch_3_RFID_Reset := TRUE;
+				lWarten_RFID_Fehler_Tisch_3 := 0;
+				Tisch_3_RFID := 100;
+			END_IF
+		
+		15:
+			IF gMerker_RFID_Value_Tisch_3 <> 0 THEN
+				gMerker_RFID_Tisch_3_gelesen := TRUE;
+				gMerker_Tisch_3_lesen_fertig := TRUE;
+				Tisch_3_RFID := 20;
+			ELSIF gMerker_RFID_Value_Tisch_3 = 0 THEN
+				gMerker_RFID_Tisch_3_gelesen := FALSE;
+				gMerker_Tisch_3_lesen_fertig := FALSE;
+				Tisch_3_RFID := 100;
+			END_IF				
+			
+		20: lWarten_fuer_OPCUA_Tisch_3 := lWarten_fuer_OPCUA_Tisch_3 + (RTInfo_0.cycle_time/1000);
+			IF gMerker_Tisch_3_RFID_Vorhanden = FALSE AND gTisch_3.Inputs.Vor_Stopper = FALSE AND lWarten_fuer_OPCUA_Tisch_3 >= Wartezeit_OPCUA THEN
+				gMerker_Tisch_3_Auftrag_Lesen := FALSE;
+				gMerker_RFID_Value_Tisch_3 := 0;
+				gTisch_3_RFID_Write[0] := 4;
+				Tisch_3_RFID := 30;
+			END_IF
+		
+		30: 
+			IF gTisch_3_RFID_Read[0] = 0 THEN
+				gTisch_3_RFID_Write[0] := 0;
+				Tisch_3_RFID := 0;
+			END_IF
+		
+		100:
+			IF gMerker_Tisch_3_Auftrag_Lesen = FALSE AND gMerker_Tisch_3_RFID_Reset = TRUE THEN
+				gTisch_3_RFID_Write[0] := 4;
+				gMerker_RFID_Value_Tisch_3 := 0;
+				Tisch_3_RFID := 110;
+			END_IF
+		
+		110:
+			IF gTisch_3_RFID_Read[0] = 0 THEN
+				gMerker_Tisch_3_alles_nullen := TRUE;
+				Tisch_3_RFID := 120;
+			END_IF
+		
+		120:
+			IF gTisch_3_RFID_Write[0] = 0 AND gTisch_3_RFID_Write[1] = 0 AND gTisch_3_RFID_Write[2] = 0 AND gTisch_3_RFID_Write[3] = 0 AND gTisch_3_RFID_Write[4] = 0 AND gTisch_3_RFID_Write[5] = 0 AND gTisch_3_RFID_Write[6] = 0 AND gTisch_3_RFID_Write[7] = 0 AND gTisch_3_RFID_Write[8] = 0 AND gTisch_3_RFID_Write[9] = 0 THEN
+				gMerker_Tisch_3_alles_nullen := FALSE;
+				gMerker_Tisch_3_RFID_Reset := FALSE;
+				Tisch_3_RFID := 0;
+			END_IF			
+				
+	END_CASE
+	
+	//**********************************	Tisch 4		***********************************************
+	
+	(* Lesen *)
+
+	gMerker_Tisch_4_RFID_Vorhanden := gTisch_4_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
+	
+	IF gMerker_Tisch_4_Auftrag_Lesen = TRUE THEN
+		//			gMerker_Lesen_Fertig := FALSE;
+		gTisch_4_RFID_Write[1] := 1;(* Befehl Datenträger lesen *)
+		gTisch_4_RFID_Write[2] := 0;
+		gTisch_4_RFID_Write[3] := 0;
+		gTisch_4_RFID_Write[4] := 8;  (* Anzahl Bytes Lowbytes *)
+		gTisch_4_RFID_Write[5] := 0;
+		gTisch_4_RFID_Write[6] := 0;
+		gTisch_4_RFID_Write[7] := 0;
+		gTisch_4_RFID_Write[8] := 0;
+		gTisch_4_RFID_Write[9] := 1;
+		gTisch_4_RFID_Write[0].0 := TRUE;
+	END_IF
+		
+	(* Write Variable nullen *)
+	
+	IF gMerker_Tisch_4_alles_nullen = TRUE THEN
+		gTisch_4_RFID_Write[1] := 0;
+		gTisch_4_RFID_Write[2] := 0;
+		gTisch_4_RFID_Write[3] := 0;
+		gTisch_4_RFID_Write[4] := 0;  
+		gTisch_4_RFID_Write[5] := 0;
+		gTisch_4_RFID_Write[6] := 0;
+		gTisch_4_RFID_Write[7] := 0; 
+		gTisch_4_RFID_Write[8] := 0;
+		gTisch_4_RFID_Write[0] := 0;
+	END_IF
+	
+	gTisch_4_RFID_Write[9] := gTisch_4_RFID_Write[0];
+	
+	CASE Tisch_4_RFID OF
+		
+		0:
+			IF gMerker_Tisch_4_RFID_Vorhanden  = TRUE AND gTisch_4.Inputs.Vor_Stopper = TRUE AND gMerker_Tisch_4_RFID_Reset = FALSE (*AND gMerker_Tisch_4_lesen_fertig = FALSE*) THEN
+				gMerker_Tisch_4_Auftrag_Lesen := TRUE;
+				Tisch_4_RFID := 10;
+			END_IF
+		
+		10: lWarten_RFID_Fehler_Tisch_4 := lWarten_RFID_Fehler_Tisch_4 + (RTInfo_0.cycle_time/1000);
+			IF gTisch_4_RFID_Read[0] = 135 THEN
+				gMerker_RFID_Value_Tisch_4 := gTisch_4_RFID_Read[1];
+				//			gMerker_RFID_Tisch_4_gelesen := TRUE;
+				//			gMerker_Tisch_4_lesen_fertig := TRUE;
+				lWarten_RFID_Fehler_Tisch_4 := 0;
+				Tisch_4_RFID := 15;
+			ELSIF lWarten_RFID_Fehler_Tisch_4 >= 5000 AND gTisch_4_RFID_Read[0] <> 135 THEN
+				gMerker_Tisch_4_Auftrag_Lesen := FALSE;
+				gMerker_Tisch_4_RFID_Reset := TRUE;
+				lWarten_RFID_Fehler_Tisch_4 := 0;
+				Tisch_4_RFID := 100;
+			END_IF
+		
+		15:
+			IF gMerker_RFID_Value_Tisch_4 <> 0 THEN
+				gMerker_RFID_Tisch_4_gelesen := TRUE;
+				gMerker_Tisch_4_lesen_fertig := TRUE;
+				Tisch_4_RFID := 20;
+			ELSIF gMerker_RFID_Value_Tisch_4 = 0 THEN
+				gMerker_RFID_Tisch_4_gelesen := FALSE;
+				gMerker_Tisch_4_lesen_fertig := FALSE;
+				Tisch_4_RFID := 100;
+			END_IF				
+			
+		20: lWarten_fuer_OPCUA_Tisch_4 := lWarten_fuer_OPCUA_Tisch_4 + (RTInfo_0.cycle_time/1000);
+			IF gMerker_Tisch_4_RFID_Vorhanden = FALSE AND gTisch_4.Inputs.Vor_Stopper = FALSE AND lWarten_fuer_OPCUA_Tisch_4 >= Wartezeit_OPCUA THEN
+				gMerker_Tisch_4_Auftrag_Lesen := FALSE;
+				gMerker_RFID_Value_Tisch_4 := 0;
+				gTisch_4_RFID_Write[0] := 4;
+				Tisch_4_RFID := 30;
+			END_IF
+		
+		30: 
+			IF gTisch_4_RFID_Read[0] = 0 THEN
+				gTisch_4_RFID_Write[0] := 0;
+				Tisch_4_RFID := 0;
+			END_IF
+		
+		100:
+			IF gMerker_Tisch_4_Auftrag_Lesen = FALSE AND gMerker_Tisch_4_RFID_Reset = TRUE THEN
+				gTisch_4_RFID_Write[0] := 4;
+				gMerker_RFID_Value_Tisch_4 := 0;
+				Tisch_4_RFID := 110;
+			END_IF
+		
+		110:
+			IF gTisch_4_RFID_Read[0] = 0 THEN
+				gMerker_Tisch_4_alles_nullen := TRUE;
+				Tisch_4_RFID := 120;
+			END_IF
+		
+		120:
+			IF gTisch_4_RFID_Write[0] = 0 AND gTisch_4_RFID_Write[1] = 0 AND gTisch_4_RFID_Write[2] = 0 AND gTisch_4_RFID_Write[3] = 0 AND gTisch_4_RFID_Write[4] = 0 AND gTisch_4_RFID_Write[5] = 0 AND gTisch_4_RFID_Write[6] = 0 AND gTisch_4_RFID_Write[7] = 0 AND gTisch_4_RFID_Write[8] = 0 AND gTisch_4_RFID_Write[9] = 0 THEN
+				gMerker_Tisch_4_alles_nullen := FALSE;
+				gMerker_Tisch_4_RFID_Reset := FALSE;
+				Tisch_4_RFID := 0;
+			END_IF			
+				
+	END_CASE
+	
+	//**********************************	Tisch 5		***********************************************
+	
+	(* Lesen *)
+
+	gMerker_Tisch_5_RFID_Vorhanden := gTisch_5_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
+	
+	IF gMerker_Tisch_5_Auftrag_Lesen = TRUE THEN
+		//			gMerker_Lesen_Fertig := FALSE;
+		gTisch_5_RFID_Write[1] := 1;(* Befehl Datenträger lesen *)
+		gTisch_5_RFID_Write[2] := 0;
+		gTisch_5_RFID_Write[3] := 0;
+		gTisch_5_RFID_Write[4] := 8;  (* Anzahl Bytes Lowbytes *)
+		gTisch_5_RFID_Write[5] := 0;
+		gTisch_5_RFID_Write[6] := 0;
+		gTisch_5_RFID_Write[7] := 0;
+		gTisch_5_RFID_Write[8] := 0;
+		gTisch_5_RFID_Write[9] := 1;
+		gTisch_5_RFID_Write[0].0 := TRUE;
+	END_IF
+		
+	(* Write Variable nullen *)
+	
+	IF gMerker_Tisch_5_alles_nullen = TRUE THEN
+		gTisch_5_RFID_Write[1] := 0;
+		gTisch_5_RFID_Write[2] := 0;
+		gTisch_5_RFID_Write[3] := 0;
+		gTisch_5_RFID_Write[4] := 0;  
+		gTisch_5_RFID_Write[5] := 0;
+		gTisch_5_RFID_Write[6] := 0;
+		gTisch_5_RFID_Write[7] := 0; 
+		gTisch_5_RFID_Write[8] := 0;
+		gTisch_5_RFID_Write[0] := 0;
+	END_IF
+	
+	gTisch_5_RFID_Write[9] := gTisch_5_RFID_Write[0];
+	
+	CASE Tisch_5_RFID OF
+		
+		0:
+			IF gMerker_Tisch_5_RFID_Vorhanden  = TRUE AND gTisch_5.Inputs.Vor_Stopper = TRUE AND gMerker_Tisch_5_RFID_Reset = FALSE (*AND gMerker_Tisch_5_lesen_fertig = FALSE*) THEN
+				gMerker_Tisch_5_Auftrag_Lesen := TRUE;
+				Tisch_5_RFID := 10;
+			END_IF
+		
+		10: lWarten_RFID_Fehler_Tisch_5 := lWarten_RFID_Fehler_Tisch_5 + (RTInfo_0.cycle_time/1000);
+			IF gTisch_5_RFID_Read[0] = 135 THEN
+				gMerker_RFID_Value_Tisch_5 := gTisch_5_RFID_Read[1];
+				//			gMerker_RFID_Tisch_5_gelesen := TRUE;
+				//			gMerker_Tisch_5_lesen_fertig := TRUE;
+				lWarten_RFID_Fehler_Tisch_5 := 0;
+				Tisch_5_RFID := 15;
+			ELSIF lWarten_RFID_Fehler_Tisch_5 >= 5000 AND gTisch_5_RFID_Read[0] <> 135 THEN
+				gMerker_Tisch_5_Auftrag_Lesen := FALSE;
+				gMerker_Tisch_5_RFID_Reset := TRUE;
+				lWarten_RFID_Fehler_Tisch_5 := 0;
+				Tisch_5_RFID := 100;
+			END_IF
+		
+		15:
+			IF gMerker_RFID_Value_Tisch_5 <> 0 THEN
+				gMerker_RFID_Tisch_5_gelesen := TRUE;
+				gMerker_Tisch_5_lesen_fertig := TRUE;
+				Tisch_5_RFID := 20;
+			ELSIF gMerker_RFID_Value_Tisch_5 = 0 THEN
+				gMerker_RFID_Tisch_5_gelesen := FALSE;
+				gMerker_Tisch_5_lesen_fertig := FALSE;
+				Tisch_5_RFID := 100;
+			END_IF				
+			
+		20: lWarten_fuer_OPCUA_Tisch_5 := lWarten_fuer_OPCUA_Tisch_5 + (RTInfo_0.cycle_time/1000);
+			IF gMerker_Tisch_5_RFID_Vorhanden = FALSE AND gTisch_5.Inputs.Vor_Stopper = FALSE AND lWarten_fuer_OPCUA_Tisch_5 >= Wartezeit_OPCUA THEN
+				gMerker_Tisch_5_Auftrag_Lesen := FALSE;
+				gMerker_RFID_Value_Tisch_5 := 0;
+				gTisch_5_RFID_Write[0] := 4;
+				Tisch_5_RFID := 30;
+			END_IF
+		
+		30: 
+			IF gTisch_5_RFID_Read[0] = 0 THEN
+				gTisch_5_RFID_Write[0] := 0;
+				Tisch_5_RFID := 0;
+			END_IF
+		
+		100:
+			IF gMerker_Tisch_5_Auftrag_Lesen = FALSE AND gMerker_Tisch_5_RFID_Reset = TRUE THEN
+				gTisch_5_RFID_Write[0] := 4;
+				gMerker_RFID_Value_Tisch_5 := 0;
+				Tisch_5_RFID := 110;
+			END_IF
+		
+		110:
+			IF gTisch_5_RFID_Read[0] = 0 THEN
+				gMerker_Tisch_5_alles_nullen := TRUE;
+				Tisch_5_RFID := 120;
+			END_IF
+		
+		120:
+			IF gTisch_5_RFID_Write[0] = 0 AND gTisch_5_RFID_Write[1] = 0 AND gTisch_5_RFID_Write[2] = 0 AND gTisch_5_RFID_Write[3] = 0 AND gTisch_5_RFID_Write[4] = 0 AND gTisch_5_RFID_Write[5] = 0 AND gTisch_5_RFID_Write[6] = 0 AND gTisch_5_RFID_Write[7] = 0 AND gTisch_5_RFID_Write[8] = 0 AND gTisch_5_RFID_Write[9] = 0 THEN
+				gMerker_Tisch_5_alles_nullen := FALSE;
+				gMerker_Tisch_5_RFID_Reset := FALSE;
+				Tisch_5_RFID := 0;
+			END_IF			
+				
+	END_CASE
+	
+	//**********************************	Tisch 6		***********************************************
+	
+	(* Lesen *)
+
+	gMerker_Tisch_6_RFID_Vorhanden := gTisch_6_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
+	
+	IF gMerker_Tisch_6_Auftrag_Lesen = TRUE THEN
+		//			gMerker_Lesen_Fertig := FALSE;
+		gTisch_6_RFID_Write[1] := 1;(* Befehl Datenträger lesen *)
+		gTisch_6_RFID_Write[2] := 0;
+		gTisch_6_RFID_Write[3] := 0;
+		gTisch_6_RFID_Write[4] := 8;  (* Anzahl Bytes Lowbytes *)
+		gTisch_6_RFID_Write[5] := 0;
+		gTisch_6_RFID_Write[6] := 0;
+		gTisch_6_RFID_Write[7] := 0;
+		gTisch_6_RFID_Write[8] := 0;
+		gTisch_6_RFID_Write[9] := 1;
+		gTisch_6_RFID_Write[0].0 := TRUE;
+	END_IF
+		
+	(* Write Variable nullen *)
+	
+	IF gMerker_Tisch_6_alles_nullen = TRUE THEN
+		gTisch_6_RFID_Write[1] := 0;
+		gTisch_6_RFID_Write[2] := 0;
+		gTisch_6_RFID_Write[3] := 0;
+		gTisch_6_RFID_Write[4] := 0;  
+		gTisch_6_RFID_Write[5] := 0;
+		gTisch_6_RFID_Write[6] := 0;
+		gTisch_6_RFID_Write[7] := 0; 
+		gTisch_6_RFID_Write[8] := 0;
+		gTisch_6_RFID_Write[0] := 0;
+	END_IF
+	
+	gTisch_6_RFID_Write[9] := gTisch_6_RFID_Write[0];
+	
+	CASE Tisch_6_RFID OF
+		
+		0:
+			IF gMerker_Tisch_6_RFID_Vorhanden  = TRUE AND gTisch_6.Inputs.Vor_Stopper = TRUE AND gMerker_Tisch_6_RFID_Reset = FALSE AND gMerker_block_RFID_read_Tisch_6 = FALSE (*AND gMerker_Tisch_6_lesen_fertig = FALSE*) THEN
+				gMerker_Tisch_6_Auftrag_Lesen := TRUE;
+				Tisch_6_RFID := 10;
+			END_IF
+		
+		10: lWarten_RFID_Fehler_Tisch_6 := lWarten_RFID_Fehler_Tisch_6 + (RTInfo_0.cycle_time/1000);
+			IF gTisch_6_RFID_Read[0] = 135 THEN
+				gMerker_RFID_Value_Tisch_6 := gTisch_6_RFID_Read[1];
+				//			gMerker_RFID_Tisch_6_gelesen := TRUE;
+				//			gMerker_Tisch_6_lesen_fertig := TRUE;
+				lWarten_RFID_Fehler_Tisch_6 := 0;
+				Tisch_6_RFID := 15;
+			ELSIF lWarten_RFID_Fehler_Tisch_6 >= 5000 AND gTisch_6_RFID_Read[0] <> 135 THEN
+				gMerker_Tisch_6_Auftrag_Lesen := FALSE;
+				gMerker_Tisch_6_RFID_Reset := TRUE;
+				lWarten_RFID_Fehler_Tisch_6 := 0;
+				Tisch_6_RFID := 100;
+			END_IF
+		
+		15:
+			IF gMerker_RFID_Value_Tisch_6 <> 0 THEN
+				gMerker_RFID_Tisch_6_gelesen := TRUE;
+				gMerker_Tisch_6_lesen_fertig := TRUE;
+				Tisch_6_RFID := 20;
+			ELSIF gMerker_RFID_Value_Tisch_6 = 0 THEN
+				gMerker_RFID_Tisch_6_gelesen := FALSE;
+				gMerker_Tisch_6_lesen_fertig := FALSE;
+				Tisch_6_RFID := 100;
+			END_IF				
+			
+		20: lWarten_fuer_OPCUA_Tisch_6 := lWarten_fuer_OPCUA_Tisch_6 + (RTInfo_0.cycle_time/1000);
+			IF gMerker_Tisch_6_RFID_Vorhanden = FALSE AND gTisch_6.Inputs.Vor_Stopper = FALSE AND lWarten_fuer_OPCUA_Tisch_6 >= Wartezeit_OPCUA THEN
+				gMerker_Tisch_6_Auftrag_Lesen := FALSE;
+	//			gMerker_RFID_Value_Tisch_6 := 0;
+				gTisch_6_RFID_Write[0] := 4;
+				Tisch_6_RFID := 30;
+			END_IF
+		
+		30: 
+			IF gTisch_6_RFID_Read[0] = 0 THEN
+				gTisch_6_RFID_Write[0] := 0;
+				Tisch_6_RFID := 0;
+			END_IF
+		
+		100:
+			IF gMerker_Tisch_6_Auftrag_Lesen = FALSE AND gMerker_Tisch_6_RFID_Reset = TRUE THEN
+				gTisch_6_RFID_Write[0] := 4;
+		//		gMerker_RFID_Value_Tisch_6 := 0;
+				Tisch_6_RFID := 110;
+			END_IF
+		
+		110:
+			IF gTisch_6_RFID_Read[0] = 0 THEN
+				gMerker_Tisch_6_alles_nullen := TRUE;
+				Tisch_6_RFID := 120;
+			END_IF
+		
+		120:
+			IF gTisch_6_RFID_Write[0] = 0 AND gTisch_6_RFID_Write[1] = 0 AND gTisch_6_RFID_Write[2] = 0 AND gTisch_6_RFID_Write[3] = 0 AND gTisch_6_RFID_Write[4] = 0 AND gTisch_6_RFID_Write[5] = 0 AND gTisch_6_RFID_Write[6] = 0 AND gTisch_6_RFID_Write[7] = 0 AND gTisch_6_RFID_Write[8] = 0 AND gTisch_6_RFID_Write[9] = 0 THEN
+				gMerker_Tisch_6_alles_nullen := FALSE;
+				gMerker_Tisch_6_RFID_Reset := FALSE;
+				Tisch_6_RFID := 0;
+			END_IF			
+				
+	END_CASE
+	
+	//**********************************	Tisch 7		***********************************************
+	
+	(* Lesen *)
+
+	gMerker_Tisch_7_RFID_Vorhanden := gTisch_7_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
+	
+	IF gMerker_Tisch_7_Auftrag_Lesen = TRUE THEN
+		//			gMerker_Lesen_Fertig := FALSE;
+		gTisch_7_RFID_Write[1] := 1;(* Befehl Datenträger lesen *)
+		gTisch_7_RFID_Write[2] := 0;
+		gTisch_7_RFID_Write[3] := 0;
+		gTisch_7_RFID_Write[4] := 8;  (* Anzahl Bytes Lowbytes *)
+		gTisch_7_RFID_Write[5] := 0;
+		gTisch_7_RFID_Write[6] := 0;
+		gTisch_7_RFID_Write[7] := 0;
+		gTisch_7_RFID_Write[8] := 0;
+		gTisch_7_RFID_Write[9] := 1;
+		gTisch_7_RFID_Write[0].0 := TRUE;
+	END_IF
+		
+	(* Write Variable nullen *)
+	
+	IF gMerker_Tisch_7_alles_nullen = TRUE THEN
+		gTisch_7_RFID_Write[1] := 0;
+		gTisch_7_RFID_Write[2] := 0;
+		gTisch_7_RFID_Write[3] := 0;
+		gTisch_7_RFID_Write[4] := 0;  
+		gTisch_7_RFID_Write[5] := 0;
+		gTisch_7_RFID_Write[6] := 0;
+		gTisch_7_RFID_Write[7] := 0; 
+		gTisch_7_RFID_Write[8] := 0;
+		gTisch_7_RFID_Write[0] := 0;
+	END_IF
+	
+	gTisch_7_RFID_Write[9] := gTisch_7_RFID_Write[0];
+	
+	CASE Tisch_7_RFID OF
+		
+		0:
+			IF gMerker_Tisch_7_RFID_Vorhanden  = TRUE AND gTisch_7.Inputs.Vor_Stopper = TRUE AND gMerker_Tisch_7_RFID_Reset = FALSE (*AND gMerker_Tisch_7_lesen_fertig = FALSE*) THEN
+				gMerker_Tisch_7_Auftrag_Lesen := TRUE;
+				Tisch_7_RFID := 10;
+			END_IF
+		
+		10: lWarten_RFID_Fehler_Tisch_7 := lWarten_RFID_Fehler_Tisch_7 + (RTInfo_0.cycle_time/1000);
+			IF gTisch_7_RFID_Read[0] = 135 THEN
+				gMerker_RFID_Value_Tisch_7 := gTisch_7_RFID_Read[1];
+				//			gMerker_RFID_Tisch_7_gelesen := TRUE;
+				//			gMerker_Tisch_7_lesen_fertig := TRUE;
+				lWarten_RFID_Fehler_Tisch_7 := 0;
+				Tisch_7_RFID := 15;
+			ELSIF lWarten_RFID_Fehler_Tisch_7 >= 5000 AND gTisch_7_RFID_Read[0] <> 135 THEN
+				gMerker_Tisch_7_Auftrag_Lesen := FALSE;
+				gMerker_Tisch_7_RFID_Reset := TRUE;
+				lWarten_RFID_Fehler_Tisch_7 := 0;
+				Tisch_7_RFID := 100;
+			END_IF
+		
+		15:
+			IF gMerker_RFID_Value_Tisch_7 <> 0 THEN
+				gMerker_RFID_Tisch_7_gelesen := TRUE;
+				gMerker_Tisch_7_lesen_fertig := TRUE;
+				Tisch_7_RFID := 20;
+			ELSIF gMerker_RFID_Value_Tisch_7 = 0 THEN
+				gMerker_RFID_Tisch_7_gelesen := FALSE;
+				gMerker_Tisch_7_lesen_fertig := FALSE;
+				Tisch_7_RFID := 100;
+			END_IF				
+			
+		20: lWarten_fuer_OPCUA_Tisch_7 := lWarten_fuer_OPCUA_Tisch_7 + (RTInfo_0.cycle_time/1000);
+			IF gMerker_Tisch_7_RFID_Vorhanden = FALSE AND gTisch_7.Inputs.Vor_Stopper = FALSE AND lWarten_fuer_OPCUA_Tisch_7 >= Wartezeit_OPCUA THEN
+				gMerker_Tisch_7_Auftrag_Lesen := FALSE;
+				gMerker_RFID_Value_Tisch_7 := 0;
+				gTisch_7_RFID_Write[0] := 4;
+				Tisch_7_RFID := 30;
+			END_IF
+		
+		30: 
+			IF gTisch_7_RFID_Read[0] = 0 THEN
+				gTisch_7_RFID_Write[0] := 0;
+				Tisch_7_RFID := 0;
+			END_IF
+		
+		100:
+			IF gMerker_Tisch_7_Auftrag_Lesen = FALSE AND gMerker_Tisch_7_RFID_Reset = TRUE THEN
+				gTisch_7_RFID_Write[0] := 4;
+				gMerker_RFID_Value_Tisch_7 := 0;
+				Tisch_7_RFID := 110;
+			END_IF
+		
+		110:
+			IF gTisch_7_RFID_Read[0] = 0 THEN
+				gMerker_Tisch_7_alles_nullen := TRUE;
+				Tisch_7_RFID := 120;
+			END_IF
+		
+		120:
+			IF gTisch_7_RFID_Write[0] = 0 AND gTisch_7_RFID_Write[1] = 0 AND gTisch_7_RFID_Write[2] = 0 AND gTisch_7_RFID_Write[3] = 0 AND gTisch_7_RFID_Write[4] = 0 AND gTisch_7_RFID_Write[5] = 0 AND gTisch_7_RFID_Write[6] = 0 AND gTisch_7_RFID_Write[7] = 0 AND gTisch_7_RFID_Write[8] = 0 AND gTisch_7_RFID_Write[9] = 0 THEN
+				gMerker_Tisch_7_alles_nullen := FALSE;
+				gMerker_Tisch_7_RFID_Reset := FALSE;
+				Tisch_7_RFID := 0;
+			END_IF			
+				
+	END_CASE
+	
+	//**********************************	Tisch 8		***********************************************
+	
+	(* Lesen *)
+
+	gMerker_Tisch_8_RFID_Vorhanden := gTisch_8_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
+	
+	IF gMerker_Tisch_8_Auftrag_Lesen = TRUE THEN
+		//			gMerker_Lesen_Fertig := FALSE;
+		gTisch_8_RFID_Write[1] := 1;(* Befehl Datenträger lesen *)
+		gTisch_8_RFID_Write[2] := 0;
+		gTisch_8_RFID_Write[3] := 0;
+		gTisch_8_RFID_Write[4] := 8;  (* Anzahl Bytes Lowbytes *)
+		gTisch_8_RFID_Write[5] := 0;
+		gTisch_8_RFID_Write[6] := 0;
+		gTisch_8_RFID_Write[7] := 0;
+		gTisch_8_RFID_Write[8] := 0;
+		gTisch_8_RFID_Write[9] := 1;
+		gTisch_8_RFID_Write[0].0 := TRUE;
+	END_IF
+		
+	(* Write Variable nullen *)
+	
+	IF gMerker_Tisch_8_alles_nullen = TRUE THEN
+		gTisch_8_RFID_Write[1] := 0;
+		gTisch_8_RFID_Write[2] := 0;
+		gTisch_8_RFID_Write[3] := 0;
+		gTisch_8_RFID_Write[4] := 0;  
+		gTisch_8_RFID_Write[5] := 0;
+		gTisch_8_RFID_Write[6] := 0;
+		gTisch_8_RFID_Write[7] := 0; 
+		gTisch_8_RFID_Write[8] := 0;
+		gTisch_8_RFID_Write[0] := 0;
+	END_IF
+	
+	gTisch_8_RFID_Write[9] := gTisch_8_RFID_Write[0];
+	
+	CASE Tisch_8_RFID OF
+		
+		0:
+			IF gMerker_Tisch_8_RFID_Vorhanden  = TRUE AND gTisch_8.Inputs.Vor_Stopper = TRUE AND gMerker_Tisch_8_RFID_Reset = FALSE (*AND gMerker_Tisch_8_lesen_fertig = FALSE*) THEN
+				gMerker_Tisch_8_Auftrag_Lesen := TRUE;
+				Tisch_8_RFID := 10;
+			END_IF
+		
+		10: lWarten_RFID_Fehler_Tisch_8 := lWarten_RFID_Fehler_Tisch_8 + (RTInfo_0.cycle_time/1000);
+			IF gTisch_8_RFID_Read[0] = 135 THEN
+				gMerker_RFID_Value_Tisch_8 := gTisch_8_RFID_Read[1];
+				//			gMerker_RFID_Tisch_8_gelesen := TRUE;
+				//			gMerker_Tisch_8_lesen_fertig := TRUE;
+				lWarten_RFID_Fehler_Tisch_8 := 0;
+				Tisch_8_RFID := 15;
+			ELSIF lWarten_RFID_Fehler_Tisch_8 >= 5000 AND gTisch_8_RFID_Read[0] <> 135 THEN
+				gMerker_Tisch_8_Auftrag_Lesen := FALSE;
+				gMerker_Tisch_8_RFID_Reset := TRUE;
+				lWarten_RFID_Fehler_Tisch_8 := 0;
+				Tisch_8_RFID := 100;
+			END_IF
+		
+		15:
+			IF gMerker_RFID_Value_Tisch_8 <> 0 THEN
+				gMerker_RFID_Tisch_8_gelesen := TRUE;
+				gMerker_Tisch_8_lesen_fertig := TRUE;
+				Tisch_8_RFID := 20;
+			ELSIF gMerker_RFID_Value_Tisch_8 = 0 THEN
+				gMerker_RFID_Tisch_8_gelesen := FALSE;
+				gMerker_Tisch_8_lesen_fertig := FALSE;
+				Tisch_8_RFID := 100;
+			END_IF				
+			
+		20: lWarten_fuer_OPCUA_Tisch_8 := lWarten_fuer_OPCUA_Tisch_8 + (RTInfo_0.cycle_time/1000);
+			IF gMerker_Tisch_8_RFID_Vorhanden = FALSE AND gTisch_8.Inputs.Vor_Stopper = FALSE AND lWarten_fuer_OPCUA_Tisch_8 >= Wartezeit_OPCUA THEN
+				gMerker_Tisch_8_Auftrag_Lesen := FALSE;
+				gMerker_RFID_Value_Tisch_8 := 0;
+				gTisch_8_RFID_Write[0] := 4;
+				Tisch_8_RFID := 30;
+			END_IF
+		
+		30: 
+			IF gTisch_8_RFID_Read[0] = 0 THEN
+				gTisch_8_RFID_Write[0] := 0;
+				Tisch_8_RFID := 0;
+			END_IF
+		
+		100:
+			IF gMerker_Tisch_8_Auftrag_Lesen = FALSE AND gMerker_Tisch_8_RFID_Reset = TRUE THEN
+				gTisch_8_RFID_Write[0] := 4;
+				gMerker_RFID_Value_Tisch_8 := 0;
+				Tisch_8_RFID := 110;
+			END_IF
+		
+		110:
+			IF gTisch_8_RFID_Read[0] = 0 THEN
+				gMerker_Tisch_8_alles_nullen := TRUE;
+				Tisch_8_RFID := 120;
+			END_IF
+		
+		120:
+			IF gTisch_8_RFID_Write[0] = 0 AND gTisch_8_RFID_Write[1] = 0 AND gTisch_8_RFID_Write[2] = 0 AND gTisch_8_RFID_Write[3] = 0 AND gTisch_8_RFID_Write[4] = 0 AND gTisch_8_RFID_Write[5] = 0 AND gTisch_8_RFID_Write[6] = 0 AND gTisch_8_RFID_Write[7] = 0 AND gTisch_8_RFID_Write[8] = 0 AND gTisch_8_RFID_Write[9] = 0 THEN
+				gMerker_Tisch_8_alles_nullen := FALSE;
+				gMerker_Tisch_8_RFID_Reset := FALSE;
+				Tisch_8_RFID := 0;
+			END_IF			
+				
+	END_CASE
+	
+	OPCUA_TEST_1;
+	
+	OPCUATEST2;
+	
+	OPCUATEST3;
+	
+	
+	
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/RFID/Types.typ


+ 20 - 0
Logical/RFID/Variables.var

@@ -0,0 +1,20 @@
+VAR
+	lWarten_RFID_Fehler_Tisch_1 : UDINT;
+	lWarten_RFID_Fehler_Tisch_2 : UDINT;
+	RTInfo_0 : RTInfo;
+	lWarten_RFID_Fehler_Tisch_3 : UDINT;
+	lWarten_RFID_Fehler_Tisch_4 : UDINT;
+	lWarten_RFID_Fehler_Tisch_5 : UDINT;
+	lWarten_RFID_Fehler_Tisch_6 : UDINT;
+	lWarten_RFID_Fehler_Tisch_7 : UDINT;
+	lWarten_RFID_Fehler_Tisch_8 : UDINT;
+	Wartezeit_OPCUA : UDINT;
+	lWarten_fuer_OPCUA_Tisch_1 : UDINT;
+	lWarten_fuer_OPCUA_Tisch_2 : UDINT;
+	lWarten_fuer_OPCUA_Tisch_3 : UDINT;
+	lWarten_fuer_OPCUA_Tisch_4 : UDINT;
+	lWarten_fuer_OPCUA_Tisch_5 : UDINT;
+	lWarten_fuer_OPCUA_Tisch_6 : UDINT;
+	lWarten_fuer_OPCUA_Tisch_7 : UDINT;
+	lWarten_fuer_OPCUA_Tisch_8 : UDINT;
+END_VAR

+ 34 - 0
Logical/Stationen_Variablen/Kurve_1.typ

@@ -0,0 +1,34 @@
+
+TYPE
+	Kurve_1_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Kurve_1_Cmd; (* *) (* *) (*13*)
+		Status : Kurve_1_Status; (* *) (* *) (*14*)
+		Inputs : Kurve_1_Inputs; (* *) (* *) (*15*)
+		Outputs : Kurve_1_Outputs; (* *) (* *) (*16*)
+		Times : Kurve_1_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Kurve_1_Cmd : 	STRUCT 
+		Stopper : USINT;
+	END_STRUCT;
+	Kurve_1_Status : 	STRUCT 
+		Stopper : USINT;
+		Vor_Stopper : USINT;
+		Nach_Stopper : USINT;
+	END_STRUCT;
+	Kurve_1_Inputs : 	STRUCT 
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Stausensor : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+	END_STRUCT;
+	Kurve_1_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+	END_STRUCT;
+	Kurve_1_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 32 - 0
Logical/Stationen_Variablen/Kurve_2.typ

@@ -0,0 +1,32 @@
+
+TYPE
+	Kurve_2_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Kurve_2_Cmd; (* *) (* *) (*13*)
+		Status : Kurve_2_Status; (* *) (* *) (*14*)
+		Inputs : Kurve_2_Inputs; (* *) (* *) (*15*)
+		Outputs : Kurve_2_Outputs; (* *) (* *) (*16*)
+		Times : Kurve_2_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Kurve_2_Cmd : 	STRUCT 
+		Stopper : USINT;
+	END_STRUCT;
+	Kurve_2_Status : 	STRUCT 
+		Stopper : USINT;
+	END_STRUCT;
+	Kurve_2_Inputs : 	STRUCT 
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+		Stausensor : BOOL;
+	END_STRUCT;
+	Kurve_2_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+	END_STRUCT;
+	Kurve_2_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 32 - 0
Logical/Stationen_Variablen/Kurve_3.typ

@@ -0,0 +1,32 @@
+
+TYPE
+	Kurve_3_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Kurve_3_Cmd; (* *) (* *) (*13*)
+		Status : Kurve_3_Status; (* *) (* *) (*14*)
+		Inputs : Kurve_3_Inputs; (* *) (* *) (*15*)
+		Outputs : Kurve_3_Outputs; (* *) (* *) (*16*)
+		Times : Kurve_3_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Kurve_3_Cmd : 	STRUCT 
+		Stopper : USINT;
+	END_STRUCT;
+	Kurve_3_Status : 	STRUCT 
+		Stopper : USINT;
+	END_STRUCT;
+	Kurve_3_Inputs : 	STRUCT 
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+		Stausensor : BOOL;
+	END_STRUCT;
+	Kurve_3_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+	END_STRUCT;
+	Kurve_3_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 32 - 0
Logical/Stationen_Variablen/Kurve_4.typ

@@ -0,0 +1,32 @@
+
+TYPE
+	Kurve_4_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Kurve_4_Cmd; (* *) (* *) (*13*)
+		Status : Kurve_4_Status; (* *) (* *) (*14*)
+		Inputs : Kurve_4_Inputs; (* *) (* *) (*15*)
+		Outputs : Kurve_4_Outputs; (* *) (* *) (*16*)
+		Times : Kurve_4_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Kurve_4_Cmd : 	STRUCT 
+		Stopper : USINT;
+	END_STRUCT;
+	Kurve_4_Status : 	STRUCT 
+		Stopper : USINT;
+	END_STRUCT;
+	Kurve_4_Inputs : 	STRUCT 
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+		Stausensor : BOOL;
+	END_STRUCT;
+	Kurve_4_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+	END_STRUCT;
+	Kurve_4_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 18 - 0
Logical/Stationen_Variablen/Package.pkg

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Package xmlns="http://br-automation.co.at/AS/Package">
+  <Objects>
+    <Object Type="File">Tisch_1.typ</Object>
+    <Object Type="File">Tisch_2.typ</Object>
+    <Object Type="File">Tisch_3.typ</Object>
+    <Object Type="File">Tisch_4.typ</Object>
+    <Object Type="File">Tisch_5.typ</Object>
+    <Object Type="File">Tisch_6.typ</Object>
+    <Object Type="File">Tisch_7.typ</Object>
+    <Object Type="File">Tisch_8.typ</Object>
+    <Object Type="File">Kurve_1.typ</Object>
+    <Object Type="File">Kurve_2.typ</Object>
+    <Object Type="File">Kurve_3.typ</Object>
+    <Object Type="File">Kurve_4.typ</Object>
+  </Objects>
+</Package>

+ 45 - 0
Logical/Stationen_Variablen/Tisch_1.typ

@@ -0,0 +1,45 @@
+
+TYPE
+	Tisch_1_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Tisch_1_Cmd; (* *) (* *) (*13*)
+		Status : Tisch_1_Status; (* *) (* *) (*14*)
+		Inputs : Tisch_1_Inputs; (* *) (* *) (*15*)
+		Outputs : Tisch_1_Outputs; (* *) (* *) (*16*)
+		Times : Tisch_1_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Tisch_1_Cmd : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_1_Status : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_1_Inputs : 	STRUCT 
+		Vor_VorStopper : BOOL;
+		Nach_Vorstopper : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Vorstopper_ausgefahren : BOOL;
+		Vorstopper_eingefahren : BOOL;
+		Stausensor : BOOL;
+		Start : BOOL;
+	END_STRUCT;
+	Tisch_1_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+		Vorstopper_einfahren : BOOL;
+		Vorstopper_ausfahren : BOOL;
+		Lampe_Start : BOOL;
+	END_STRUCT;
+	Tisch_1_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+		Vorstopper_EinZeit : BOOL;
+		Vorstopper_ZeitRun : UDINT;
+		Vorstopper_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 45 - 0
Logical/Stationen_Variablen/Tisch_2.typ

@@ -0,0 +1,45 @@
+
+TYPE
+	Tisch_2_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Tisch_2_Cmd; (* *) (* *) (*13*)
+		Status : Tisch_2_Status; (* *) (* *) (*14*)
+		Inputs : Tisch_2_Inputs; (* *) (* *) (*15*)
+		Outputs : Tisch_2_Outputs; (* *) (* *) (*16*)
+		Times : Tisch_2_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Tisch_2_Cmd : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_2_Status : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_2_Inputs : 	STRUCT 
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Vorstopper_ausgefahren : BOOL;
+		Vorstopper_eingefahren : BOOL;
+		Vor_VorStopper : BOOL;
+		Nach_Vorstopper : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+		Stausensor : BOOL;
+		Start : BOOL;
+	END_STRUCT;
+	Tisch_2_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+		Vorstopper_einfahren : BOOL;
+		Vorstopper_ausfahren : BOOL;
+		Lampe_Start : BOOL;
+	END_STRUCT;
+	Tisch_2_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+		Vorstopper_EinZeit : BOOL;
+		Vorstopper_ZeitRun : UDINT;
+		Vorstopper_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 45 - 0
Logical/Stationen_Variablen/Tisch_3.typ

@@ -0,0 +1,45 @@
+
+TYPE
+	Tisch_3_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Tisch_3_Cmd; (* *) (* *) (*13*)
+		Status : Tisch_3_Status; (* *) (* *) (*14*)
+		Inputs : Tisch_3_Inputs; (* *) (* *) (*15*)
+		Outputs : Tisch_3_Outputs; (* *) (* *) (*16*)
+		Times : Tisch_3_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Tisch_3_Cmd : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_3_Status : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_3_Inputs : 	STRUCT 
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Vorstopper_ausgefahren : BOOL;
+		Vorstopper_eingefahren : BOOL;
+		Vor_VorStopper : BOOL;
+		Nach_Vorstopper : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+		Stausensor : BOOL;
+		Start : BOOL;
+	END_STRUCT;
+	Tisch_3_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+		Vorstopper_einfahren : BOOL;
+		Vorstopper_ausfahren : BOOL;
+		Lampe_Start : BOOL;
+	END_STRUCT;
+	Tisch_3_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+		Vorstopper_EinZeit : BOOL;
+		Vorstopper_ZeitRun : UDINT;
+		Vorstopper_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 45 - 0
Logical/Stationen_Variablen/Tisch_4.typ

@@ -0,0 +1,45 @@
+
+TYPE
+	Tisch_4_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Tisch_4_Cmd; (* *) (* *) (*13*)
+		Status : Tisch_4_Status; (* *) (* *) (*14*)
+		Inputs : Tisch_4_Inputs; (* *) (* *) (*15*)
+		Outputs : Tisch_4_Outputs; (* *) (* *) (*16*)
+		Times : Tisch_4_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Tisch_4_Cmd : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_4_Status : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_4_Inputs : 	STRUCT 
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Vorstopper_ausgefahren : BOOL;
+		Vorstopper_eingefahren : BOOL;
+		Vor_VorStopper : BOOL;
+		Nach_Vorstopper : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+		Stausensor : BOOL;
+		Start : BOOL;
+	END_STRUCT;
+	Tisch_4_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+		Vorstopper_einfahren : BOOL;
+		Vorstopper_ausfahren : BOOL;
+		Lampe_Start : BOOL;
+	END_STRUCT;
+	Tisch_4_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+		Vorstopper_EinZeit : BOOL;
+		Vorstopper_ZeitRun : UDINT;
+		Vorstopper_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 45 - 0
Logical/Stationen_Variablen/Tisch_5.typ

@@ -0,0 +1,45 @@
+
+TYPE
+	Tisch_5_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Tisch_5_Cmd; (* *) (* *) (*13*)
+		Status : Tisch_5_Status; (* *) (* *) (*14*)
+		Inputs : Tisch_5_Inputs; (* *) (* *) (*15*)
+		Outputs : Tisch_5_Outputs; (* *) (* *) (*16*)
+		Times : Tisch_5_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Tisch_5_Cmd : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_5_Status : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_5_Inputs : 	STRUCT 
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Vorstopper_ausgefahren : BOOL;
+		Vorstopper_eingefahren : BOOL;
+		Vor_VorStopper : BOOL;
+		Nach_Vorstopper : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+		Stausensor : BOOL;
+		Start : BOOL;
+	END_STRUCT;
+	Tisch_5_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+		Vorstopper_einfahren : BOOL;
+		Vorstopper_ausfahren : BOOL;
+		Lampe_Start : BOOL;
+	END_STRUCT;
+	Tisch_5_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+		Vorstopper_EinZeit : BOOL;
+		Vorstopper_ZeitRun : UDINT;
+		Vorstopper_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 54 - 0
Logical/Stationen_Variablen/Tisch_6.typ

@@ -0,0 +1,54 @@
+
+TYPE
+	Tisch_6_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Tisch_6_Cmd; (* *) (* *) (*13*)
+		Status : Tisch_6_Status; (* *) (* *) (*14*)
+		Inputs : Tisch_6_Inputs; (* *) (* *) (*15*)
+		Outputs : Tisch_6_Outputs; (* *) (* *) (*16*)
+		Times : Tisch_6_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Tisch_6_Cmd : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+		Aushebeeinheit : USINT;
+	END_STRUCT;
+	Tisch_6_Status : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+		Aushebeeinheit : USINT;
+	END_STRUCT;
+	Tisch_6_Inputs : 	STRUCT 
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Vorstopper_ausgefahren : BOOL;
+		Vorstopper_eingefahren : BOOL;
+		Vor_VorStopper : BOOL;
+		Nach_Vorstopper : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+		Stausensor : BOOL;
+		Start : BOOL;
+		Aushebeeinheit_ausgefahren : BOOL;
+		Aushebeeinheit_eingefahren : BOOL;
+	END_STRUCT;
+	Tisch_6_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+		Vorstopper_einfahren : BOOL;
+		Vorstopper_ausfahren : BOOL;
+		Lampe_Start : BOOL;
+		Aushebeeinheit_einfahren : BOOL;
+		Aushebeeinheit_ausfahren : BOOL;
+	END_STRUCT;
+	Tisch_6_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+		Vorstopper_EinZeit : BOOL;
+		Vorstopper_ZeitRun : UDINT;
+		Vorstopper_AusZeit : BOOL;
+		Aushebeeinheit_EinZeit : BOOL;
+		Aushebeeinheit_ZeitRun : UDINT;
+		Aushebeeinheit_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 45 - 0
Logical/Stationen_Variablen/Tisch_7.typ

@@ -0,0 +1,45 @@
+
+TYPE
+	Tisch_7_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Tisch_7_Cmd; (* *) (* *) (*13*)
+		Status : Tisch_7_Status; (* *) (* *) (*14*)
+		Inputs : Tisch_7_Inputs; (* *) (* *) (*15*)
+		Outputs : Tisch_7_Outputs; (* *) (* *) (*16*)
+		Times : Tisch_7_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Tisch_7_Cmd : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_7_Status : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_7_Inputs : 	STRUCT 
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Vorstopper_ausgefahren : BOOL;
+		Vorstopper_eingefahren : BOOL;
+		Vor_VorStopper : BOOL;
+		Nach_Vorstopper : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+		Stausensor : BOOL;
+		Start : BOOL;
+	END_STRUCT;
+	Tisch_7_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+		Vorstopper_einfahren : BOOL;
+		Vorstopper_ausfahren : BOOL;
+		Lampe_Start : BOOL;
+	END_STRUCT;
+	Tisch_7_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+		Vorstopper_EinZeit : BOOL;
+		Vorstopper_ZeitRun : UDINT;
+		Vorstopper_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 45 - 0
Logical/Stationen_Variablen/Tisch_8.typ

@@ -0,0 +1,45 @@
+
+TYPE
+	Tisch_8_Typ : 	STRUCT  (* *) (* *) (*12*)
+		Cmd : Tisch_8_Cmd; (* *) (* *) (*13*)
+		Status : Tisch_8_Status; (* *) (* *) (*14*)
+		Inputs : Tisch_8_Inputs; (* *) (* *) (*15*)
+		Outputs : Tisch_8_Outputs; (* *) (* *) (*16*)
+		Times : Tisch_8_Times; (* *) (* *) (*17*)
+	END_STRUCT;
+	Tisch_8_Cmd : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_8_Status : 	STRUCT 
+		Stopper : USINT;
+		Vorstopper : USINT;
+	END_STRUCT;
+	Tisch_8_Inputs : 	STRUCT 
+		Stopper_ausgefahren : BOOL;
+		Stopper_eingefahren : BOOL;
+		Vorstopper_ausgefahren : BOOL;
+		Vorstopper_eingefahren : BOOL;
+		Vor_VorStopper : BOOL;
+		Nach_Vorstopper : BOOL;
+		Vor_Stopper : BOOL;
+		Nach_Stopper : BOOL;
+		Stausensor : BOOL;
+		Start : BOOL;
+	END_STRUCT;
+	Tisch_8_Outputs : 	STRUCT 
+		Stopper_ausfahren : BOOL;
+		Stopper_einfahren : BOOL;
+		Vorstopper_einfahren : BOOL;
+		Vorstopper_ausfahren : BOOL;
+		Lampe_Start : BOOL;
+	END_STRUCT;
+	Tisch_8_Times : 	STRUCT 
+		Stopper_ZeitRun : UDINT;
+		Stopper_EinZeit : BOOL;
+		Stopper_AusZeit : BOOL;
+		Vorstopper_EinZeit : BOOL;
+		Vorstopper_ZeitRun : UDINT;
+		Vorstopper_AusZeit : BOOL;
+	END_STRUCT;
+END_TYPE

+ 14 - 0
Logical/TischProgramme/Package.pkg

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Package xmlns="http://br-automation.co.at/AS/Package">
+  <Objects>
+    <Object Type="Program" Language="IEC">Tisch1</Object>
+    <Object Type="Program" Language="IEC">Tisch2</Object>
+    <Object Type="Program" Language="IEC">Tisch3</Object>
+    <Object Type="Program" Language="IEC">Tisch4</Object>
+    <Object Type="Program" Language="IEC">Tisch5</Object>
+    <Object Type="Program" Language="IEC">Tisch6</Object>
+    <Object Type="Program" Language="IEC">Tisch7</Object>
+    <Object Type="Program" Language="IEC">Tisch8</Object>
+  </Objects>
+</Package>

+ 9 - 0
Logical/TischProgramme/Tisch1/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 129 - 0
Logical/TischProgramme/Tisch1/Main.st

@@ -0,0 +1,129 @@
+
+PROGRAM _INIT
+
+	Tisch_1 := 0;
+
+END_PROGRAM
+
+PROGRAM _CYCLIC
+	
+		IF (gTisch_1.Inputs.Vor_Stopper = TRUE AND gTisch_1.Inputs.Stausensor = FALSE AND Tisch_1 = 0) OR (gTisch_1.Inputs.Vor_VorStopper = TRUE AND gTisch_1.Inputs.Vor_Stopper = FALSE AND Tisch_1 = 0) THEN
+			gTisch_1.Outputs.Lampe_Start := TRUE;
+		ELSE
+			gTisch_1.Outputs.Lampe_Start := FALSE;
+		END_IF
+	
+		IF gTaster_Tisch_1_aus = TRUE THEN
+			gTisch_1.Cmd.Stopper := KMD_EINFAHREN;
+			gTisch_1.Cmd.Vorstopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_1_gelesen := TRUE;
+			Tisch_1 := 0;
+		END_IF
+
+	CASE Tisch_1 OF
+
+		0:
+		IF gTisch_1.Inputs.Start = TRUE AND gTisch_1.Inputs.Vor_VorStopper = TRUE AND gTisch_1.Inputs.Vor_Stopper = TRUE AND gTisch_1.Inputs.Stausensor = FALSE AND gTaster_Tisch_1_aus = FALSE AND gMerker_RFID_Tisch_1_gelesen = TRUE THEN
+			gTisch_1.Cmd.Stopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_1_gelesen := FALSE;
+			gMerker_Tisch_1_lesen_fertig := FALSE;
+			Tisch_1 := 10;
+		ELSIF gTisch_1.Inputs.Start = TRUE AND gTisch_1.Inputs.Vor_VorStopper = FALSE AND gTisch_1.Inputs.Vor_Stopper = TRUE AND gTisch_1.Inputs.Stausensor = FALSE AND gTaster_Tisch_1_aus = FALSE AND gMerker_RFID_Tisch_1_gelesen = TRUE THEN
+				gTisch_1.Cmd.Stopper := KMD_EINFAHREN;
+				gMerker_RFID_Tisch_1_gelesen := FALSE;
+				gMerker_Tisch_1_lesen_fertig := FALSE;
+				Tisch_1 := 70;
+		ELSIF gTisch_1.Inputs.Start = TRUE AND gTisch_1.Inputs.Vor_VorStopper = TRUE AND gTisch_1.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_1_aus = FALSE THEN
+				gTisch_1.Cmd.Vorstopper := KMD_EINFAHREN;
+				Tisch_1 := 110;
+		ELSIF gTaster_Tisch_1_aus = FALSE AND gTisch_1.Inputs.Stopper_eingefahren = TRUE AND gTisch_1.Inputs.Vorstopper_eingefahren = TRUE THEN
+				gTisch_1.Cmd.Stopper := KMD_AUSFAHREN;
+				gTisch_1.Cmd.Vorstopper := KMD_AUSFAHREN;
+				Tisch_1 := 0;
+		END_IF	
+		
+//
+
+		10:
+		IF gTisch_1.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_1 := 20;
+		END_IF
+		
+		20:
+		IF gTisch_1.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_1.Cmd.Stopper := KMD_AUSFAHREN;
+			gTisch_1.Cmd.Vorstopper := KMD_EINFAHREN;
+			Tisch_1 := 30;
+		END_IF
+
+		30:
+		IF gTisch_1.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_1 := 40;
+		END_IF
+
+		40:
+		IF gTisch_1.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_1.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_1 := 50;
+		END_IF
+
+		50:
+		IF gTisch_1.Inputs.Stausensor = TRUE THEN
+			Tisch_1 := 60;
+		END_IF
+
+		60:
+		IF gTisch_1.Status.Vorstopper = STATUS_AUSGEFAHREN AND gTisch_1.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_1 := 0;
+		END_IF
+
+//      	
+
+		70:
+		IF gTisch_1.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_1 := 80;
+		END_IF
+
+		80:
+		IF gTisch_1.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_1.Cmd.Stopper := KMD_AUSFAHREN;
+			Tisch_1 := 90;
+		END_IF
+
+		90:
+		IF gTisch_1.Inputs.Stausensor = TRUE THEN
+			Tisch_1 := 100;
+		END_IF
+
+		100:
+		IF gTisch_1.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_1 := 0;
+		END_IF
+
+//
+
+		110:
+		IF gTisch_1.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_1 := 120;
+		END_IF
+
+		120:
+		IF gTisch_1.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_1.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_1 := 130;
+		END_IF
+
+		130:
+		IF gTisch_1.Inputs.Vor_Stopper = TRUE AND gTisch_1.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
+			Tisch_1 := 0;
+		END_IF
+
+	END_CASE
+		
+	END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/TischProgramme/Tisch1/Types.typ


+ 0 - 0
Logical/TischProgramme/Tisch1/Variables.var


+ 9 - 0
Logical/TischProgramme/Tisch2/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 127 - 0
Logical/TischProgramme/Tisch2/Main.st

@@ -0,0 +1,127 @@
+
+PROGRAM _INIT
+	
+	Tisch_2 := 0;
+
+END_PROGRAM
+
+PROGRAM _CYCLIC
+	
+		IF (gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Inputs.Stausensor = FALSE AND Tisch_2 = 0) OR (gTisch_2.Inputs.Vor_VorStopper = TRUE AND gTisch_2.Inputs.Vor_Stopper = FALSE AND Tisch_2 = 0) THEN
+			gTisch_2.Outputs.Lampe_Start := TRUE;
+		ELSE
+			gTisch_2.Outputs.Lampe_Start := FALSE;
+		END_IF
+	
+		IF gTaster_Tisch_2_aus = TRUE THEN
+			gTisch_2.Cmd.Stopper := KMD_EINFAHREN;
+			gTisch_2.Cmd.Vorstopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_2_gelesen := TRUE;
+			Tisch_2 := 0;
+		END_IF
+
+	CASE Tisch_2 OF
+
+		0:
+		IF gTisch_2.Inputs.Start = TRUE AND gTisch_2.Inputs.Vor_VorStopper = TRUE AND gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Inputs.Stausensor = FALSE AND gTaster_Tisch_2_aus = FALSE AND gMerker_RFID_Tisch_2_gelesen = TRUE THEN
+			gTisch_2.Cmd.Stopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_2_gelesen := FALSE;
+			Tisch_2 := 10;
+		ELSIF gTisch_2.Inputs.Start = TRUE AND gTisch_2.Inputs.Vor_VorStopper = FALSE AND gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Inputs.Stausensor = FALSE AND gTaster_Tisch_2_aus = FALSE AND gMerker_RFID_Tisch_2_gelesen = TRUE THEN
+				gTisch_2.Cmd.Stopper := KMD_EINFAHREN;
+				gMerker_RFID_Tisch_2_gelesen := FALSE;
+				Tisch_2 := 70;
+		ELSIF gTisch_2.Inputs.Start = TRUE AND gTisch_2.Inputs.Vor_VorStopper = TRUE AND gTisch_2.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_2_aus = FALSE THEN
+				gTisch_2.Cmd.Vorstopper := KMD_EINFAHREN;
+				Tisch_2 := 110;
+		ELSIF gTaster_Tisch_2_aus = FALSE AND gTisch_2.Inputs.Stopper_eingefahren = TRUE AND gTisch_2.Inputs.Vorstopper_eingefahren = TRUE THEN
+				gTisch_2.Cmd.Stopper := KMD_AUSFAHREN;
+				gTisch_2.Cmd.Vorstopper := KMD_AUSFAHREN;
+				Tisch_2 := 0;
+		END_IF	
+		
+//
+
+		10:
+		IF gTisch_2.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_2 := 20;
+		END_IF
+		
+		20:
+		IF gTisch_2.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_2.Cmd.Stopper := KMD_AUSFAHREN;
+			gTisch_2.Cmd.Vorstopper := KMD_EINFAHREN;
+			Tisch_2 := 30;
+		END_IF
+
+		30:
+		IF gTisch_2.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_2 := 40;
+		END_IF
+
+		40:
+		IF gTisch_2.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_2.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_2 := 50;
+		END_IF
+
+		50:
+		IF gTisch_2.Inputs.Stausensor = TRUE THEN
+			Tisch_2 := 60;
+		END_IF
+
+		60:
+		IF gTisch_2.Status.Vorstopper = STATUS_AUSGEFAHREN AND gTisch_2.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_2 := 0;
+		END_IF
+
+//      	
+
+		70:
+		IF gTisch_2.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_2 := 80;
+		END_IF
+
+		80:
+		IF gTisch_2.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_2.Cmd.Stopper := KMD_AUSFAHREN;
+			Tisch_2 := 90;
+		END_IF
+
+		90:
+		IF gTisch_2.Inputs.Stausensor = TRUE THEN
+			Tisch_2 := 100;
+		END_IF
+
+		100:
+		IF gTisch_2.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_2 := 0;
+		END_IF
+
+//
+
+		110:
+		IF gTisch_2.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_2 := 120;
+		END_IF
+
+		120:
+		IF gTisch_2.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_2.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_2 := 130;
+		END_IF
+
+		130:
+		IF gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
+			Tisch_2 := 0;
+		END_IF
+
+	END_CASE	
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/TischProgramme/Tisch2/Types.typ


+ 0 - 0
Logical/TischProgramme/Tisch2/Variables.var


+ 9 - 0
Logical/TischProgramme/Tisch3/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 128 - 0
Logical/TischProgramme/Tisch3/Main.st

@@ -0,0 +1,128 @@
+
+PROGRAM _INIT
+	
+	Tisch_3 := 0;
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+	
+		IF (gTisch_3.Inputs.Vor_Stopper = TRUE AND gTisch_3.Inputs.Stausensor = FALSE AND Tisch_3 = 0) OR (gTisch_3.Inputs.Vor_VorStopper = TRUE AND gTisch_3.Inputs.Vor_Stopper = FALSE AND Tisch_3 = 0) THEN
+			gTisch_3.Outputs.Lampe_Start := TRUE;
+		ELSE
+			gTisch_3.Outputs.Lampe_Start := FALSE;
+		END_IF	
+
+		IF gTaster_Tisch_3_aus = TRUE THEN
+			gTisch_3.Cmd.Stopper := KMD_EINFAHREN;
+			gTisch_3.Cmd.Vorstopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_3_gelesen := TRUE;
+			Tisch_3 := 0;
+		END_IF
+	
+	
+	CASE Tisch_3 OF
+
+		0:
+		IF gTisch_3.Inputs.Start = TRUE AND gTisch_3.Inputs.Vor_VorStopper = TRUE AND gTisch_3.Inputs.Vor_Stopper = TRUE AND gTisch_3.Inputs.Stausensor = FALSE AND gTaster_Tisch_3_aus = FALSE AND gMerker_RFID_Tisch_3_gelesen = TRUE THEN
+			gTisch_3.Cmd.Stopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_3_gelesen := FALSE;
+			Tisch_3 := 10;
+		ELSIF gTisch_3.Inputs.Start = TRUE AND gTisch_3.Inputs.Vor_VorStopper = FALSE AND gTisch_3.Inputs.Vor_Stopper = TRUE AND gTisch_3.Inputs.Stausensor = FALSE AND gTaster_Tisch_3_aus = FALSE AND gMerker_RFID_Tisch_3_gelesen = TRUE THEN
+				gTisch_3.Cmd.Stopper := KMD_EINFAHREN;
+				gMerker_RFID_Tisch_3_gelesen := FALSE;
+				Tisch_3 := 70;
+		ELSIF gTisch_3.Inputs.Start = TRUE AND gTisch_3.Inputs.Vor_VorStopper = TRUE AND gTisch_3.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_3_aus = FALSE THEN
+				gTisch_3.Cmd.Vorstopper := KMD_EINFAHREN;
+				Tisch_3 := 110;
+		ELSIF gTaster_Tisch_3_aus = FALSE AND gTisch_3.Inputs.Stopper_eingefahren = TRUE AND gTisch_3.Inputs.Vorstopper_eingefahren = TRUE THEN
+			gTisch_3.Cmd.Stopper := KMD_AUSFAHREN;
+			gTisch_3.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_3 := 0;
+		END_IF	
+		
+//
+
+		10:
+		IF gTisch_3.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_3 := 20;
+		END_IF
+		
+		20:
+		IF gTisch_3.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_3.Cmd.Stopper := KMD_AUSFAHREN;
+			gTisch_3.Cmd.Vorstopper := KMD_EINFAHREN;
+			Tisch_3 := 30;
+		END_IF
+
+		30:
+		IF gTisch_3.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_3 := 40;
+		END_IF
+
+		40:
+		IF gTisch_3.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_3.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_3 := 50;
+		END_IF
+
+		50:
+		IF gTisch_3.Inputs.Stausensor = TRUE THEN
+			Tisch_3 := 60;
+		END_IF
+
+		60:
+		IF gTisch_3.Status.Vorstopper = STATUS_AUSGEFAHREN AND gTisch_3.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_3 := 0;
+		END_IF
+
+//      	
+
+		70:
+		IF gTisch_3.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_3 := 80;
+		END_IF
+
+		80:
+		IF gTisch_3.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_3.Cmd.Stopper := KMD_AUSFAHREN;
+			Tisch_3 := 90;
+		END_IF
+
+		90:
+		IF gTisch_3.Inputs.Stausensor = TRUE THEN
+			Tisch_3 := 100;
+		END_IF
+
+		100:
+		IF gTisch_3.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_3 := 0;
+		END_IF
+
+//
+
+		110:
+		IF gTisch_3.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_3 := 120;
+		END_IF
+
+		120:
+		IF gTisch_3.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_3.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_3 := 130;
+		END_IF
+
+		130:
+		IF gTisch_3.Inputs.Vor_Stopper = TRUE AND gTisch_3.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
+			Tisch_3 := 0;
+		END_IF
+
+	END_CASE	
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/TischProgramme/Tisch3/Types.typ


+ 0 - 0
Logical/TischProgramme/Tisch3/Variables.var


+ 9 - 0
Logical/TischProgramme/Tisch4/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 131 - 0
Logical/TischProgramme/Tisch4/Main.st

@@ -0,0 +1,131 @@
+
+PROGRAM _INIT
+
+	Tisch_4 := 0;
+	 
+	gTisch_4.Cmd.Stopper := KMD_EINFAHREN;
+	gTisch_4.Cmd.Vorstopper := KMD_EINFAHREN;
+
+
+END_PROGRAM
+
+PROGRAM _CYCLIC
+
+//		IF (gTisch_4.Inputs.Vor_Stopper = TRUE AND gTisch_4.Inputs.Stausensor = FALSE AND Tisch_4 = 0) OR (gTisch_4.Inputs.Vor_VorStopper = TRUE AND gTisch_4.Inputs.Vor_Stopper = FALSE AND Tisch_4 = 0) THEN
+//			gTisch_4.Outputs.Lampe_Start := TRUE;
+//		ELSE
+//			gTisch_4.Outputs.Lampe_Start := FALSE;
+//		END_IF
+//	
+//		IF gTaster_Tisch_4_aus = TRUE THEN
+//			gTisch_4.Cmd.Stopper := KMD_EINFAHREN;
+//			gTisch_4.Cmd.Vorstopper := KMD_EINFAHREN;
+//			gMerker_RFID_Tisch_4_gelesen := TRUE;
+//			Tisch_4 := 0;
+//		END_IF
+//	
+//	CASE Tisch_4 OF
+//
+//		0:
+//		IF gTisch_4.Inputs.Start = TRUE AND gTisch_4.Inputs.Vor_VorStopper = TRUE AND gTisch_4.Inputs.Vor_Stopper = TRUE AND gTisch_4.Inputs.Stausensor = FALSE AND gTaster_Tisch_4_aus = FALSE AND gMerker_RFID_Tisch_4_gelesen = TRUE THEN
+//			gTisch_4.Cmd.Stopper := KMD_EINFAHREN;
+//			gMerker_RFID_Tisch_4_gelesen := FALSE;	
+//			Tisch_4 := 10;
+//		ELSIF gTisch_4.Inputs.Start = TRUE AND gTisch_4.Inputs.Vor_VorStopper = FALSE AND gTisch_4.Inputs.Vor_Stopper = TRUE AND gTisch_4.Inputs.Stausensor = FALSE AND gTaster_Tisch_4_aus = FALSE AND gMerker_RFID_Tisch_4_gelesen = TRUE THEN
+//				gTisch_4.Cmd.Stopper := KMD_EINFAHREN;
+//				gMerker_RFID_Tisch_4_gelesen := FALSE;
+//				Tisch_4 := 70;
+//		ELSIF gTisch_4.Inputs.Start = TRUE AND gTisch_4.Inputs.Vor_VorStopper = TRUE AND gTisch_4.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_4_aus = FALSE THEN
+//				gTisch_4.Cmd.Vorstopper := KMD_EINFAHREN;
+//				Tisch_4 := 110;
+//		ELSIF gTaster_Tisch_4_aus = FALSE AND gTisch_4.Inputs.Stopper_eingefahren = TRUE AND gTisch_4.Inputs.Vorstopper_eingefahren = TRUE THEN
+//				gTisch_4.Cmd.Stopper := KMD_AUSFAHREN;
+//				gTisch_4.Cmd.Vorstopper := KMD_AUSFAHREN;
+//				Tisch_4 := 0;
+//		END_IF	
+//		
+////
+//
+//		10:
+//		IF gTisch_4.Inputs.Nach_Stopper = TRUE THEN
+//			Tisch_4 := 20;
+//		END_IF
+//		
+//		20:
+//		IF gTisch_4.Inputs.Nach_Stopper = FALSE THEN
+//			gTisch_4.Cmd.Stopper := KMD_AUSFAHREN;
+//			gTisch_4.Cmd.Vorstopper := KMD_EINFAHREN;
+//			Tisch_4 := 30;
+//		END_IF
+//
+//		30:
+//		IF gTisch_4.Inputs.Nach_Vorstopper = TRUE THEN
+//			Tisch_4 := 40;
+//		END_IF
+//
+//		40:
+//		IF gTisch_4.Inputs.Nach_Vorstopper = FALSE THEN
+//			gTisch_4.Cmd.Vorstopper := KMD_AUSFAHREN;
+//			Tisch_4 := 50;
+//		END_IF
+//
+//		50:
+//		IF gTisch_4.Inputs.Stausensor = TRUE THEN
+//			Tisch_4 := 60;
+//		END_IF
+//
+//		60:
+//		IF gTisch_4.Status.Vorstopper = STATUS_AUSGEFAHREN AND gTisch_4.Status.Stopper = STATUS_AUSGEFAHREN THEN
+//			Tisch_4 := 0;
+//		END_IF
+//
+////      	
+//
+//		70:
+//		IF gTisch_4.Inputs.Nach_Stopper = TRUE THEN
+//			Tisch_4 := 80;
+//		END_IF
+//
+//		80:
+//		IF gTisch_4.Inputs.Nach_Stopper = FALSE THEN
+//			gTisch_4.Cmd.Stopper := KMD_AUSFAHREN;
+//			Tisch_4 := 90;
+//		END_IF
+//
+//		90:
+//		IF gTisch_4.Inputs.Stausensor = TRUE THEN
+//			Tisch_4 := 100;
+//		END_IF
+//
+//		100:
+//		IF gTisch_4.Status.Stopper = STATUS_AUSGEFAHREN THEN
+//			Tisch_4 := 0;
+//		END_IF
+//
+////
+//
+//		110:
+//		IF gTisch_4.Inputs.Nach_Vorstopper = TRUE THEN
+//			Tisch_4 := 120;
+//		END_IF
+//
+//		120:
+//		IF gTisch_4.Inputs.Nach_Vorstopper = FALSE THEN
+//			gTisch_4.Cmd.Vorstopper := KMD_AUSFAHREN;
+//			Tisch_4 := 130;
+//		END_IF
+//
+//		130:
+//		IF gTisch_4.Inputs.Vor_Stopper = TRUE AND gTisch_4.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
+//			Tisch_4 := 0;
+//		END_IF
+//
+//	END_CASE	
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/TischProgramme/Tisch4/Types.typ


+ 0 - 0
Logical/TischProgramme/Tisch4/Variables.var


+ 9 - 0
Logical/TischProgramme/Tisch5/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 127 - 0
Logical/TischProgramme/Tisch5/Main.st

@@ -0,0 +1,127 @@
+
+PROGRAM _INIT
+
+	Tisch_5 := 0;
+
+END_PROGRAM
+
+PROGRAM _CYCLIC
+
+		IF (gTisch_5.Inputs.Vor_Stopper = TRUE AND gTisch_5.Inputs.Stausensor = FALSE AND Tisch_5 = 0) OR (gTisch_5.Inputs.Vor_VorStopper = TRUE AND gTisch_5.Inputs.Vor_Stopper = FALSE AND Tisch_5 = 0) THEN
+			gTisch_5.Outputs.Lampe_Start := TRUE;
+		ELSE
+			gTisch_5.Outputs.Lampe_Start := FALSE;
+		END_IF	
+	
+		IF gTaster_Tisch_5_aus = TRUE THEN
+			gTisch_5.Cmd.Stopper := KMD_EINFAHREN;
+			gTisch_5.Cmd.Vorstopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_5_gelesen := TRUE;
+			Tisch_5 := 0;
+		END_IF
+	
+	CASE Tisch_5 OF
+
+		0:
+		IF gTisch_5.Inputs.Start = TRUE AND gTisch_5.Inputs.Vor_VorStopper = TRUE AND gTisch_5.Inputs.Vor_Stopper = TRUE AND gTisch_5.Inputs.Stausensor = FALSE AND gTaster_Tisch_5_aus = FALSE AND gMerker_RFID_Tisch_5_gelesen = TRUE THEN
+			gTisch_5.Cmd.Stopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_5_gelesen := FALSE;
+			Tisch_5 := 10;
+		ELSIF gTisch_5.Inputs.Start = TRUE AND gTisch_5.Inputs.Vor_VorStopper = FALSE AND gTisch_5.Inputs.Vor_Stopper = TRUE AND gTisch_5.Inputs.Stausensor = FALSE AND gTaster_Tisch_5_aus = FALSE AND gMerker_RFID_Tisch_5_gelesen = TRUE THEN
+				gTisch_5.Cmd.Stopper := KMD_EINFAHREN;
+				gMerker_RFID_Tisch_5_gelesen := FALSE;
+				Tisch_5 := 70;
+		ELSIF gTisch_5.Inputs.Start = TRUE AND gTisch_5.Inputs.Vor_VorStopper = TRUE AND gTisch_5.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_5_aus = FALSE THEN
+				gTisch_5.Cmd.Vorstopper := KMD_EINFAHREN;
+				Tisch_5 := 110;
+		ELSIF gTaster_Tisch_5_aus = FALSE AND gTisch_5.Inputs.Stopper_eingefahren = TRUE AND gTisch_5.Inputs.Vorstopper_eingefahren = TRUE THEN
+				gTisch_5.Cmd.Stopper := KMD_AUSFAHREN;
+				gTisch_5.Cmd.Vorstopper := KMD_AUSFAHREN;
+				Tisch_5 := 0;
+		END_IF	
+		
+//
+
+		10:
+		IF gTisch_5.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_5 := 20;
+		END_IF
+		
+		20:
+		IF gTisch_5.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_5.Cmd.Stopper := KMD_AUSFAHREN;
+			gTisch_5.Cmd.Vorstopper := KMD_EINFAHREN;
+			Tisch_5 := 30;
+		END_IF
+
+		30:
+		IF gTisch_5.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_5 := 40;
+		END_IF
+
+		40:
+		IF gTisch_5.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_5.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_5 := 50;
+		END_IF
+
+		50:
+		IF gTisch_5.Inputs.Stausensor = TRUE THEN
+			Tisch_5 := 60;
+		END_IF
+
+		60:
+		IF gTisch_5.Status.Vorstopper = STATUS_AUSGEFAHREN AND gTisch_5.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_5 := 0;
+		END_IF
+
+//      	
+
+		70:
+		IF gTisch_5.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_5 := 80;
+		END_IF
+
+		80:
+		IF gTisch_5.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_5.Cmd.Stopper := KMD_AUSFAHREN;
+			Tisch_5 := 90;
+		END_IF
+
+		90:
+		IF gTisch_5.Inputs.Stausensor = TRUE THEN
+			Tisch_5 := 100;
+		END_IF
+
+		100:
+		IF gTisch_5.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_5 := 0;
+		END_IF
+
+//
+
+		110:
+		IF gTisch_5.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_5 := 120;
+		END_IF
+
+		120:
+		IF gTisch_5.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_5.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_5 := 130;
+		END_IF
+
+		130:
+		IF gTisch_5.Inputs.Vor_Stopper = TRUE AND gTisch_5.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
+			Tisch_5 := 0;
+		END_IF
+
+	END_CASE	
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/TischProgramme/Tisch5/Types.typ


+ 0 - 0
Logical/TischProgramme/Tisch5/Variables.var


+ 9 - 0
Logical/TischProgramme/Tisch6/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 363 - 0
Logical/TischProgramme/Tisch6/Main.st

@@ -0,0 +1,363 @@
+
+PROGRAM _INIT
+
+	Tisch_6 := 0;
+	Tisch_6_Manuell := 0;
+	
+	gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
+	gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN;
+	gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
+	
+	RTInfo_0(enable:=1);
+
+END_PROGRAM
+
+PROGRAM _CYCLIC
+
+	gTisch_6;
+	
+	IF gMerker_Laser_Manuell = TRUE THEN
+		gDO_Start_Laser := FALSE;
+		gDO_Laser_Seitentuer_oeffnen := FALSE;
+	END_IF
+	
+	IF gMerker_Laser_Automatik = TRUE THEN
+		gDO_Laser_Seitentuer_oeffnen := FALSE;
+	END_IF
+	
+	IF gVK_Freigabe_manuell = TRUE AND gVK_Stopper_Tisch_6 = TRUE THEN
+		gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
+	ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Stopper_Tisch_6 = FALSE THEN
+			gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
+	END_IF	
+	
+	IF gVK_Freigabe_manuell = TRUE AND gVK_Vorstopper_Tisch_6 = TRUE THEN
+		gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
+	ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Vorstopper_Tisch_6 = FALSE THEN
+		gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN;
+	END_IF
+	
+	IF gVK_Freigabe_manuell = TRUE AND gVK_Aushebeeinheit_Tisch_6 = TRUE THEN
+		gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
+	ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Aushebeeinheit_Tisch_6 = FALSE THEN
+		gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
+	END_IF
+	
+	IF gVK_Freigabe_manuell = TRUE AND gVK_doppelt_Lasern = TRUE THEN
+		gDO_doppelt_lasern := TRUE;
+	ELSIF gVK_Freigabe_manuell = TRUE AND gVK_doppelt_Lasern = FALSE THEN
+		gDO_doppelt_lasern := FALSE;
+	END_IF	
+	
+	IF gVK_Freigabe_manuell = TRUE AND gVK_Start_Laser = TRUE THEN
+		gDO_Start_Laser := TRUE;
+	ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Start_Laser = FALSE THEN
+		gDO_Start_Laser := FALSE;
+	END_IF	
+	
+		IF gTaster_Tisch_6_aus = TRUE THEN
+			gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
+			gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN;
+			gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_6_gelesen := TRUE;		
+			Tisch_6_Automatik := 0;
+			Tisch_6 := 0;
+			Tisch_6_Manuell := 0;
+		END_IF
+	
+	IF gDI_Laser_Automatik = TRUE AND gDI_Laser_Manuell = FALSE THEN
+		gMerker_Laser_Automatik := TRUE;
+		gMerker_Laser_Halbautomatik := FALSE;
+		gMerker_Laser_Manuell := FALSE;
+	END_IF
+	
+	IF gDI_Laser_Manuell = TRUE AND gDI_Laser_Automatik = FALSE THEN
+		gMerker_Laser_Automatik := FALSE;
+		gMerker_Laser_Halbautomatik := FALSE;
+		gMerker_Laser_Manuell := TRUE;
+	END_IF
+	
+	IF gDI_Laser_Manuell = FALSE AND gDI_Laser_Automatik = FALSE THEN
+		gMerker_Laser_Automatik := FALSE;
+		gMerker_Laser_Halbautomatik := TRUE;
+		gMerker_Laser_Manuell := FALSE;
+	END_IF
+	
+	
+	
+	CASE Tisch_6_Manuell OF
+		
+		0:
+		IF gMerker_Laser_Manuell = TRUE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = FALSE AND gTisch_6.Inputs.Vor_Stopper = TRUE AND Tisch_6 = 0 THEN	
+			gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
+			gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
+			gDO_Laser_Absaugung := TRUE;
+			Tisch_6_Manuell := 10;
+		ELSIF gMerker_Laser_Manuell = TRUE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = FALSE AND gTisch_6.Inputs.Vor_Stopper = FALSE AND Tisch_6 = 0 THEN
+				gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
+				gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
+				gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
+				gDO_Laser_Absaugung := TRUE;
+				Tisch_6_Manuell := 20;
+		END_IF
+			
+		10:
+		IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN
+			gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
+			gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
+			gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_6_Manuell := 20;
+		END_IF
+		
+		20:
+		IF gMerker_Laser_Manuell = FALSE THEN	
+			gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
+			gDO_Laser_Absaugung := FALSE;
+			Tisch_6_Manuell := 30;
+		END_IF
+		
+		30: lWarten_Aushebeeinheit_Tisch_6 := lWarten_Aushebeeinheit_Tisch_6 + (RTInfo_0.cycle_time/1000);
+		IF gTisch_6.Inputs.Vor_Stopper = TRUE AND lWarten_Aushebeeinheit_Tisch_6 >= 500 THEN
+			gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
+			lWarten_Aushebeeinheit_Tisch_6 := 0;	
+			Tisch_6_Manuell := 40;
+		ELSIF gTisch_6.Inputs.Vor_Stopper = FALSE AND lWarten_Aushebeeinheit_Tisch_6 >= 500 THEN
+				lWarten_Aushebeeinheit_Tisch_6 := 0;	
+				Tisch_6_Manuell := 0;
+		END_IF
+		
+		40:
+		IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN
+			gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
+			Tisch_6_Manuell := 0;
+		END_IF
+				
+	END_CASE
+	
+	CASE Tisch_6 OF
+
+		0:
+		IF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = TRUE AND gMerker_Laser_Automatik = FALSE AND Tisch_6_Manuell = 0 AND gTisch_6.Inputs.Vor_VorStopper = TRUE AND gTisch_6.Inputs.Vor_Stopper = TRUE AND gTisch_6.Inputs.Stausensor = FALSE AND gTaster_Tisch_6_aus = FALSE AND gMerker_RFID_Tisch_6_gelesen = TRUE THEN
+			gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
+			gMerker_RFID_Tisch_6_gelesen := FALSE;
+			Tisch_6 := 10;
+		ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = TRUE AND gMerker_Laser_Automatik = FALSE AND Tisch_6_Manuell = 0 AND gTisch_6.Inputs.Vor_VorStopper = FALSE AND gTisch_6.Inputs.Vor_Stopper = TRUE AND gTisch_6.Inputs.Stausensor = FALSE AND gTaster_Tisch_6_aus = FALSE AND gMerker_RFID_Tisch_6_gelesen = TRUE THEN
+				gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
+				gMerker_RFID_Tisch_6_gelesen := FALSE;
+				Tisch_6 := 10;
+		ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = TRUE AND gMerker_Laser_Automatik = FALSE AND Tisch_6_Manuell = 0 AND gTisch_6.Inputs.Vor_VorStopper = TRUE AND gTisch_6.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_6_aus = FALSE THEN
+				gDO_Laser_Seitentuer_oeffnen := TRUE;
+				gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN;
+				Tisch_6 := 200; /// war 110
+		ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = TRUE AND gMerker_Laser_Automatik = FALSE AND Tisch_6_Manuell = 0 AND gTaster_Tisch_6_aus = FALSE AND (gTisch_6.Inputs.Stopper_eingefahren = TRUE OR gTisch_6.Inputs.Vorstopper_eingefahren = TRUE) THEN
+				gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
+				gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
+				Tisch_6 := 0;
+		END_IF		
+		
+//
+
+		10:
+			IF (*gTisch_6.Status.Aushebeeinheit = STATUS_AUSGEFAHREN*) gTisch_6.Outputs.Aushebeeinheit_ausfahren = TRUE AND gTisch_6.Outputs.Aushebeeinheit_einfahren = FALSE THEN
+				gDO_Start_Laser := TRUE;
+				gDO_Laser_Absaugung := TRUE;
+				gDO_Laser_Seitentuer_oeffnen := TRUE;
+			Tisch_6 := 20;
+		END_IF
+		
+		20:
+			IF gTisch_6.Inputs.Start = TRUE THEN
+				gDO_Start_Laser := FALSE;
+				gDO_Laser_Absaugung := FALSE;
+				gDO_Laser_Seitentuer_oeffnen := FALSE;
+			gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
+			Tisch_6 := 30;
+		END_IF
+
+		30:
+		IF (*gTisch_6.Status.Aushebeeinheit = STATUS_EINGEFAHREN*) gTisch_6.Outputs.Aushebeeinheit_einfahren = TRUE AND gTisch_6.Outputs.Aushebeeinheit_ausfahren = FALSE THEN
+			gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
+			Tisch_6 := 40;
+		END_IF
+
+		40:
+		IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN	
+			Tisch_6 := 45;
+		END_IF	
+		
+		45:	
+		IF gTisch_6.Inputs.Nach_Stopper = FALSE THEN	
+			gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
+			Tisch_6 := 50;	
+		END_IF
+
+		50:
+		IF gTisch_6.Inputs.Stausensor = TRUE THEN
+			Tisch_6 := 60;
+		END_IF
+
+		60:
+		IF gTisch_6.Inputs.Stausensor = FALSE THEN
+			Tisch_6 := 0;
+		END_IF
+
+	//
+
+		110:
+			IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN
+				Tisch_6 := 120;
+			END_IF
+
+		120:
+			IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN
+				gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
+				Tisch_6 := 130;
+			END_IF
+
+		130:
+			IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
+				(*gDO_Laser_Seitentuer_oeffnen := FALSE;*)
+				Tisch_6 := 0;
+			END_IF
+		
+		200:
+			IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN
+				Tisch_6 := 210;
+			END_IF
+
+		210:
+			IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN
+				gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
+				Tisch_6 := 220;
+			END_IF
+
+		220:
+			IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
+				Tisch_6 := 230;
+			END_IF
+		
+		230: IF gTisch_6.Inputs.Vor_Stopper = TRUE THEN
+				Tisch_6 := 0;
+			END_IF
+
+	END_CASE
+	
+	CASE Tisch_6_Automatik OF
+
+		0:
+			IF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = TRUE AND gTisch_6.Inputs.Vor_VorStopper = TRUE AND gTisch_6.Inputs.Vor_Stopper = TRUE AND gTisch_6.Inputs.Stausensor = FALSE AND gTaster_Tisch_6_aus = FALSE AND gMerker_RFID_Tisch_6_gelesen = TRUE THEN
+				gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
+				gMerker_RFID_Tisch_6_gelesen := FALSE;
+				Tisch_6_Automatik := 10;
+			ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = TRUE AND gTisch_6.Inputs.Vor_VorStopper = FALSE AND gTisch_6.Inputs.Vor_Stopper = TRUE AND gTisch_6.Inputs.Stausensor = FALSE AND gTaster_Tisch_6_aus = FALSE AND gMerker_RFID_Tisch_6_gelesen = TRUE THEN
+				gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
+				gMerker_RFID_Tisch_6_gelesen := FALSE;
+				Tisch_6_Automatik := 10;
+			ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = TRUE AND gTisch_6.Inputs.Vor_VorStopper = TRUE AND gTisch_6.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_6_aus = FALSE THEN
+				gDO_Laser_Seitentuer_oeffnen := TRUE;
+				gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN;
+				Tisch_6_Automatik := 200; // war 110
+			ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = TRUE AND gTaster_Tisch_6_aus = FALSE AND (gTisch_6.Inputs.Stopper_eingefahren = TRUE OR gTisch_6.Inputs.Vorstopper_eingefahren = TRUE) THEN
+				gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
+				gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
+				Tisch_6_Automatik := 0;
+			END_IF		
+		
+			//
+
+		10:
+			IF (*gTisch_6.Status.Aushebeeinheit = STATUS_AUSGEFAHREN*) gTisch_6.Outputs.Aushebeeinheit_ausfahren = TRUE AND gTisch_6.Outputs.Aushebeeinheit_einfahren = FALSE THEN
+				gDO_Start_Laser := TRUE;
+				Tisch_6_Automatik := 15;
+			END_IF
+		
+		15: lWarten_Laser_Startsignal := lWarten_Laser_Startsignal + (RTInfo_0.cycle_time/1000);
+			IF lWarten_Laser_Startsignal >= 500 THEN
+				gDO_Start_Laser := FALSE;
+				Tisch_6_Automatik := 20;
+			END_IF
+			
+		20:
+			IF gDI_Laser_fertig = TRUE THEN
+				gDO_Start_Laser := FALSE;
+				gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
+				gMerker_RFID_Value_Tisch_6 := 0;
+				gMerker_block_RFID_read_Tisch_6 := TRUE;
+				Tisch_6_Automatik := 30;
+			END_IF
+
+		30:
+			IF (*gTisch_6.Status.Aushebeeinheit = STATUS_EINGEFAHREN*) gTisch_6.Outputs.Aushebeeinheit_einfahren = TRUE AND gTisch_6.Outputs.Aushebeeinheit_ausfahren = FALSE THEN
+				gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
+				Tisch_6_Automatik := 40;
+			END_IF
+
+		40:
+			IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN	
+				Tisch_6_Automatik := 45;
+			END_IF	
+		
+		45:	
+			IF gTisch_6.Inputs.Nach_Stopper = FALSE THEN	
+				gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
+				gMerker_block_RFID_read_Tisch_6 := FALSE;
+				Tisch_6_Automatik := 50;	
+			END_IF
+
+		50:
+			IF gTisch_6.Inputs.Stausensor = TRUE THEN
+				Tisch_6_Automatik := 60;
+			END_IF
+
+		60:
+			IF gTisch_6.Inputs.Stausensor = FALSE THEN
+				Tisch_6_Automatik := 0;
+			END_IF
+
+			//
+
+		110:
+			IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN
+				Tisch_6_Automatik := 120;
+			END_IF
+
+		120:
+			IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN
+				gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
+				Tisch_6_Automatik := 130;
+			END_IF
+
+		130:
+			IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
+				Tisch_6_Automatik := 0;
+			END_IF
+		
+		200:
+			IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN
+				Tisch_6_Automatik := 210;
+			END_IF
+
+		210:
+			IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN
+				gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
+				Tisch_6_Automatik := 220;
+			END_IF
+
+		220:
+			IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
+				Tisch_6_Automatik := 230;
+			END_IF
+		
+		230: IF gTisch_6.Inputs.Vor_Stopper = TRUE THEN
+				Tisch_6_Automatik := 0;
+			 END_IF
+		
+	END_CASE
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/TischProgramme/Tisch6/Types.typ


+ 5 - 0
Logical/TischProgramme/Tisch6/Variables.var

@@ -0,0 +1,5 @@
+VAR
+	lWarten_Aushebeeinheit_Tisch_6 : UDINT;
+	RTInfo_0 : RTInfo;
+	lWarten_Laser_Startsignal : UDINT;
+END_VAR

+ 9 - 0
Logical/TischProgramme/Tisch7/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 149 - 0
Logical/TischProgramme/Tisch7/Main.st

@@ -0,0 +1,149 @@
+
+PROGRAM _INIT
+
+	Tisch_7 := 0;
+
+	RTInfo_0(enable:=1);
+	
+END_PROGRAM
+
+PROGRAM _CYCLIC
+
+		IF (gTisch_7.Inputs.Vor_Stopper = TRUE AND gTisch_7.Inputs.Stausensor = FALSE AND Tisch_7 = 0) OR (gTisch_7.Inputs.Vor_VorStopper = TRUE AND gTisch_7.Inputs.Vor_Stopper = FALSE AND Tisch_7 = 0) THEN
+			gTisch_7.Outputs.Lampe_Start := TRUE;
+		ELSE
+			gTisch_7.Outputs.Lampe_Start := FALSE;
+		END_IF
+
+		IF gTaster_Tisch_7_aus = TRUE THEN
+			gTisch_7.Cmd.Stopper := KMD_EINFAHREN;
+			gTisch_7.Cmd.Vorstopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_7_gelesen := TRUE;
+			Tisch_7 := 0;
+		END_IF
+	
+	CASE Tisch_7 OF
+
+		0:
+		IF (*gTisch_7.Inputs.Start = TRUE AND*) gTisch_7.Inputs.Vor_VorStopper = TRUE AND gTisch_7.Inputs.Vor_Stopper = TRUE AND gTisch_7.Inputs.Stausensor = FALSE AND gTaster_Tisch_7_aus = FALSE AND gMerker_RFID_Tisch_7_gelesen = TRUE THEN
+//			gTisch_7.Cmd.Stopper := KMD_EINFAHREN;
+//			gMerker_RFID_Tisch_7_gelesen := FALSE;
+//			Tisch_7 := 10;
+			lWarten_Auto_Start_Tisch_7 := 0;	
+			Tisch_7 := 5;				
+		ELSIF (*gTisch_7.Inputs.Start = TRUE AND*) gTisch_7.Inputs.Vor_VorStopper = FALSE AND gTisch_7.Inputs.Vor_Stopper = TRUE AND gTisch_7.Inputs.Stausensor = FALSE AND gTaster_Tisch_7_aus = FALSE AND gMerker_RFID_Tisch_7_gelesen = TRUE THEN
+//				gTisch_7.Cmd.Stopper := KMD_EINFAHREN;
+//				gMerker_RFID_Tisch_7_gelesen := FALSE;
+//				Tisch_7 := 70;
+				lWarten_Auto_Start_Tisch_7 := 0;
+				Tisch_7 := 65;				
+		ELSIF gTisch_7.Inputs.Vor_VorStopper = TRUE AND gTisch_7.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_7_aus = FALSE THEN
+				gTisch_7.Cmd.Vorstopper := KMD_EINFAHREN;
+				Tisch_7 := 110;
+		ELSIF gTaster_Tisch_7_aus = FALSE AND gTisch_7.Inputs.Stopper_eingefahren = TRUE AND gTisch_7.Inputs.Vorstopper_eingefahren = TRUE THEN
+				gTisch_7.Cmd.Stopper := KMD_AUSFAHREN;
+				gTisch_7.Cmd.Vorstopper := KMD_AUSFAHREN;
+				Tisch_7 := 0;
+		END_IF		
+	
+//			
+			
+		5: lWarten_Auto_Start_Tisch_7 := lWarten_Auto_Start_Tisch_7 + (RTInfo_0.cycle_time/1000);
+		IF lWarten_Auto_Start_Tisch_7 >= 10000 THEN
+			gTisch_7.Cmd.Stopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_7_gelesen := FALSE;
+			lWarten_Auto_Start_Tisch_7 := 0;
+			Tisch_7 := 10;
+		END_IF		
+
+		10:
+		IF gTisch_7.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_7 := 20;
+		END_IF
+		
+		20:
+		IF gTisch_7.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_7.Cmd.Stopper := KMD_AUSFAHREN;
+			gTisch_7.Cmd.Vorstopper := KMD_EINFAHREN;
+			Tisch_7 := 30;
+		END_IF
+
+		30:
+		IF gTisch_7.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_7 := 40;
+		END_IF
+
+		40:
+		IF gTisch_7.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_7.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_7 := 50;
+		END_IF
+
+		50:
+		IF gTisch_7.Inputs.Stausensor = TRUE THEN
+			Tisch_7 := 60;
+		END_IF
+
+		60:
+		IF gTisch_7.Status.Vorstopper = STATUS_AUSGEFAHREN AND gTisch_7.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_7 := 0;
+		END_IF
+
+//			
+			
+		65: lWarten_Auto_Start_Tisch_7 := lWarten_Auto_Start_Tisch_7 + (RTInfo_0.cycle_time/1000);
+		IF lWarten_Auto_Start_Tisch_7 >= 10000 THEN
+			gTisch_7.Cmd.Stopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_7_gelesen := FALSE;
+			lWarten_Auto_Start_Tisch_7 := 0;
+			Tisch_7 := 70;
+		END_IF		
+
+		70:
+		IF gTisch_7.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_7 := 80;
+		END_IF
+
+		80:
+		IF gTisch_7.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_7.Cmd.Stopper := KMD_AUSFAHREN;
+			Tisch_7 := 90;
+		END_IF
+
+		90:
+		IF gTisch_7.Inputs.Stausensor = TRUE THEN
+			Tisch_7 := 100;
+		END_IF
+
+		100:
+		IF gTisch_7.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_7 := 0;
+		END_IF
+
+//
+
+		110:
+		IF gTisch_7.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_7 := 120;
+		END_IF
+
+		120:
+		IF gTisch_7.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_7.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_7 := 130;
+		END_IF
+
+		130:
+		IF gTisch_7.Inputs.Vor_Stopper = TRUE AND gTisch_7.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
+			Tisch_7 := 0;
+		END_IF
+
+	END_CASE	
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/TischProgramme/Tisch7/Types.typ


+ 4 - 0
Logical/TischProgramme/Tisch7/Variables.var

@@ -0,0 +1,4 @@
+VAR
+	RTInfo_0 : RTInfo;
+	lWarten_Auto_Start_Tisch_7 : UDINT;
+END_VAR

+ 9 - 0
Logical/TischProgramme/Tisch8/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 127 - 0
Logical/TischProgramme/Tisch8/Main.st

@@ -0,0 +1,127 @@
+
+PROGRAM _INIT
+	
+	Tisch_8 := 0;
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+
+		IF (gTisch_8.Inputs.Vor_Stopper = TRUE AND gTisch_8.Inputs.Stausensor = FALSE AND Tisch_8 = 0) OR (gTisch_8.Inputs.Vor_VorStopper = TRUE AND gTisch_8.Inputs.Vor_Stopper = FALSE AND Tisch_8 = 0) THEN
+			gTisch_8.Outputs.Lampe_Start := TRUE;
+		ELSE
+			gTisch_8.Outputs.Lampe_Start := FALSE;
+		END_IF	
+	
+		IF gTaster_Tisch_8_aus = TRUE THEN
+			gTisch_8.Cmd.Stopper := KMD_EINFAHREN;
+			gTisch_8.Cmd.Vorstopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_8_gelesen := TRUE;
+			Tisch_8 := 0;
+		END_IF
+	
+	CASE Tisch_8 OF
+
+		0:
+		IF gTisch_8.Inputs.Start = TRUE AND gTisch_8.Inputs.Vor_VorStopper = TRUE AND gTisch_8.Inputs.Vor_Stopper = TRUE AND gTisch_8.Inputs.Stausensor = FALSE AND gTaster_Tisch_8_aus = FALSE AND gMerker_RFID_Tisch_8_gelesen = TRUE THEN
+			gTisch_8.Cmd.Stopper := KMD_EINFAHREN;
+			gMerker_RFID_Tisch_8_gelesen := FALSE;
+			Tisch_8 := 10;
+		ELSIF gTisch_8.Inputs.Start = TRUE AND gTisch_8.Inputs.Vor_VorStopper = FALSE AND gTisch_8.Inputs.Vor_Stopper = TRUE AND gTisch_8.Inputs.Stausensor = FALSE AND gTaster_Tisch_8_aus = FALSE AND gMerker_RFID_Tisch_8_gelesen = TRUE THEN
+				gTisch_8.Cmd.Stopper := KMD_EINFAHREN;
+				gMerker_RFID_Tisch_8_gelesen := FALSE;
+				Tisch_8 := 70;
+		ELSIF gTisch_8.Inputs.Start = TRUE AND gTisch_8.Inputs.Vor_VorStopper = TRUE AND gTisch_8.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_8_aus = FALSE THEN
+				gTisch_8.Cmd.Vorstopper := KMD_EINFAHREN;
+				Tisch_8 := 110;
+		ELSIF gTaster_Tisch_8_aus = FALSE AND gTisch_8.Inputs.Stopper_eingefahren = TRUE AND gTisch_8.Inputs.Vorstopper_eingefahren = TRUE THEN
+				gTisch_8.Cmd.Stopper := KMD_AUSFAHREN;
+				gTisch_8.Cmd.Vorstopper := KMD_AUSFAHREN;
+				Tisch_8 := 0;
+		END_IF		
+		
+//
+
+		10:
+		IF gTisch_8.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_8 := 20;
+		END_IF
+		
+		20:
+		IF gTisch_8.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_8.Cmd.Stopper := KMD_AUSFAHREN;
+			gTisch_8.Cmd.Vorstopper := KMD_EINFAHREN;
+			Tisch_8 := 30;
+		END_IF
+
+		30:
+		IF gTisch_8.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_8 := 40;
+		END_IF
+
+		40:
+		IF gTisch_8.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_8.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_8 := 50;
+		END_IF
+
+		50:
+		IF gTisch_8.Inputs.Stausensor = TRUE THEN
+			Tisch_8 := 60;
+		END_IF
+
+		60:
+		IF gTisch_8.Status.Vorstopper = STATUS_AUSGEFAHREN AND gTisch_8.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_8 := 0;
+		END_IF
+
+//      	
+
+		70:
+		IF gTisch_8.Inputs.Nach_Stopper = TRUE THEN
+			Tisch_8 := 80;
+		END_IF
+
+		80:
+		IF gTisch_8.Inputs.Nach_Stopper = FALSE THEN
+			gTisch_8.Cmd.Stopper := KMD_AUSFAHREN;
+			Tisch_8 := 90;
+		END_IF
+
+		90:
+		IF gTisch_8.Inputs.Stausensor = TRUE THEN
+			Tisch_8 := 100;
+		END_IF
+
+		100:
+		IF gTisch_8.Status.Stopper = STATUS_AUSGEFAHREN THEN
+			Tisch_8 := 0;
+		END_IF
+
+//
+
+		110:
+		IF gTisch_8.Inputs.Nach_Vorstopper = TRUE THEN
+			Tisch_8 := 120;
+		END_IF
+
+		120:
+		IF gTisch_8.Inputs.Nach_Vorstopper = FALSE THEN
+			gTisch_8.Cmd.Vorstopper := KMD_AUSFAHREN;
+			Tisch_8 := 130;
+		END_IF
+
+		130:
+		IF gTisch_8.Inputs.Vor_Stopper = TRUE AND gTisch_8.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
+			Tisch_8 := 0;
+		END_IF
+
+	END_CASE	
+
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/TischProgramme/Tisch8/Types.typ


+ 0 - 0
Logical/TischProgramme/Tisch8/Variables.var


+ 18 - 0
Logical/Zylinder/Package.pkg

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Package xmlns="http://br-automation.co.at/AS/Package">
+  <Objects>
+    <Object Type="Program" Language="IEC">Zylinder_Tisch1</Object>
+    <Object Type="Program" Language="IEC">Zylinder_Tisch2</Object>
+    <Object Type="Program" Language="IEC">Zylinder_Tisch3</Object>
+    <Object Type="Program" Language="IEC">Zylinder_Tisch4</Object>
+    <Object Type="Program" Language="IEC">Zylinder_Tisch5</Object>
+    <Object Type="Program" Language="IEC">Zylinder_Tisch6</Object>
+    <Object Type="Program" Language="IEC">Zylinder_Tisch7</Object>
+    <Object Type="Program" Language="IEC">Zylinder_Tisch8</Object>
+    <Object Type="Program" Language="IEC">Zylinder_Kurve1</Object>
+    <Object Type="Program" Language="IEC">Zylinder_Kurve2</Object>
+    <Object Type="Program" Language="IEC">Zylinder_Kurve3</Object>
+    <Object Type="Program" Language="IEC">Zylinder_Kurve4</Object>
+  </Objects>
+</Package>

+ 9 - 0
Logical/Zylinder/Zylinder_Kurve1/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 74 - 0
Logical/Zylinder/Zylinder_Kurve1/Main.st

@@ -0,0 +1,74 @@
+
+PROGRAM _INIT
+
+	RTInfo_0(enable:=1);
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+	
+(* #############################################################################################################
+   #############################         	     Kurve 1	               #####################################
+   ############################################################################################################# *)
+
+	IF  gKurve_1.Cmd.Stopper = KMD_AUSFAHREN THEN
+		gKurve_1.Outputs.Stopper_einfahren := FALSE;
+		gKurve_1.Times.Stopper_AusZeit := TRUE;
+		gKurve_1.Times.Stopper_EinZeit := FALSE;
+		gKurve_1.Cmd.Stopper := KMD_FERTIG;
+		gKurve_1.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	IF  gKurve_1.Cmd.Stopper = KMD_EINFAHREN THEN
+		gKurve_1.Outputs.Stopper_einfahren := TRUE;
+		gKurve_1.Times.Stopper_AusZeit := FALSE;
+		gKurve_1.Times.Stopper_EinZeit := TRUE;
+		gKurve_1.Cmd.Stopper := KMD_FERTIG;
+		gKurve_1.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	(* Status, Zylinderposition ausgeben *)
+	IF (gKurve_1.Inputs.Stopper_eingefahren = TRUE) AND (gKurve_1.Inputs.Stopper_ausgefahren = FALSE) THEN
+		gKurve_1.Status.Stopper := STATUS_EINGEFAHREN;
+	ELSIF (gKurve_1.Inputs.Stopper_eingefahren = FALSE) AND (gKurve_1.Inputs.Stopper_ausgefahren = TRUE) THEN
+		gKurve_1.Status.Stopper := STATUS_AUSGEFAHREN;
+	ELSE
+		gKurve_1.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	(* Zeitüberwachung Eingefahren*)
+	IF (gKurve_1.Times.Stopper_EinZeit = TRUE AND gKurve_1.Status.Stopper <> STATUS_EINGEFAHREN) OR (gKurve_1.Times.Stopper_AusZeit = TRUE AND gKurve_1.Status.Stopper <> STATUS_AUSGEFAHREN) THEN
+		gKurve_1.Times.Stopper_ZeitRun := gKurve_1.Times.Stopper_ZeitRun + (RTInfo_0.cycle_time/1000);
+
+		IF (gKurve_1.Times.Stopper_EinZeit = TRUE AND gKurve_1.Status.Stopper = STATUS_EINGEFAHREN)
+			OR (gKurve_1.Times.Stopper_AusZeit = TRUE AND gKurve_1.Status.Stopper = STATUS_AUSGEFAHREN)THEN
+		(* lPortal_Mittelanschlag_EinZeit := FALSE;
+		 lPortal_Mittelanschlag_AusZeit := FALSE; *)
+			gKurve_1.Times.Stopper_ZeitRun := 0;
+		END_IF
+
+
+		IF gKurve_1.Times.Stopper_ZeitRun >= 5000 THEN
+			gKurve_1.Status.Stopper := STATUS_ERROR;
+
+			IF gKurve_1.Times.Stopper_EinZeit = TRUE THEN
+				gError[0] := 1;
+			END_IF
+         
+			IF gKurve_1.Times.Stopper_AusZeit = TRUE THEN
+				gError[1] := 1;
+			END_IF
+
+		END_IF
+
+	ELSE
+		gKurve_1.Times.Stopper_ZeitRun := 0;
+	END_IF
+	
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/Zylinder/Zylinder_Kurve1/Types.typ


+ 3 - 0
Logical/Zylinder/Zylinder_Kurve1/Variables.var

@@ -0,0 +1,3 @@
+VAR
+	RTInfo_0 : RTInfo;
+END_VAR

+ 9 - 0
Logical/Zylinder/Zylinder_Kurve2/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 74 - 0
Logical/Zylinder/Zylinder_Kurve2/Main.st

@@ -0,0 +1,74 @@
+
+PROGRAM _INIT
+
+	RTInfo_0(enable:=1);
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+	
+(* #############################################################################################################
+   #############################         	     Kurve 2	               #####################################
+   ############################################################################################################# *)
+
+	IF  gKurve_2.Cmd.Stopper = KMD_AUSFAHREN THEN
+		gKurve_2.Outputs.Stopper_einfahren := FALSE;
+		gKurve_2.Times.Stopper_AusZeit := TRUE;
+		gKurve_2.Times.Stopper_EinZeit := FALSE;
+		gKurve_2.Cmd.Stopper := KMD_FERTIG;
+		gKurve_2.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	IF  gKurve_2.Cmd.Stopper = KMD_EINFAHREN THEN
+		gKurve_2.Outputs.Stopper_einfahren := TRUE;
+		gKurve_2.Times.Stopper_AusZeit := FALSE;
+		gKurve_2.Times.Stopper_EinZeit := TRUE;
+		gKurve_2.Cmd.Stopper := KMD_FERTIG;
+		gKurve_2.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	(* Status, Zylinderposition ausgeben *)
+	IF (gKurve_2.Inputs.Stopper_eingefahren = TRUE) AND (gKurve_2.Inputs.Stopper_ausgefahren = FALSE) THEN
+		gKurve_2.Status.Stopper := STATUS_EINGEFAHREN;
+	ELSIF (gKurve_2.Inputs.Stopper_eingefahren = FALSE) AND (gKurve_2.Inputs.Stopper_ausgefahren = TRUE) THEN
+		gKurve_2.Status.Stopper := STATUS_AUSGEFAHREN;
+	ELSE
+		gKurve_2.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	(* Zeitüberwachung Eingefahren*)
+	IF (gKurve_2.Times.Stopper_EinZeit = TRUE AND gKurve_2.Status.Stopper <> STATUS_EINGEFAHREN) OR (gKurve_2.Times.Stopper_AusZeit = TRUE AND gKurve_2.Status.Stopper <> STATUS_AUSGEFAHREN) THEN
+		gKurve_2.Times.Stopper_ZeitRun := gKurve_2.Times.Stopper_ZeitRun + (RTInfo_0.cycle_time/1000);
+
+		IF (gKurve_2.Times.Stopper_EinZeit = TRUE AND gKurve_2.Status.Stopper = STATUS_EINGEFAHREN)
+			OR (gKurve_2.Times.Stopper_AusZeit = TRUE AND gKurve_2.Status.Stopper = STATUS_AUSGEFAHREN)THEN
+		(* lPortal_Mittelanschlag_EinZeit := FALSE;
+		 lPortal_Mittelanschlag_AusZeit := FALSE; *)
+			gKurve_2.Times.Stopper_ZeitRun := 0;
+		END_IF
+
+
+		IF gKurve_2.Times.Stopper_ZeitRun >= 5000 THEN
+			gKurve_2.Status.Stopper := STATUS_ERROR;
+
+			IF gKurve_2.Times.Stopper_EinZeit = TRUE THEN
+				gError[0] := 1;
+			END_IF
+         
+			IF gKurve_2.Times.Stopper_AusZeit = TRUE THEN
+				gError[1] := 1;
+			END_IF
+
+		END_IF
+
+	ELSE
+		gKurve_2.Times.Stopper_ZeitRun := 0;
+	END_IF
+	 
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/Zylinder/Zylinder_Kurve2/Types.typ


+ 3 - 0
Logical/Zylinder/Zylinder_Kurve2/Variables.var

@@ -0,0 +1,3 @@
+VAR
+	RTInfo_0 : RTInfo;
+END_VAR

+ 9 - 0
Logical/Zylinder/Zylinder_Kurve3/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 74 - 0
Logical/Zylinder/Zylinder_Kurve3/Main.st

@@ -0,0 +1,74 @@
+
+PROGRAM _INIT
+
+	RTInfo_0(enable:=1);
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+	
+(* #############################################################################################################
+   #############################         	     Kurve 3	               #####################################
+   ############################################################################################################# *)
+
+	IF  gKurve_3.Cmd.Stopper = KMD_AUSFAHREN THEN
+		gKurve_3.Outputs.Stopper_einfahren := FALSE;
+		gKurve_3.Times.Stopper_AusZeit := TRUE;
+		gKurve_3.Times.Stopper_EinZeit := FALSE;
+		gKurve_3.Cmd.Stopper := KMD_FERTIG;
+		gKurve_3.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	IF  gKurve_3.Cmd.Stopper = KMD_EINFAHREN THEN
+		gKurve_3.Outputs.Stopper_einfahren := TRUE;
+		gKurve_3.Times.Stopper_AusZeit := FALSE;
+		gKurve_3.Times.Stopper_EinZeit := TRUE;
+		gKurve_3.Cmd.Stopper := KMD_FERTIG;
+		gKurve_3.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	(* Status, Zylinderposition ausgeben *)
+	IF (gKurve_3.Inputs.Stopper_eingefahren = TRUE) AND (gKurve_3.Inputs.Stopper_ausgefahren = FALSE) THEN
+		gKurve_3.Status.Stopper := STATUS_EINGEFAHREN;
+	ELSIF (gKurve_3.Inputs.Stopper_eingefahren = FALSE) AND (gKurve_3.Inputs.Stopper_ausgefahren = TRUE) THEN
+		gKurve_3.Status.Stopper := STATUS_AUSGEFAHREN;
+	ELSE
+		gKurve_3.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	(* Zeitüberwachung Eingefahren*)
+	IF (gKurve_3.Times.Stopper_EinZeit = TRUE AND gKurve_3.Status.Stopper <> STATUS_EINGEFAHREN) OR (gKurve_3.Times.Stopper_AusZeit = TRUE AND gKurve_3.Status.Stopper <> STATUS_AUSGEFAHREN) THEN
+		gKurve_3.Times.Stopper_ZeitRun := gKurve_3.Times.Stopper_ZeitRun + (RTInfo_0.cycle_time/1000);
+
+		IF (gKurve_3.Times.Stopper_EinZeit = TRUE AND gKurve_3.Status.Stopper = STATUS_EINGEFAHREN)
+			OR (gKurve_3.Times.Stopper_AusZeit = TRUE AND gKurve_3.Status.Stopper = STATUS_AUSGEFAHREN)THEN
+		(* lPortal_Mittelanschlag_EinZeit := FALSE;
+		 lPortal_Mittelanschlag_AusZeit := FALSE; *)
+			gKurve_3.Times.Stopper_ZeitRun := 0;
+		END_IF
+
+
+		IF gKurve_3.Times.Stopper_ZeitRun >= 5000 THEN
+			gKurve_3.Status.Stopper := STATUS_ERROR;
+
+			IF gKurve_3.Times.Stopper_EinZeit = TRUE THEN
+				gError[0] := 1;
+			END_IF
+         
+			IF gKurve_3.Times.Stopper_AusZeit = TRUE THEN
+				gError[1] := 1;
+			END_IF
+
+		END_IF
+
+	ELSE
+		gKurve_3.Times.Stopper_ZeitRun := 0;
+	END_IF
+	
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/Zylinder/Zylinder_Kurve3/Types.typ


+ 3 - 0
Logical/Zylinder/Zylinder_Kurve3/Variables.var

@@ -0,0 +1,3 @@
+VAR
+	RTInfo_0 : RTInfo;
+END_VAR

+ 9 - 0
Logical/Zylinder/Zylinder_Kurve4/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 74 - 0
Logical/Zylinder/Zylinder_Kurve4/Main.st

@@ -0,0 +1,74 @@
+
+PROGRAM _INIT
+
+	RTInfo_0(enable:=1);
+	
+END_PROGRAM
+
+PROGRAM _CYCLIC
+	
+(* #############################################################################################################
+   #############################         	     Kurve 4	               #####################################
+   ############################################################################################################# *)
+
+	IF  gKurve_4.Cmd.Stopper = KMD_AUSFAHREN THEN
+		gKurve_4.Outputs.Stopper_einfahren := FALSE;
+		gKurve_4.Times.Stopper_AusZeit := TRUE;
+		gKurve_4.Times.Stopper_EinZeit := FALSE;
+		gKurve_4.Cmd.Stopper := KMD_FERTIG;
+		gKurve_4.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	IF  gKurve_4.Cmd.Stopper = KMD_EINFAHREN THEN
+		gKurve_4.Outputs.Stopper_einfahren := TRUE;
+		gKurve_4.Times.Stopper_AusZeit := FALSE;
+		gKurve_4.Times.Stopper_EinZeit := TRUE;
+		gKurve_4.Cmd.Stopper := KMD_FERTIG;
+		gKurve_4.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	(* Status, Zylinderposition ausgeben *)
+	IF (gKurve_4.Inputs.Stopper_eingefahren = TRUE) AND (gKurve_4.Inputs.Stopper_ausgefahren = FALSE) THEN
+		gKurve_4.Status.Stopper := STATUS_EINGEFAHREN;
+	ELSIF (gKurve_4.Inputs.Stopper_eingefahren = FALSE) AND (gKurve_4.Inputs.Stopper_ausgefahren = TRUE) THEN
+		gKurve_4.Status.Stopper := STATUS_AUSGEFAHREN;
+	ELSE
+		gKurve_4.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	(* Zeitüberwachung Eingefahren*)
+	IF (gKurve_4.Times.Stopper_EinZeit = TRUE AND gKurve_4.Status.Stopper <> STATUS_EINGEFAHREN) OR (gKurve_4.Times.Stopper_AusZeit = TRUE AND gKurve_4.Status.Stopper <> STATUS_AUSGEFAHREN) THEN
+		gKurve_4.Times.Stopper_ZeitRun := gKurve_4.Times.Stopper_ZeitRun + (RTInfo_0.cycle_time/1000);
+
+		IF (gKurve_4.Times.Stopper_EinZeit = TRUE AND gKurve_4.Status.Stopper = STATUS_EINGEFAHREN)
+			OR (gKurve_4.Times.Stopper_AusZeit = TRUE AND gKurve_4.Status.Stopper = STATUS_AUSGEFAHREN)THEN
+		(* lPortal_Mittelanschlag_EinZeit := FALSE;
+		 lPortal_Mittelanschlag_AusZeit := FALSE; *)
+			gKurve_4.Times.Stopper_ZeitRun := 0;
+		END_IF
+
+
+		IF gKurve_4.Times.Stopper_ZeitRun >= 5000 THEN
+			gKurve_4.Status.Stopper := STATUS_ERROR;
+
+			IF gKurve_4.Times.Stopper_EinZeit = TRUE THEN
+				gError[0] := 1;
+			END_IF
+         
+			IF gKurve_4.Times.Stopper_AusZeit = TRUE THEN
+				gError[1] := 1;
+			END_IF
+
+		END_IF
+
+	ELSE
+		gKurve_4.Times.Stopper_ZeitRun := 0;
+	END_IF
+	 
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/Zylinder/Zylinder_Kurve4/Types.typ


+ 3 - 0
Logical/Zylinder/Zylinder_Kurve4/Variables.var

@@ -0,0 +1,3 @@
+VAR
+	RTInfo_0 : RTInfo;
+END_VAR

+ 9 - 0
Logical/Zylinder/Zylinder_Tisch1/IEC.prg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?AutomationStudio Version=4.7.2.98?>
+<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
+  <Files>
+    <File Description="Init, cyclic, exit code">Main.st</File>
+    <File Description="Local data types" Private="true">Types.typ</File>
+    <File Description="Local variables" Private="true">Variables.var</File>
+  </Files>
+</Program>

+ 133 - 0
Logical/Zylinder/Zylinder_Tisch1/Main.st

@@ -0,0 +1,133 @@
+
+PROGRAM _INIT
+	
+	RTInfo_0(enable:=1);
+	 
+END_PROGRAM
+
+PROGRAM _CYCLIC
+	
+(* #############################################################################################################
+   #############################              Stopper Tisch 1              #####################################
+   ############################################################################################################# *)
+
+	IF  gTisch_1.Cmd.Stopper = KMD_AUSFAHREN THEN
+		gTisch_1.Outputs.Stopper_einfahren := FALSE;
+		gTisch_1.Times.Stopper_AusZeit := TRUE;
+		gTisch_1.Times.Stopper_EinZeit := FALSE;
+		gTisch_1.Cmd.Stopper := KMD_FERTIG;
+		gTisch_1.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	IF  gTisch_1.Cmd.Stopper = KMD_EINFAHREN THEN
+		gTisch_1.Outputs.Stopper_einfahren := TRUE;
+		gTisch_1.Times.Stopper_AusZeit := FALSE;
+		gTisch_1.Times.Stopper_EinZeit := TRUE;
+		gTisch_1.Cmd.Stopper := KMD_FERTIG;
+		gTisch_1.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	(* Status, Zylinderposition ausgeben *)
+	IF (gTisch_1.Inputs.Stopper_eingefahren = TRUE) AND (gTisch_1.Inputs.Stopper_ausgefahren = FALSE) THEN
+		gTisch_1.Status.Stopper := STATUS_EINGEFAHREN;
+	ELSIF (gTisch_1.Inputs.Stopper_eingefahren = FALSE) AND (gTisch_1.Inputs.Stopper_ausgefahren = TRUE) THEN
+		gTisch_1.Status.Stopper := STATUS_AUSGEFAHREN;
+	ELSE
+		gTisch_1.Status.Stopper := STATUS_BUSY;
+	END_IF
+
+	(* Zeitüberwachung Eingefahren*)
+	IF (gTisch_1.Times.Stopper_EinZeit = TRUE AND gTisch_1.Status.Stopper <> STATUS_EINGEFAHREN) OR (gTisch_1.Times.Stopper_AusZeit = TRUE AND gTisch_1.Status.Stopper <> STATUS_AUSGEFAHREN) THEN
+		gTisch_1.Times.Stopper_ZeitRun := gTisch_1.Times.Stopper_ZeitRun + (RTInfo_0.cycle_time/1000);
+
+		IF (gTisch_1.Times.Stopper_EinZeit = TRUE AND gTisch_1.Status.Stopper = STATUS_EINGEFAHREN)
+			OR (gTisch_1.Times.Stopper_AusZeit = TRUE AND gTisch_1.Status.Stopper = STATUS_AUSGEFAHREN)THEN
+		(* lPortal_Mittelanschlag_EinZeit := FALSE;
+		 lPortal_Mittelanschlag_AusZeit := FALSE; *)
+			gTisch_1.Times.Stopper_ZeitRun := 0;
+		END_IF
+
+
+		IF gTisch_1.Times.Stopper_ZeitRun >= 5000 THEN
+			gTisch_1.Status.Stopper := STATUS_ERROR;
+
+			IF gTisch_1.Times.Stopper_EinZeit = TRUE THEN
+				gError[0] := 1;
+			END_IF
+         
+			IF gTisch_1.Times.Stopper_AusZeit = TRUE THEN
+				gError[1] := 1;
+			END_IF
+
+		END_IF
+
+	ELSE
+		gTisch_1.Times.Stopper_ZeitRun := 0;
+	END_IF
+	 
+
+(* #############################################################################################################
+   #############################              VorStopper Tisch 1             #####################################
+   ############################################################################################################# *)
+
+	IF  gTisch_1.Cmd.Vorstopper = KMD_AUSFAHREN THEN
+		gTisch_1.Outputs.Vorstopper_einfahren := FALSE;
+		gTisch_1.Times.Vorstopper_AusZeit := TRUE;
+		gTisch_1.Times.Vorstopper_EinZeit := FALSE;
+		gTisch_1.Cmd.Vorstopper := KMD_FERTIG;
+		gTisch_1.Status.Vorstopper := STATUS_BUSY;
+	END_IF
+
+	IF  gTisch_1.Cmd.Vorstopper = KMD_EINFAHREN THEN
+		gTisch_1.Outputs.Vorstopper_einfahren := TRUE;
+		gTisch_1.Times.Vorstopper_AusZeit := FALSE;
+		gTisch_1.Times.Vorstopper_EinZeit := TRUE;
+		gTisch_1.Cmd.Vorstopper := KMD_FERTIG;
+		gTisch_1.Status.Vorstopper := STATUS_BUSY;
+	END_IF
+
+	(* Status, Zylinderposition ausgeben *)
+	IF (gTisch_1.Inputs.Vorstopper_eingefahren = TRUE) AND (gTisch_1.Inputs.Vorstopper_ausgefahren = FALSE) THEN
+		gTisch_1.Status.Vorstopper := STATUS_EINGEFAHREN;
+	ELSIF (gTisch_1.Inputs.Vorstopper_eingefahren = FALSE) AND (gTisch_1.Inputs.Vorstopper_ausgefahren = TRUE) THEN
+		gTisch_1.Status.Vorstopper := STATUS_AUSGEFAHREN;
+	ELSE
+		gTisch_1.Status.Vorstopper := STATUS_BUSY;
+	END_IF
+
+	(* Zeitüberwachung Eingefahren*)
+	IF (gTisch_1.Times.Vorstopper_EinZeit = TRUE AND gTisch_1.Status.Vorstopper <> STATUS_EINGEFAHREN) OR (gTisch_1.Times.Vorstopper_AusZeit = TRUE AND gTisch_1.Status.Vorstopper <> STATUS_AUSGEFAHREN) THEN
+		gTisch_1.Times.Vorstopper_ZeitRun := gTisch_1.Times.Vorstopper_ZeitRun + (RTInfo_0.cycle_time/1000);
+
+		IF (gTisch_1.Times.Vorstopper_EinZeit = TRUE AND gTisch_1.Status.Vorstopper = STATUS_EINGEFAHREN)
+			OR (gTisch_1.Times.Vorstopper_AusZeit = TRUE AND gTisch_1.Status.Vorstopper = STATUS_AUSGEFAHREN)THEN
+		(* lPortal_Mittelanschlag_EinZeit := FALSE;
+		 lPortal_Mittelanschlag_AusZeit := FALSE; *)
+			gTisch_1.Times.Vorstopper_ZeitRun := 0;
+		END_IF
+
+
+		IF gTisch_1.Times.Vorstopper_ZeitRun >= 5000 THEN
+			gTisch_1.Status.Vorstopper := STATUS_ERROR;
+
+			IF gTisch_1.Times.Vorstopper_EinZeit = TRUE THEN
+				gError[0] := 1;
+			END_IF
+         
+			IF gTisch_1.Times.Vorstopper_AusZeit = TRUE THEN
+				gError[1] := 1;
+			END_IF
+
+		END_IF
+
+	ELSE
+		gTisch_1.Times.Vorstopper_ZeitRun := 0;
+	END_IF
+	
+END_PROGRAM
+
+PROGRAM _EXIT
+	(* Insert code here *)
+	 
+END_PROGRAM
+

+ 0 - 0
Logical/Zylinder/Zylinder_Tisch1/Types.typ


+ 3 - 0
Logical/Zylinder/Zylinder_Tisch1/Variables.var

@@ -0,0 +1,3 @@
+VAR
+	RTInfo_0 : RTInfo;
+END_VAR

+ 0 - 0
Logical/Zylinder/Zylinder_Tisch2/IEC.prg


この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません