Browse Source

add safety view and twincat releated

chenzk 3 days ago
parent
commit
5dfc09d488

+ 69 - 0
PunkHPX8_RT/Config/Devices/Beckhoffcfg - plctask.xml

@@ -7,6 +7,52 @@
 		<!-- All inputs first, then all outputs -->
 
 		<!--////////////////////////////////////////////////// ALL INPUTS START //////////////////////////////////////////////////-->
+		
+		<!-- Safety inputs start -->
+		<Input Name="r_EtherCat_State" Address="MAIN.EtherCAT_State" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr" Address="MAIN.Safety_ComErr" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr" Address="MAIN.Safety_FbErr" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_VPW" Address="MAIN.EtherCat_State_HotConnect_VPW" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_VPW" Address="MAIN.Safety_ComErr_VPW"  Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_VPW" Address="MAIN.Safety_FbErr_VPW"  Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_RES1_2" Address="MAIN.EtherCat_State_HotConnect_RES1_2" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_RES1_2" Address="MAIN.Safety_ComErr_RES1_2"  Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_RES1_2" Address="MAIN.Safety_FbErr_RES1_2"  Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_RES3_4" Address="MAIN.EtherCat_State_HotConnect_RES3_4" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_RES3_4" Address="MAIN.Safety_ComErr_RES3_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_RES3_4" Address="MAIN.Safety_FbErr_RES3_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_Facility" Address="MAIN.EtherCat_State_HotConnect_Facility" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_Facility" Address="MAIN.Safety_ComErr_Facility" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_Facility" Address="MAIN.Safety_FbErr_Facility" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_PlatingCell1_2" Address="MAIN.EtherCat_State_HotConnect_PlatingCell1_2" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_PlatingCell1_2" Address="MAIN.Safety_ComErr_PlatingCell1_2" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_PlatingCell1_2" Address="MAIN.Safety_FbErr_PlatingCell1_2" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_PlatingCell3_4" Address="MAIN.EtherCat_State_HotConnect_PlatingCell3_4" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_PlatingCell3_4" Address="MAIN.Safety_ComErr_PlatingCell3_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_PlatingCell3_4" Address="MAIN.Safety_FbErr_PlatingCell3_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_SRD" Address="MAIN.EtherCat_State_HotConnect_SRD" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_SRD" Address="MAIN.Safety_ComErr_SRD" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_SRD" Address="MAIN.Safety_FbErr_SRD" Invert="false" Type="Digital" DataType="bool"/>
+		
+		<Input Name="r_Cell1_2_Doors_Left_Locked" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS100_1" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Cell1_2_Doors_Right_Locked" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS100_2" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Cell3_4_Doors_Left_Locked" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS100_3" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Cell3_4_Doors_Right_Locked" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS100_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Aligner_Door_Closed" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS101_1" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Cassette_Doors_Left_Locked" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS101_2" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Cassette_Doors_Right_Locked" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS101_3" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_RES1_2_Door_Closed" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS101_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_RES3_4_Door_Closed" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS102_1" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_VPW_Door_Closed" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS102_2" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Plumbing_Door_Closed" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS102_3" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_SRD_Panel_Closed" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS102_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Halt_Button_Left" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS103_1" Invert="true" Type="Digital" DataType="bool"/>
+		<Input Name="r_Halt_Button_Right" Address="MAIN.Safety_SDI_CHANNEL_EL1904_NS103_2" Invert="true" Type="Digital" DataType="bool"/>
+		
+
+		<!-- Safety inputs end -->
+
+
 
 		<!--VPW Main Start-->
 		<Input Name="r_VPW_CHAMBER_CLOSED"  Address="MAIN.VPW_DI_16CHANNEL_EL1819_N100_1" Invert="false" Type="Digital" DataType="bool"/>
@@ -29,10 +75,33 @@
 		<Input Name="r_VPW_DIW_CELL_2_FLOW"  Address="MAIN.VPW_AI_8CHANNEL_4_20mA_EL3058_N102_3" Scaling="0=0,8=32767" Type="Analog" DataType="int"/>
 		<Input Name="r_VPW_CELL_2_VAC_PRESSURE"  Address="MAIN.VPW_AI_8CHANNEL_0_10V_EL3068_N105_2" Scaling="0=0,10=32767" Type="Analog" DataType="int"/>
 		<!--VPW2 End-->
+		
+		
 		<!--////////////////////////////////////////////////// ALL INPUTS END //////////////////////////////////////////////////-->
 
 
 		<!--////////////////////////////////////////////////// ALL OUTPUTS BEGIN //////////////////////////////////////////////////-->
+		
+		<!-- Safety outputs start -->
+
+		<Output Name="c_Safety_RunStop" Address="MAIN.Safety_RunStop" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_ErrAck" Address="MAIN.Safety_ErrAck" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_VPW_STO_EStop_Restart" Address="MAIN.Safety_VPW_STO_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_RES1_2_STO_EStop_Restart" Address="MAIN.Safety_RES1_2_STO_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_RES3_4_STO_EStop_Restart" Address="MAIN.Safety_RES3_4_STO_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_PlatingCell1_2_STO_1_EStop_Restart" Address="MAIN.Safety_PlatingCell1_2_STO_1_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_PlatingCell1_2_STO_2_EStop_Restart" Address="MAIN.Safety_PlatingCell1_2_STO_2_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_PlatingCell3_4_STO_1_EStop_Restart" Address="MAIN.Safety_PlatingCell3_4_STO_1_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_PlatingCell3_4_STO_2_EStop_Restart" Address="MAIN.Safety_PlatingCell3_4_STO_2_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_Facility_STO_EStop_Restart" Address="MAIN.Safety_Facility_STO_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_SRD_STO_EStop_Restart" Address="MAIN.Safety_SRD_STO_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_ReqAlignerDoorsLock" Address="MAIN.Safety_ReqAlignerDoorsLock" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_ReqCassetteDoorsLock" Address="MAIN.Safety_ReqCassetteDoorsLock" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_ReqCell1_2DoorsLock" Address="MAIN.Safety_ReqCell1_2DoorsLock" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_ReqCell3_4DoorsLock" Address="MAIN.Safety_ReqCell3_4DoorsLock" Type="Digital" DataType="bool"/>
+
+		<!-- Safety outputs end -->
+		
 		<!--VPW Main Start-->
 		<Output Name="c_VPW_CHAMBER_CLOSE" Address="MAIN.MOTION_DO_16CHANNEL_EL2809_N401_15" Type="Digital" Invert="true" DataType="bool"/>
 		<Output Name="c_VPW_VACUUM_PUMP_POWER" Address="MAIN.VPW_DO_16CHANNEL_EL2809_101_5" Type="Digital" Invert="false" DataType="bool"/>

+ 66 - 0
PunkHPX8_RT/Config/Devices/Beckhoffcfg.xml

@@ -7,6 +7,50 @@
 		<!-- All inputs first, then all outputs -->
 
 		<!--////////////////////////////////////////////////// ALL INPUTS START //////////////////////////////////////////////////-->
+		
+		<!-- Safety inputs start -->
+		<Input Name="r_EtherCat_State" Address="Task 2.Inputs.EtherCAT_State" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr" Address="Task 2.Inputs.Safety_ComErr" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr" Address="Task 2.Inputs.Safety_FbErr" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_VPW" Address="Task 2.Inputs.EtherCat_State_HotConnect_VPW" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_VPW" Address="Task 2.Inputs.Safety_ComErr_VPW"  Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_VPW" Address="Task 2.Inputs.Safety_FbErr_VPW"  Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_RES1_2" Address="Task 2.Inputs.EtherCat_State_HotConnect_RES1_2" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_RES1_2" Address="Task 2.Inputs.Safety_ComErr_RES1_2"  Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_RES1_2" Address="Task 2.Inputs.Safety_FbErr_RES1_2"  Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_RES3_4" Address="Task 2.Inputs.EtherCat_State_HotConnect_RES3_4" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_RES3_4" Address="Task 2.Inputs.Safety_ComErr_RES3_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_RES3_4" Address="Task 2.Inputs.Safety_FbErr_RES3_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_Facility" Address="Task 2.Inputs.EtherCat_State_HotConnect_Facility" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_Facility" Address="Task 2.Inputs.Safety_ComErr_Facility" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_Facility" Address="Task 2.Inputs.Safety_FbErr_Facility" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_PlatingCell1_2" Address="Task 2.Inputs.EtherCat_State_HotConnect_PlatingCell1_2" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_PlatingCell1_2" Address="Task 2.Inputs.Safety_ComErr_PlatingCell1_2" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_PlatingCell1_2" Address="Task 2.Inputs.Safety_FbErr_PlatingCell1_2" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_PlatingCell3_4" Address="Task 2.Inputs.EtherCat_State_HotConnect_PlatingCell3_4" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_PlatingCell3_4" Address="Task 2.Inputs.Safety_ComErr_PlatingCell3_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_PlatingCell3_4" Address="Task 2.Inputs.Safety_FbErr_PlatingCell3_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_EtherCat_State_HotConnect_SRD" Address="Task 2.Inputs.EtherCat_State_HotConnect_SRD" Invert="false" Type="Analog" Scaling="0=0,1=1" DataType="uint"/>
+		<Input Name="r_Safety_ComErr_SRD" Address="Task 2.Inputs.Safety_ComErr_SRD" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Safety_FbErr_SRD" Address="Task 2.Inputs.Safety_FbErr_SRD" Invert="false" Type="Digital" DataType="bool"/>
+		
+		<Input Name="r_Cell1_2_Doors_Left_Locked" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS100_1" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Cell1_2_Doors_Right_Locked" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS100_2" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Cell3_4_Doors_Left_Locked" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS100_3" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Cell3_4_Doors_Right_Locked" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS100_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Aligner_Door_Closed" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS101_1" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Cassette_Doors_Left_Locked" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS101_2" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Cassette_Doors_Right_Locked" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS101_3" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_RES1_2_Door_Closed" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS101_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_RES3_4_Door_Closed" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS102_1" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_VPW_Door_Closed" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS102_2" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Plumbing_Door_Closed" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS102_3" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_SRD_Panel_Closed" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS102_4" Invert="false" Type="Digital" DataType="bool"/>
+		<Input Name="r_Halt_Button_Left" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS103_1" Invert="true" Type="Digital" DataType="bool"/>
+		<Input Name="r_Halt_Button_Right" Address="Task 2.Inputs.Safety_SDI_CHANNEL_EL1904_NS103_2" Invert="true" Type="Digital" DataType="bool"/>
+		
+
+		<!-- Safety inputs end -->
 
 		<!--VPW Main Start-->
 		<Input Name="r_VPW_CHAMBER_CLOSED"  Address="Task 2.Inputs.VPW_DI_16CHANNEL_EL1819_N100_1" Invert="true" Type="Digital" DataType="bool"/>
@@ -32,6 +76,28 @@
 
 
 		<!--////////////////////////////////////////////////// ALL OUTPUTS BEGIN //////////////////////////////////////////////////-->
+		
+		<!-- Safety outputs start -->
+
+		<Output Name="c_Safety_RunStop" Address="Task 2.Outputs.Safety_RunStop" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_ErrAck" Address="Task 2.Outputs.Safety_ErrAck" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_VPW_STO_EStop_Restart" Address="Task 2.Outputs.Safety_VPW_STO_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_RES1_2_STO_EStop_Restart" Address="Task 2.Outputs.Safety_RES1_2_STO_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_RES3_4_STO_EStop_Restart" Address="Task 2.Outputs.Safety_RES3_4_STO_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_PlatingCell1_2_STO_1_EStop_Restart" Address="Task 2.Outputs.Safety_PlatingCell1_2_STO_1_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_PlatingCell1_2_STO_2_EStop_Restart" Address="Task 2.Outputs.Safety_PlatingCell1_2_STO_2_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_PlatingCell3_4_STO_1_EStop_Restart" Address="Task 2.Outputs.Safety_PlatingCell3_4_STO_1_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_PlatingCell3_4_STO_2_EStop_Restart" Address="Task 2.Outputs.Safety_PlatingCell3_4_STO_2_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_Facility_STO_EStop_Restart" Address="Task 2.Outputs.Safety_Facility_STO_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_SRD_STO_EStop_Restart" Address="Task 2.Outputs.Safety_SRD_STO_EStop_Restart" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_ReqAlignerDoorsLock" Address="Task 2.Outputs.Safety_ReqAlignerDoorsLock" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_ReqCassetteDoorsLock" Address="Task 2.Outputs.Safety_ReqCassetteDoorsLock" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_ReqCell1_2DoorsLock" Address="Task 2.Outputs.Safety_ReqCell1_2DoorsLock" Type="Digital" DataType="bool"/>
+		<Output Name="c_Safety_ReqCell3_4DoorsLock" Address="Task 2.Outputs.Safety_ReqCell3_4DoorsLock" Type="Digital" DataType="bool"/>
+
+		<!-- Safety outputs end -->
+		
+		
 		<!--VPW Main Start-->
 		<Output Name="c_VPW_CHAMBER_CLOSE" Address="Task 2.Outputs.MOTION_DO_16CHANNEL_EL2809_N401_15" Type="Digital" Invert="true" DataType="bool"/>
 		<Output Name="c_VPW_VACUUM_PUMP_POWER" Address="Task 2.Outputs.VPW_DO_16CHANNEL_EL2809_N101_5" Type="Digital" Invert="false" DataType="bool"/>

+ 54 - 82
PunkHPX8_RT/Config/Devices/ModuleIOCfg.xml

@@ -186,88 +186,60 @@
 		<IO Name="VPW2.VentValve" IOName="c_VPW_2_VENT_VALVE"/>
 	</Module>
 	<Module Name="Safety">
-		<IO Name="Safety.MainCommErr" IOName="r_Safety_ComErr"/>
-		<IO Name="Safety.LoaderPufCommErr" IOName="r_Safety_ComErr_LdrPuf"/>
-		<IO Name="Safety.SrdCommErr" IOName="r_Safety_ComErr_Srd"/>
-		<IO Name="Safety.TransportCommErr" IOName="r_Safety_ComErr_Transp"/>
-		<IO Name="Safety.MainFunctionBlockErr" IOName="r_Safety_FbErr"/>
-		<IO Name="Safety.LoaderPufFunctionBlockErr" IOName="r_Safety_FbErr_LdrPuf"/>
-		<IO Name="Safety.SrdFunctionBlockErr" IOName="r_Safety_FbErr_Srd"/>
-		<IO Name="Safety.TransporterFunctionBlockErr" IOName="r_Safety_FbErr_Transp"/>
 		<IO Name="Safety.TwincatState" IOName="r_EtherCat_State"/>
-		<IO Name="Safety.LoaderHotConnectState" IOName="r_EtherCat_State_Loader"/>
-		<IO Name="Safety.LdrHotConnectState" IOName="r_EtherCat_State_LdrTxIO"/>
-		<IO Name="Safety.PrcHotConnectState" IOName="r_EtherCat_State_PrcTxIO"/>
-		<IO Name="Safety.TransporterHotConnectState" IOName="r_EtherCat_State_Transporter"/>
-		<IO Name="Safety.PufHotConnectState" IOName="r_EtherCat_State_Puf"/>
-		<IO Name="Safety.SrdHotConnectState" IOName="r_EtherCat_State_Srd"/>
-		<IO Name="Safety.Reservoir1HotConnectState" IOName="r_EtherCat_State_Reservoir1"/>
-		<IO Name="Safety.Reservoir2HotConnectState" IOName="r_EtherCat_State_Reservoir2"/>
-		<IO Name="Safety.FFUHotConnectState" IOName="r_EtherCat_State_FFU"/>
-		<IO Name="Safety.RunStop" IOName="c_Safety_RunStop"/>
-		<IO Name="Safety.ErrAck" IOName="c_Safety_ErrAck"/>
-		<IO Name="Safety.SlsRestart" IOName="c_Safety_SLS_Restart"/>
-		<IO Name="Safety.TxStoMonRestart" IOName="c_Safety_TX_STO_MON_Restart"/>
-		<IO Name="Safety.TxSto1EstopRestart" IOName="c_Safety_TX_STO1_ESTOP_Restart"/>
-		<IO Name="Safety.TxSto2EstopRestart" IOName="c_Safety_TX_STO2_ESTOP_Restart"/>
-		<IO Name="Safety.LdrPufStoMonRestart" IOName="c_Safety_LDRPUF_STO_MON_Restart"/>
-		<IO Name="Safety.LdrPufSto1EstopRestart" IOName="c_Safety_LDRPUF_STO1_ESTOP_Restart"/>
-		<IO Name="Safety.LdrPufSto2EstopRestart" IOName="c_Safety_LDRPUF_STO2_ESTOP_Restart"/>
-		<IO Name="Safety.SrdStoEstopRestart" IOName="c_Safety_SRD_STO_ESTOP_Restart"/>
-		<IO Name="Safety.PumpStoEstopRestart" IOName="c_Safety_PUMP_STO_ESTOP_Restart"/>
-		<IO Name="Safety.FluidEstopRestart" IOName="c_Safety_FLUID_ESTOP_Restart"/>
-		<IO Name="Safety.LoaderDoorLock" IOName="c_REQUEST_LDR_DOOR_OPEN"/>
-		<IO Name="Safety.LoaderDoorLocked" IOName="r_LDR_Door_Locked"/>
-		<IO Name="Safety.BufferDoorLock" IOName="c_REQUEST_BFFR_DOOR_OPEN"/>
-		<IO Name="Safety.BufferDoorLocked" IOName="r_BFFR_Door_Locked"/>
-		<IO Name="Safety.LowerLoaderPanelRemoved" IOName="r_LWR_LDR_PNL_REMOVED"/>
-		<IO Name="Safety.LoaderPanelRemoved" IOName="r_XPRTR_LDR_PNL_REMOVED"/>	
-		<IO Name="Safety.BufferPanelRemoved" IOName="r_XPRTR_BFFR_PNL_REMOVED"/>	
-		<IO Name="Safety.ProcessDoorLock" IOName="c_REQUEST_PROC_DOORS_OPEN"/>	
-		<IO Name="Safety.ProcessDoor1Locked" IOName="r_PROC_DOOR_1_SAFE_LOCK"/>	
-		<IO Name="Safety.ProcessDoor2Locked" IOName="r_PROC_DOOR_2_SAFE_LOCK"/>	
-		<IO Name="Safety.ProcessDoor3Locked" IOName="r_PROC_DOOR_3_SAFE_LOCK"/>	
-		<IO Name="Safety.ProcessDoor4Locked" IOName="r_PROC_DOOR_4_SAFE_LOCK"/>	
-		<IO Name="Safety.ProcessUpperPanelsOn" IOName="r_PROC_DOORS_UPPR_PNLS_ON"/>		
-		<IO Name="Safety.SrdTopPanelRemoved" IOName="r_SRD_TOP_PNL_REMOVED"/>	
-		<IO Name="Safety.SrdLowerPanelRemoved" IOName="r_SRD_LWR_PNL_REMOVED"/>	
-		<IO Name="Safety.PlumbingDoorClosed" IOName="r_PLUMBING_DOORS_CLOSED"/>	
-		<IO Name="Safety.ProcessHaltButton1" IOName="r_PROCESS_HALT_BUTTON_1"/>	
-		<IO Name="Safety.ProcessHaltButton2" IOName="r_PROCESS_HALT_BUTTON_2"/>	
-		<IO Name="Safety.LoaderHaltButton" IOName="r_HALT_LDR_SECTION"/>	
-		<IO Name="Safety.ModeSelectorSwitch" IOName="r_MODE_SELECTOR_SWITCH"/>	
-		<IO Name="Safety.ModeSiren" IOName="c_MODE_SIREN"/>	
-		<IO Name="Safety.LoaderRotationSls" IOName="r_Rotate_AMP_SLS"/>	
-		<IO Name="Safety.LoaderSwingASls" IOName="r_Door_A_AMP_SLS"/>	
-		<IO Name="Safety.LoaderSwingBSls" IOName="r_Door_B_AMP_SLS"/>	
-		<IO Name="Safety.LoaderTiltASls" IOName="r_SUP_A_AMP_SLS"/>	
-		<IO Name="Safety.LoaderTiltBSls" IOName="r_SUP_B_AMP_SLS"/>	
-		<IO Name="Safety.Puf1VerticalSls" IOName="r_DPUF_A_VERT_SAFE_SLS"/>	
-		<IO Name="Safety.Puf2VerticalSls" IOName="r_DPUF_B_VERT_SAFE_SLS"/>	
-		<IO Name="Safety.LoaderGantrySls" IOName="r_Gantry_Zone_Safe_SLS_1"/>	
-		<IO Name="Safety.LoaderElevatorSls" IOName="r_Gantry_Zone_Safe_SLS_2"/>	
-		<IO Name="Safety.ProcessGantrySls" IOName="r_Gantry_Zone_Safe_SLS_3"/>	
-		<IO Name="Safety.ProcessElevatorSls" IOName="r_Gantry_Zone_Safe_SLS_4"/>	
-		<IO Name="Safety.PufVerticalDisable" IOName="r_DPUF_VERT_SAFE_Disable"/>	
-		<IO Name="Safety.Puf1FlipRotationDisable" IOName="r_DPUF_A_PIVSUP_Disable"/>	
-		<IO Name="Safety.Puf2FlipRotationDisable" IOName="r_DPUF_B_PIVSUP_Disable"/>	
-		<IO Name="Safety.LoaderDisable" IOName="r_Loader_Zone_Safe_Disable"/>	
-		<IO Name="Safety.TransporterDisable" IOName="r_Gantry_Zone_Safe_Disable"/>	
-		<IO Name="Safety.SrdArmDisable" IOName="r_SRD_WASH_ARMS_Disable"/>	
-		<IO Name="Safety.SrdRotationDisable" IOName="r_SRD_ROTATE_Disable"/>	
-		<IO Name="Safety.TransporterSafeSls" IOName="r_Gantry_Zone_Safe_SLS"/>	
-		<IO Name="Safety.LoaderSafeSls" IOName="r_Loader_Zone_Safe_SLS"/>	
-		<IO Name="Safety.PufVerticalSafeSls" IOName="r_DPUF_VERT_SAFE_SLS"/>	
-		<IO Name="Safety.LoaderSafeSto" IOName="r_Loader_Zone_Safe_STO"/>	
-		<IO Name="Safety.PufVerticalSafeSto" IOName="r_DPUF_VERT_SAFE_STO"/>	
-		<IO Name="Safety.Puf1FlipRotationSafeSto" IOName="r_DPUF_A_PIVSUP_STO"/>	
-		<IO Name="Safety.Puf2FlipRotationSafeSto" IOName="r_DPUF_B_PIVSUP_STO"/>	
-		<IO Name="Safety.TransporterSafeSto" IOName="r_Gantry_Zone_Safe_STO"/>	
-		<IO Name="Safety.SrdArmSafeSto" IOName="r_SRD_WASH_STO"/>		
-		<IO Name="Safety.SrdRotationSafeSto" IOName="r_SRD_ROTATE_STO"/>		
-		<IO Name="Safety.PumpEdm" IOName="r_PUMP_EDM"/>		
-		<IO Name="Safety.ReservoirHighLevel" IOName="r_SAFETY_HIGH_LEVEL"/>		
-		<IO Name="Safety.FluidEnableEdm" IOName="r_EXT_FLUID_ENABLE_EDM"/>
-		<IO Name="Safety.SRDArmReset" IOName="c_Safety_SRD_Arm_Reset"/>
+		<IO Name="Safety.MainCommErr" IOName="r_Safety_ComErr"/>
+		<IO Name="Safety.MainFbErr" IOName="r_Safety_FbErr"/>
+		<IO Name="Safety.VpwHotConnectState" IOName="r_EtherCat_State_HotConnect_VPW"/>
+		<IO Name="Safety.VpwCommErr" IOName="r_Safety_ComErr_VPW"/>
+		<IO Name="Safety.VpwFbErr" IOName="r_Safety_FbErr_VPW"/>
+		<IO Name="Safety.Res12HotConnectState" IOName="r_EtherCat_State_HotConnect_RES1_2"/>
+		<IO Name="Safety.Res12CommErr" IOName="r_Safety_ComErr_RES1_2"/>
+		<IO Name="Safety.Res12FbErr" IOName="r_Safety_FbErr_RES1_2"/>
+		<IO Name="Safety.Res34HotConnectState" IOName="r_EtherCat_State_HotConnect_RES3_4"/>
+		<IO Name="Safety.Res34CommErr" IOName="r_Safety_ComErr_RES3_4"/>
+		<IO Name="Safety.Res34FbErr " IOName="r_Safety_FbErr_RES3_4"/>
+		<IO Name="Safety.FacilityHotConnectState" IOName="r_EtherCat_State_HotConnect_Facility"/>
+		<IO Name="Safety.FacilityCommErr" IOName="r_Safety_ComErr_Facility"/>
+		<IO Name="Safety.FacilityFbErr" IOName="r_Safety_FbErr_Facility"/>
+		<IO Name="Safety.Plating12HotConnectState" IOName="r_EtherCat_State_HotConnect_PlatingCell1_2"/>
+		<IO Name="Safety.Plating12CommErr" IOName="r_Safety_ComErr_PlatingCell1_2"/>
+		<IO Name="Safety.Plating12FbErr" IOName="r_Safety_FbErr_PlatingCell1_2"/>
+		<IO Name="Safety.Plating34HotConnectState" IOName="r_EtherCat_State_HotConnect_PlatingCell3_4"/>
+		<IO Name="Safety.Plating34CommErr" IOName="r_Safety_ComErr_PlatingCell3_4"/>
+		<IO Name="Safety.Plating34FbErr" IOName="r_Safety_FbErr_PlatingCell3_4"/>
+		<IO Name="Safety.SrdHotConnectState" IOName="r_EtherCat_State_HotConnect_SRD"/>
+		<IO Name="Safety.SrdCommErr" IOName="r_Safety_ComErr_SRD"/>
+		<IO Name="Safety.SrdFbErr" IOName="r_Safety_FbErr_SRD"/>
+		<IO Name="Safety.Cell12DoorsLeftLocked" IOName="r_Cell1_2_Doors_Left_Locked"/>
+		<IO Name="Safety.Cell12DoorsRightLocked" IOName="r_Cell1_2_Doors_Right_Locked"/>
+		<IO Name="Safety.Cell34DoorsLeftLocked" IOName="r_Cell3_4_Doors_Left_Locked"/>
+		<IO Name="Safety.Cell34DoorsRightLocked" IOName="r_Cell3_4_Doors_Right_Locked"/>
+		<IO Name="Safety.AlignerDoorClosed" IOName="r_Aligner_Door_Closed"/>
+		<IO Name="Safety.CassetteDoorsLeftLocked" IOName="r_Cassette_Doors_Left_Locked"/>
+		<IO Name="Safety.CassetteDoorsRightLocked" IOName="r_Cassette_Doors_Right_Locked"/>
+		<IO Name="Safety.Res12DoorClosed" IOName="r_RES1_2_Door_Closed"/>
+		<IO Name="Safety.Res34DoorClosed" IOName="r_RES3_4_Door_Closed"/>
+		<IO Name="Safety.VpwDoorClosed" IOName="r_VPW_Door_Closed"/>
+		<IO Name="Safety.PlumblingDoorClosed" IOName="r_Plumbing_Door_Closed"/>
+		<IO Name="Safety.SrdPanelClosed" IOName="r_SRD_Panel_Closed"/>	
+		<IO Name="Safety.HaltButtonLeft" IOName="r_Halt_Button_Left"/>	
+		<IO Name="Safety.HaltButtonRight" IOName="r_Halt_Button_Right"/>	
+		
+		<IO Name="Safety.RunStop" IOName="c_Safety_RunStop"/>	
+		<IO Name="Safety.ErrAck" IOName="c_Safety_ErrAck"/>	
+		<IO Name="Safety.VpwStoEstopRestart" IOName="c_Safety_VPW_STO_EStop_Restart"/>	
+		<IO Name="Safety.Res12StoEstopRestart" IOName="c_Safety_RES1_2_STO_EStop_Restart"/>	
+		<IO Name="Safety.Res34StoEstopRestart" IOName="c_Safety_RES3_4_STO_EStop_Restart"/>		
+		<IO Name="Safety.PlatingCell12Sto1EstopRestart" IOName="c_Safety_PlatingCell1_2_STO_1_EStop_Restart"/>	
+		<IO Name="Safety.PlatingCell12Sto2EstopRestart" IOName="c_Safety_PlatingCell1_2_STO_2_EStop_Restart"/>	
+		<IO Name="Safety.PlatingCell34Sto1EstopRestart" IOName="c_Safety_PlatingCell3_4_STO_1_EStop_Restart"/>	
+		<IO Name="Safety.PlatingCell34Sto2EstopRestart" IOName="c_Safety_PlatingCell3_4_STO_2_EStop_Restart"/>	
+		<IO Name="Safety.FacilityStoEstopRestart" IOName="c_Safety_Facility_STO_EStop_Restart"/>	
+		<IO Name="Safety.SrdStoEstopRestart" IOName="c_Safety_SRD_STO_EStop_Restart"/>	
+		<IO Name="Safety.ReqAlignerDoorLock" IOName="c_Safety_ReqAlignerDoorsLock"/>	
+		<IO Name="Safety.ReqCassetteDoorsLock" IOName="c_Safety_ReqCassetteDoorsLock"/>	
+		<IO Name="Safety.ReqCell12DoorsLock" IOName="c_Safety_ReqCell1_2DoorsLock"/>	
+		<IO Name="Safety.ReqCell34DoorsLock" IOName="c_Safety_ReqCell3_4DoorsLock"/>	
+		
 	</Module>
 </BeckhoffModuleIOCfg>

+ 6 - 6
PunkHPX8_RT/Devices/Safety/SafetyDevice.cs

@@ -45,7 +45,7 @@ namespace PunkHPX8_RT.Devices.Safety
         /// <summary>
         /// VPW状态
         /// </summary>
-        private const string VPW_HOTCONNECT_STATE="VpwHotConectState";
+        private const string VPW_HOTCONNECT_STATE="VpwHotConnectState";
         /// <summary>
         /// VPW通信故障
         /// </summary>
@@ -57,7 +57,7 @@ namespace PunkHPX8_RT.Devices.Safety
         /// <summary>
         /// RES1_2状态
         /// </summary>
-        private const string RES1_2_HOT_CONNECT_STATE="Res12HotConectState";
+        private const string RES1_2_HOT_CONNECT_STATE="Res12HotConnectState";
         /// <summary>
         /// RES1_2通信故障
         /// </summary>
@@ -69,7 +69,7 @@ namespace PunkHPX8_RT.Devices.Safety
         /// <summary>
         /// RES3_4状态
         /// </summary>
-        private const string RES3_4_HOT_CONNECT_STATE="Res34HotConectState";
+        private const string RES3_4_HOT_CONNECT_STATE="Res34HotConnectState";
         /// <summary>
         /// RES3_4通信故障
         /// </summary>
@@ -81,7 +81,7 @@ namespace PunkHPX8_RT.Devices.Safety
         /// <summary>
         /// Facility状态
         /// </summary>
-        private const string FACILITY_HOT_CONNECT_STATE="FacilityHotConectState";
+        private const string FACILITY_HOT_CONNECT_STATE="FacilityHotConnectState";
         /// <summary>
         /// Facility通信故障
         /// </summary>
@@ -93,7 +93,7 @@ namespace PunkHPX8_RT.Devices.Safety
         /// <summary>
         /// PlatingCell1_2状态
         /// </summary>
-        private const string PLATING1_2_HOT_CONNECT_STATE="Plating12HotConectState";
+        private const string PLATING1_2_HOT_CONNECT_STATE="Plating12HotConnectState";
         /// <summary>
         /// Plating1_2通信故障
         /// </summary>
@@ -105,7 +105,7 @@ namespace PunkHPX8_RT.Devices.Safety
         /// <summary>
         /// Plating3_4状态
         /// </summary>
-        private const string PLATING3_4_HOT_CONNECT_STATE="Plating34HotConectState";
+        private const string PLATING3_4_HOT_CONNECT_STATE="Plating34HotConnectState";
         /// <summary>
         /// Plating3_4通信故障
         /// </summary>

+ 3 - 3
PunkHPX8_RT/Devices/Safety/SafetyResetRoutine.cs

@@ -105,13 +105,13 @@ namespace PunkHPX8_RT.Devices.Safety
                 .Delay(SafetyResetStep.PlatingCell12Sto1EstopDelay, 100)//100 delay
                 .Run(SafetyResetStep.PlatingCell12Sto2EstopDelay, () => { return _platingCell12Sto2EstopRestart.Start("PlatingCell12Sto2EstopRestart") == RState.Running; },
                 () => { return CheckRoutineStatus(_platingCell12Sto2EstopRestart); }, _delay_1s)
-                .Delay(SafetyResetStep.PlatingCell12Sto1EstopDelay, 100)//100 delay
+                .Delay(SafetyResetStep.PlatingCell12Sto2EstopDelay, 100)//100 delay
                 .Run(SafetyResetStep.PlatingCell34Sto1EstopDelay, () => { return _platingCell34Sto1EstopRestart.Start("PlatingCell34Sto1EstopRestart") == RState.Running; },
                 () => { return CheckRoutineStatus(_platingCell34Sto1EstopRestart); }, _delay_1s)
                 .Delay(SafetyResetStep.PlatingCell34Sto1EstopDelay, 100)//100 delay
-                .Run(SafetyResetStep.PlatingCell34Sto2EstopDelay, () => { return _platingCell34Sto1EstopRestart.Start("PlatingCell34Sto2EstopRestart") == RState.Running; },
+                .Run(SafetyResetStep.PlatingCell34Sto2EstopDelay, () => { return _platingCell34Sto2EstopRestart.Start("PlatingCell34Sto2EstopRestart") == RState.Running; },
                 () => { return CheckRoutineStatus(_platingCell34Sto2EstopRestart); }, _delay_1s)
-                .Delay(SafetyResetStep.PlatingCell34Sto1EstopDelay, 100)//100 delay
+                .Delay(SafetyResetStep.PlatingCell34Sto2EstopDelay, 100)//100 delay
                 .Run(SafetyResetStep.Res12StoEstopDelay, () => { return _res12StoEstopRestart.Start("Res12StoEstopRestart") == RState.Running; },
                 () => { return CheckRoutineStatus(_res12StoEstopRestart); }, _delay_1s)
                 .Delay(SafetyResetStep.Res12StoEstopDelay, 100)//100 delay

+ 163 - 1
PunkHPX8_Twincate/PunkHPX8/PlcTest/POUs/MAIN.TcPOU

@@ -3,6 +3,115 @@
   <POU Name="MAIN" Id="{f3b23004-2d2c-4ebb-9aed-d7be3f27e3a6}" SpecialFunc="None">
     <Declaration><![CDATA[PROGRAM MAIN
 VAR
+	//TwincatState
+	EtherCAT_State AT%I* :UINT:=8;
+	//VpwHotConnectState
+	EtherCat_State_HotConnect_VPW AT%I* :UINT:=8;
+	//Res12HotConnectState
+	EtherCat_State_HotConnect_RES1_2 AT%I* :UINT:=8;
+	//Res34HotConnectState
+	EtherCat_State_HotConnect_RES3_4 AT%I* :UINT:=8;
+	//FacilityHotConnectState
+	EtherCat_State_HotConnect_Facility AT%I* :UINT:=8;
+	//Plating12HotConnectState
+	EtherCat_State_HotConnect_PlatingCell1_2 AT%I* :UINT:=8;
+	//Plating34HotConnectState
+	EtherCat_State_HotConnect_PlatingCell3_4 AT%I* :UINT:=8;
+	//SrdHotConnectState
+	EtherCat_State_HotConnect_SRD AT%I* :UINT:=8;
+	//MainCommErr
+	Safety_ComErr AT%I* :BOOL;
+	//MainFbErr
+	Safety_FbErr AT%I* :BOOL;
+	//VpwCommErr
+	Safety_ComErr_VPW AT%I* :BOOL;
+	//VpwFbErr
+	Safety_FbErr_VPW AT%I* :BOOL;
+	//Res12CommErr
+	Safety_ComErr_RES1_2 AT%I* :BOOL;
+	//Res12FbErr
+	Safety_FbErr_RES1_2 AT%I* :BOOL;
+	//Res34CommErr
+	Safety_ComErr_RES3_4 AT%I* :BOOL;
+	//Res34FbErr
+	Safety_FbErr_RES3_4 AT%I* :BOOL;
+	//FacilityCommErr
+	Safety_ComErr_Facility AT%I* :BOOL;
+	//FacilityFbErr
+	Safety_FbErr_Facility AT%I* :BOOL;
+	//Plating12CommErr
+	Safety_ComErr_PlatingCell1_2 AT%I* :BOOL;
+	//Plating12FbErr
+	Safety_FbErr_PlatingCell1_2 AT%I* :BOOL;
+	//Plating34CommErr
+	Safety_ComErr_PlatingCell3_4 AT%I* :BOOL;
+	//Plating34FbErr
+	Safety_FbErr_PlatingCell3_4 AT%I* :BOOL;
+	//SrdCommErr
+	Safety_ComErr_SRD AT%I* :BOOL;
+	//SrdFbErr
+	Safety_FbErr_SRD AT%I* :BOOL;
+	//Cell12DoorsLeftLocked
+	Safety_SDI_CHANNEL_EL1904_NS100_1 AT%I* :BOOL;
+	//Cell12DoorsRightLocked
+	Safety_SDI_CHANNEL_EL1904_NS100_2 AT%I* :BOOL;
+	//Cell34DoorsLeftLocked
+	Safety_SDI_CHANNEL_EL1904_NS100_3 AT%I* :BOOL;
+	//Cell34DoorsRightLocked
+	Safety_SDI_CHANNEL_EL1904_NS100_4 AT%I* :BOOL;
+	//AlignerDoorClosed
+	Safety_SDI_CHANNEL_EL1904_NS101_1 AT%I* :BOOL;
+	//CassetteDoorsLeftLocked
+	Safety_SDI_CHANNEL_EL1904_NS101_2 AT%I* :BOOL;
+	//CassetteDoorsRightLocked
+	Safety_SDI_CHANNEL_EL1904_NS101_3 AT%I* :BOOL;
+	//Res12DoorClosed
+	Safety_SDI_CHANNEL_EL1904_NS101_4 AT%I* :BOOL;
+	//Res34DoorClosed
+	Safety_SDI_CHANNEL_EL1904_NS102_1 AT%I* :BOOL;
+	//VpwDoorClosed
+	Safety_SDI_CHANNEL_EL1904_NS102_2 AT%I* :BOOL;
+	//PlumblingDoorClosed
+	Safety_SDI_CHANNEL_EL1904_NS102_3 AT%I* :BOOL;
+	//SrdPanelClosed
+	Safety_SDI_CHANNEL_EL1904_NS102_4 AT%I* :BOOL;
+	//HaltButtonLeft
+	Safety_SDI_CHANNEL_EL1904_NS103_1 AT%I* :BOOL;
+	//HaltButtonRight
+	Safety_SDI_CHANNEL_EL1904_NS103_2 AT%I* :BOOL;
+	
+	//RunStop
+	Safety_RunStop AT%Q* :BOOL;
+	//ErrAck
+	Safety_ErrAck AT%Q* :BOOL;
+	//VpwStoEstopRestart
+	Safety_VPW_STO_EStop_Restart AT%Q* :BOOL;
+	//Res12StoEstopRestart
+	Safety_RES1_2_STO_EStop_Restart AT%Q* :BOOL;
+	//Res34StoEstopRestart
+	Safety_RES3_4_STO_EStop_Restart AT%Q* :BOOL;
+	//PlatingCell12Sto1EstopRestart
+	Safety_PlatingCell1_2_STO_1_EStop_Restart AT%Q* :BOOL;
+	//PlatingCell12Sto2EstopRestart
+	Safety_PlatingCell1_2_STO_2_EStop_Restart AT%Q* :BOOL;
+	//PlatingCell34Sto1EstopRestart
+	Safety_PlatingCell3_4_STO_1_EStop_Restart AT%Q* :BOOL;
+	//PlatingCell34Sto2EstopRestart
+	Safety_PlatingCell3_4_STO_2_EStop_Restart AT%Q* :BOOL;
+	//FacilityStoEstopRestart
+	Safety_Facility_STO_EStop_Restart AT%Q* :BOOL;
+	//SrdStoEstopRestart
+	Safety_SRD_STO_EStop_Restart AT%Q* :BOOL;
+	//ReqAlignerDoorLock
+	Safety_ReqAlignerDoorsLock AT%Q* :BOOL;
+	//ReqCassetteDoorsLock
+	Safety_ReqCassetteDoorsLock AT%Q* :BOOL;
+	//ReqCell12DoorsLock
+	Safety_ReqCell1_2DoorsLock AT%Q* :BOOL;
+	//ReqCell34DoorsLock
+	Safety_ReqCell3_4DoorsLock AT%Q* :BOOL;
+
+
 	//VPW1 Rotation Status word
 	VPW1RotationStatusWord AT%I* :UINT;
 	//VPW1 Rotation digital inputs
@@ -247,7 +356,39 @@ END_IF
 
 IF VPW_PNEU_SMC_EX260_BYTE0.5=FALSE AND VPW_PNEU_SMC_EX260_BYTE0.6=FALSE AND VPW_PNEU_SMC_EX260_BYTE0.7=FALSE THEN
 	VPW_AI_8CHANNEL_4_20mA_EL3058_N102_3:=0;
-END_IF]]></ST>
+END_IF
+
+//safety lock 
+IF Safety_ReqAlignerDoorsLock=TRUE THEN
+	Safety_SDI_CHANNEL_EL1904_NS101_1:=TRUE;
+ELSE
+ 	Safety_SDI_CHANNEL_EL1904_NS101_1:=FALSE;
+END_IF
+
+IF Safety_ReqCassetteDoorsLock=TRUE THEN
+	Safety_SDI_CHANNEL_EL1904_NS101_2:=TRUE;
+	Safety_SDI_CHANNEL_EL1904_NS101_3:=TRUE;
+ELSE
+ 	Safety_SDI_CHANNEL_EL1904_NS101_2:=FALSE;
+	Safety_SDI_CHANNEL_EL1904_NS101_3:=FALSE;
+END_IF
+
+IF Safety_ReqCell1_2DoorsLock=TRUE THEN
+	Safety_SDI_CHANNEL_EL1904_NS100_1:=TRUE;
+	Safety_SDI_CHANNEL_EL1904_NS100_2:=TRUE;
+ELSE
+ 	Safety_SDI_CHANNEL_EL1904_NS100_1:=FALSE;
+	Safety_SDI_CHANNEL_EL1904_NS100_2:=FALSE;
+END_IF
+
+IF Safety_ReqCell3_4DoorsLock=TRUE THEN
+	Safety_SDI_CHANNEL_EL1904_NS100_3:=TRUE;
+	Safety_SDI_CHANNEL_EL1904_NS100_4:=TRUE;
+ELSE
+ 	Safety_SDI_CHANNEL_EL1904_NS100_3:=FALSE;
+	Safety_SDI_CHANNEL_EL1904_NS100_4:=FALSE;
+END_IF
+]]></ST>
     </Implementation>
     <LineIds Name="MAIN">
       <LineId Id="52" Count="5" />
@@ -277,6 +418,27 @@ END_IF]]></ST>
       <LineId Id="438" Count="0" />
       <LineId Id="443" Count="14" />
       <LineId Id="442" Count="0" />
+      <LineId Id="689" Count="0" />
+      <LineId Id="688" Count="0" />
+      <LineId Id="693" Count="1" />
+      <LineId Id="696" Count="1" />
+      <LineId Id="691" Count="0" />
+      <LineId Id="701" Count="2" />
+      <LineId Id="718" Count="0" />
+      <LineId Id="704" Count="1" />
+      <LineId Id="719" Count="0" />
+      <LineId Id="700" Count="0" />
+      <LineId Id="707" Count="2" />
+      <LineId Id="720" Count="0" />
+      <LineId Id="710" Count="1" />
+      <LineId Id="721" Count="0" />
+      <LineId Id="706" Count="0" />
+      <LineId Id="713" Count="2" />
+      <LineId Id="722" Count="0" />
+      <LineId Id="716" Count="1" />
+      <LineId Id="723" Count="0" />
+      <LineId Id="712" Count="0" />
+      <LineId Id="690" Count="0" />
     </LineIds>
   </POU>
 </TcPlcObject>

+ 12 - 5
PunkHPX8_UI/Config/UIMenu.json

@@ -42,7 +42,7 @@
 		"Id": "HardWare",
 		"Name": "HardWare",
 		"IsShow": "true",
-		"MenuItem": [			
+		"MenuItem": [
 			{
 				"Id": "LinMots",
 				"Name": "LinMots",
@@ -158,7 +158,7 @@
 						"View": "CMMPowerSupplierView"
 					}
 				]
-			},			
+			},
 			{
 				"Id": "SRD",
 				"Name": "SRD",
@@ -260,7 +260,7 @@
 						"IsShow": "true",
 						"View": "PrewetHomePageView"
 					},
-					
+
 					{
 						"Id": "Rinse4",
 						"ModuleName": "Rinse4",
@@ -269,7 +269,7 @@
 						"IsShow": "true",
 						"View": "RinseHomePageView"
 					},
-					
+
 					{
 						"Id": "Rinse3",
 						"ModuleName": "Rinse3",
@@ -278,7 +278,7 @@
 						"IsShow": "true",
 						"View": "RinseHomePageView"
 					},
-					
+
 					{
 						"Id": "Rinse2",
 						"ModuleName": "Rinse2",
@@ -303,6 +303,13 @@
 				"IsShow": "true",
 				"IsInit": "true",
 				"View": "SystemFacilitiesView"
+			},
+			{
+				"Id": "SystemSafety",
+				"Name": "Safety",
+				"IsShow": "true",
+				"IsInit": "true",
+				"View": "SystemSafetyView"
 			}
 		]
 	},

+ 14 - 0
PunkHPX8_UI/Config/UIMenu_permission.json

@@ -214,7 +214,13 @@
 					{
 						"MenuName": "Facilities",
 						"Permission": 2
+					},
+					{
+						"MenuName": "Safety",
+						"Permission": 2
 					}
+					
+					
 				]
 			},
 			{
@@ -820,6 +826,10 @@
 					{
 						"MenuName": "Facilities",
 						"Permission": 2
+					},
+					{
+						"MenuName": "Safety",
+						"Permission": 2
 					}
 				]
 			},
@@ -1152,6 +1162,10 @@
 					{
 						"MenuName": "Facilities",
 						"Permission": 2
+					},
+					{
+						"MenuName": "Safety",
+						"Permission": 2
 					}
 				]
 			},