浏览代码

add X8 EfemRobot

chenkui 4 月之前
父节点
当前提交
388b234daf

+ 3 - 0
CyberX8_Core/DeviceName.cs

@@ -12,6 +12,7 @@ namespace CyberX8_Core
 
     public enum EfemOperation
     {
+        None,
         Home,
         //HomeLP,
         Pick,
@@ -21,6 +22,8 @@ namespace CyberX8_Core
         PlaceExtend,
         PlaceRetract,
         Goto,
+        GotoMap,
+        RequestMapResult,
         Extend,
         Retract,
         Align,

+ 26 - 22
CyberX8_RT/Config/Devices/FestoControllerCfg.xml

@@ -1,25 +1,29 @@
 <?xml version="1.0" encoding="utf-8"?>
 <FestoControllerConfig>
-  <FestoDeviceConfig Name="Festo0" IpAddress="10.0.0.42" Port="502" SendTimeout="2000" RecvTimeout="2000" DIStartAddress="45395" Channel="1"> 
-    <DO Name="c_LOADERA_TRANS_HIGH"  Address="40003" Invert="false" Bit="0"/>
-	<DO Name="c_LOADERA_BERNOULLI_BLADDER"  Address="40003" Invert="false" Bit="2"/>
-	<DO Name="Festo0.DO2"  Address="40003" Invert="false" Bit="4"/>
-	<DO Name="Festo0.DO3"  Address="40003" Invert="false" Bit="6"/>
-	<DO Name="c_LOADERA_WS_BLADDER"  Address="40004" Invert="false" Bit="0"/>
-	<DO Name="c_LOADERA_TRANS_BLADDER"  Address="40004" Invert="false" Bit="1"/>
-	<DO Name="Festo0.DO10" Address="40004" Invert="false" Bit="2"/>
-	<DO Name="Festo0.DO11" Address="40004" Invert="false" Bit="3"/>
-	<DO Name="Festo0.DO12" Address="40004" Invert="false" Bit="4"/>
-	<DO Name="Festo0.DO13" Address="40004" Invert="false" Bit="5"/>
-	<DO Name="Festo0.DO14" Address="40004" Invert="false" Bit="6"/>
-	<DO Name="Festo0.DO15" Address="40004" Invert="false" Bit="7"/>
-	<DO Name="c_LOADERB_WS_BLADDER" Address="40005" Invert="false" Bit="0"/>
-	<DO Name="c_LOADERB_TRANS_BLADDER" Address="40005" Invert="false" Bit="1"/>
-	<DO Name="Festo0.DO18" Address="40005" Invert="false" Bit="2"/>
-	<DO Name="Festo0.DO19" Address="40005" Invert="false" Bit="3"/>
-	<DO Name="Festo0.DO20" Address="40005" Invert="false" Bit="4"/>
-	<DO Name="Festo0.DO21" Address="40005" Invert="false" Bit="5"/>
-	<DO Name="Festo0.DO22" Address="40005" Invert="false" Bit="6"/>
-	<DO Name="Festo0.DO23" Address="40005" Invert="false" Bit="7"/>	
-  </FestoDeviceConfig>
+	<FestoDeviceConfig Name="Festo3" IpAddress="10.0.0.42" Port="502" SendTimeout="2000" RecvTimeout="2000" DIStartAddress="45395" Channel="1">
+		<DO Name="c_Transporter_Clamp"  Address="40003" Invert="false" Bit="0"/>
+		<DO Name="Festo.DO1" Address="40003" Invert="false" Bit="1"/>
+		<DO Name="c_Transporter2_Clamp"  Address="40003" Invert="false" Bit="2"/>
+		<DO Name="Festo.DO3" Address="40003" Invert="false" Bit="3"/>
+		<DO Name="c_Cathode_Clamp" Address="40003" Invert="false" Bit="4"/>
+		<DO Name="Festo.DO5" Address="40003" Invert="false" Bit="5"/>
+		<DO Name="c_Flow_Test_Clamp" Address="40003" Invert="false" Bit="6"/>
+		<DO Name="Festo.DO7" Address="40003" Invert="false" Bit="7"/>
+		<DO Name="c_LOADERA_WS_BLADDER"  Address="40004" Invert="false" Bit="0"/>
+		<DO Name="c_LOADERB_WS_BLADDER"  Address="40004" Invert="false" Bit="1"/>
+		<DO Name="c_LOADERA_BERNOULLI_BLADDER" Address="40004" Invert="false" Bit="2"/>
+		<DO Name="c_LOADERB_BERNOULLI_BLADDER" Address="40004" Invert="false" Bit="3"/>
+		<DO Name="c_LoaderA_LS_Vacuum" Address="40004" Invert="true" Bit="4"/>
+		<DO Name="c_LoaderB_LS_Vacuum" Address="40004" Invert="true" Bit="5"/>
+		<DO Name="c_DPUF_A_CHUCK_A_RELEASE" Address="40004" Invert="true" Bit="6"/>
+		<DO Name="c_DPUF_A_CHUCK_B_RELEASE" Address="40004" Invert="true" Bit="7"/>
+		<DO Name="Festo.DO16" Address="40005" Invert="false" Bit="0"/>
+		<DO Name="Fest3.DO17" Address="40005" Invert="false" Bit="1"/>
+		<DO Name="c_LOADERA_BERNOULLI_N2" Address="40005" Invert="false" Bit="2"/>
+		<DO Name="c_LOADERB_BERNOULLI_N2" Address="40005" Invert="false" Bit="3"/>
+		<DO Name="Festo.DO20" Address="40005" Invert="false" Bit="4"/>
+		<DO Name="Festo.DO21" Address="40005" Invert="false" Bit="5"/>
+		<DO Name="Festo.DO22" Address="40005" Invert="false" Bit="6"/>
+		<DO Name="Festo.DO23" Address="40005" Invert="false" Bit="7"/>
+	</FestoDeviceConfig>
 </FestoControllerConfig>

+ 147 - 122
CyberX8_RT/Config/Devices/ModuleIOCfg.xml

@@ -1,74 +1,99 @@
 <?xml version="1.0" encoding="utf-8"?>
 <BeckhoffModuleIOCfg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <Module Name="PUF1">
-    <IO Name="PUF1.ChuckAVac" IOName="r_DPUF_A_CHUCK_A_VAC" />
-    <IO Name="PUF1.ChuckBVac" IOName="r_DPUF_A_CHUCK_B_VAC" />
-    <IO Name="PUF1.ChuckARelease" IOName="c_DPUF_A_CHUCK_A_RELEASE" />
-    <IO Name="PUF1.ChuckBRelease" IOName="c_DPUF_A_CHUCK_B_RELEASE" />
-    <IO Name="PUF1.DistanceSensor1" IOName="r_DPUF_A_CHUCK_A_WFER_SNS_1" />
-    <IO Name="PUF1.DistanceSensor2" IOName="r_DPUF_A_CHUCK_A_WFER_SNS_2" />
-  </Module>
-  <Module Name="PUF2">
-    <IO Name="PUF2.ChuckAVac" IOName="r_DPUF_B_CHUCK_A_VAC" />
-    <IO Name="PUF2.ChuckBVac" IOName="r_DPUF_B_CHUCK_B_VAC" />
-    <IO Name="PUF2.ChuckARelease" IOName="c_DPUF_B_CHUCK_A_RELEASE" />
-    <IO Name="PUF2.ChuckBRelease" IOName="c_DPUF_B_CHUCK_B_RELEASE" />
-    <IO Name="PUF2.DistanceSensor1" IOName="r_DPUF_B_CHUCK_A_WFER_SNS_1" />
-    <IO Name="PUF2.DistanceSensor2" IOName="r_DPUF_B_CHUCK_A_WFER_SNS_2" />
-  </Module>
-   <Module Name="Loader1">
-    <IO Name="Loader1.SideA.WaferPresent" IOName="r_LoaderA_Wafer_Present" />
-    <IO Name="Loader1.SideA.DoorUnlock" IOName="c_LOADERA_DOOR_UNLOCK" />
-    <IO Name="Loader1.SideA.DoorUpperLocked" IOName="r_LOADERA_DOOR_UPPER_LOCKED" />
-    <IO Name="Loader1.SideA.DoorUpperUnlocked" IOName="r_LOADERA_DOOR_UPPER_UNLOCKED" />
-    <IO Name="Loader1.SideA.DoorLowerLocked" IOName="r_LOADERA_DOOR_LOWER_LOCKED" />
-    <IO Name="Loader1.SideA.DoorLowerUnlocked" IOName="r_LOADERA_DOOR_LOWER_UNLOCKED" />
-    <IO Name="Loader1.SideA.TransRetracted" IOName="r_LOADERA_TRANSLATION_RETRACTED" />
-    <IO Name="Loader1.SideA.BernoulliExtended" IOName="r_LOADERA_BERNOULLI_EXTENDED" />
-    <IO Name="Loader1.SideA.CRSVacuumValue" IOName="r_LoaderA_LS_Vacuum_anlg" />
-    <IO Name="Loader1.SideA.WHBladderPressure" IOName="r_LOADERA_WS_BLADDER_PRESSURE" />
-    <IO Name="Loader1.SideA.TransPressure" IOName="r_LOADERA_TRANSLATION_PRESSURE" />
-    <IO Name="Loader1.SideA.BernoulliPressure" IOName="r_LOADERA_BERNOULLI_PRESSURE" />
-    <IO Name="Loader1.SideA.BernoulliBladderPressure" IOName="r_LOADERA_CHUCK_BLADDER" />
-    <IO Name="Loader1.SideA.CRSVacuum" IOName="c_LoaderA_LS_Vacuum" />	
-    <IO Name="Loader1.SideA.WHBladder" IOName="c_LOADERA_WS_BLADDER" />	
-    <IO Name="Loader1.SideA.TransBladder" IOName="c_LOADERA_TRANS_BLADDER" />	
-    <IO Name="Loader1.SideA.TransHigh" IOName="c_LOADERA_TRANS_HIGH" />	
-    <IO Name="Loader1.SideA.BernoulliBladder" IOName="c_LOADERA_BERNOULLI_BLADDER" />	
-    <IO Name="Loader1.SideA.BernoulliN2" IOName="c_LOADERA_BERNOULLI_N2" />	
-    <IO Name="Loader1.SideA.BernoulliN2Second" IOName="c_LOADERA_BERNOULLI_N2_SECOND" />	
-    <IO Name="Loader1.SideB.WaferPresent" IOName="r_LoaderB_Wafer_Present" />
-    <IO Name="Loader1.SideB.DoorUpperLocked" IOName="r_LOADERB_DOOR_UPPER_LOCKED" />
-    <IO Name="Loader1.SideB.DoorUpperUnlocked" IOName="r_LOADERB_DOOR_UPPER_UNLOCKED" />	
-    <IO Name="Loader1.SideB.DoorLowerLocked" IOName="r_LOADERB_DOOR_LOWER_LOCKED" />	
-    <IO Name="Loader1.SideB.DoorLowerUnlocked" IOName="r_LOADERB_DOOR_LOWER_UNLOCKED" />	
-    <IO Name="Loader1.SideB.TransRetracted" IOName="r_LOADERB_TRANSLATION_RETRACTED" />	
-    <IO Name="Loader1.SideB.BernoulliExtended" IOName="r_LOADERB_BERNOULLI_EXTENDED" />	
-    <IO Name="Loader1.SideB.CRSVacuumValue" IOName="r_LoaderB_LS_Vacuum_anlg" />
-    <IO Name="Loader1.SideB.WHBladderPressure" IOName="r_LOADERB_WS_BLADDER_PRESSURE" />
-    <IO Name="Loader1.SideB.TransPressure" IOName="r_LOADERB_TRANSLATION_PRESSURE" />		
-    <IO Name="Loader1.SideB.BernoulliPressure" IOName="r_LOADERB_BERNOULLI_PRESSURE" />	
-    <IO Name="Loader1.SideB.BernoulliBladderPressure" IOName="r_LOADERB_CHUCK_BLADDER" />	
-    <IO Name="Loader1.SideB.DoorUnlock" IOName="c_LOADERB_DOOR_UNLOCK" />	
-    <IO Name="Loader1.SideB.CRSVacuum" IOName="c_LoaderB_LS_Vacuum" />	
-    <IO Name="Loader1.SideB.WHBladder" IOName="c_LOADERB_WS_BLADDER" />	
-    <IO Name="Loader1.SideB.TransBladder" IOName="c_LOADERB_TRANS_BLADDER" />	
-    <IO Name="Loader1.SideB.TransHigh" IOName="c_LOADERB_TRANS_HIGH" />	
-    <IO Name="Loader1.SideB.BernoulliBladder" IOName="c_LOADERB_BERNOULLI_BLADDER" />	
-    <IO Name="Loader1.SideB.BernoulliN2" IOName="c_LOADERB_BERNOULLI_N2" />	
-    <IO Name="Loader1.SideB.BernoulliN2Second" IOName="c_LOADERB_BERNOULLI_N2_SECOND" />	
-    <IO Name="Loader1.WaferHolderPresent" IOName="r_Cathode_Present" />	
-    <IO Name="Loader1.DripTrayFluid" IOName="r_DRIP_TRAY_FLUID_DETECTION" />	
-    <IO Name="Loader1.WaferHolderClamp" IOName="c_Cathode_Clamp" />	
-    <IO Name="Loader1.WSSideABClamp" IOName="c_WAFER_HOLDER_CLAMPED" />	
-    <IO Name="Loader1.SideAWaferHolderClamp" IOName="r_LOADERA_WS_LOCKED" />
-    <IO Name="Loader1.SideBWaferHolderClamp" IOName="r_LOADERB_WS_LOCKED" />
-    <IO Name="Loader1.LeakFlow" IOName="r_LOADER_GasFlowSensor_FLOW" />
-    <IO Name="Loader1.LeakVacuumValue" IOName="r_LOADER_GasFlowSensor_VACUUM" />
-    <IO Name="Loader1.LeakFlowClamp" IOName="c_Flow_Test_Clamp" />
-    <IO Name="Loader1.LeakVacuum" IOName="c_VACUUM_TEST" />
-  </Module>
-  <Module Name="Facilities">
+	<Module Name="LP1">
+		<IO Name="LP1.Cassete200Present" IOName="r_Cassette_1_200"/>
+		<IO Name="LP1.Cassete150Present" IOName="r_Cassette_1_150"/>
+		<IO Name="LP1.Cassete100Present" IOName="r_Cassette_1_100"/>
+	</Module>
+	<Module Name="LP2">
+		<IO Name="LP2.Cassete200Present" IOName="r_Cassette_2_200"/>
+		<IO Name="LP2.Cassete150Present" IOName="r_Cassette_2_150"/>
+		<IO Name="LP2.Cassete100Present" IOName="r_Cassette_2_100"/>
+	</Module>
+	<Module Name="LP3">
+		<IO Name="LP3.Cassete200Present" IOName="r_Cassette_3_200"/>
+		<IO Name="LP3.Cassete150Present" IOName="r_Cassette_3_150"/>
+		<IO Name="LP3.Cassete100Present" IOName="r_Cassette_3_100"/>
+	</Module>
+	<Module Name="Dummy1">
+		<IO Name="Dummy1.Cassete200Present" IOName="r_Dummy_1_200"/>
+		<IO Name="Dummy1.Cassete150Present" IOName="r_Dummy_1_150"/>
+		<IO Name="Dummy1.Cassete100Present" IOName="r_Dummy_1_100"/>
+	</Module>
+	<Module Name="Dummy2">
+		<IO Name="Dummy2.Cassete200Present" IOName="r_Dummy_2_200"/>
+		<IO Name="Dummy2.Cassete150Present" IOName="r_Dummy_2_150"/>
+		<IO Name="Dummy2.Cassete100Present" IOName="r_Dummy_2_100"/>
+	</Module>
+	<Module Name="PUF1">
+	<IO Name="PUF1.ChuckAVac" IOName="r_DPUF_A_CHUCK_A_VAC" />
+	<IO Name="PUF1.ChuckBVac" IOName="r_DPUF_A_CHUCK_B_VAC" />
+	<IO Name="PUF1.ChuckARelease" IOName="c_DPUF_A_CHUCK_A_RELEASE" />
+	<IO Name="PUF1.ChuckBRelease" IOName="c_DPUF_A_CHUCK_B_RELEASE" />
+	<IO Name="PUF1.DistanceSensor1" IOName="r_DPUF_A_CHUCK_A_WFER_SNS_1" />
+	<IO Name="PUF1.DistanceSensor2" IOName="r_DPUF_A_CHUCK_A_WFER_SNS_2" />
+	</Module>
+	<Module Name="PUF2">
+	<IO Name="PUF2.ChuckAVac" IOName="r_DPUF_B_CHUCK_A_VAC" />
+	<IO Name="PUF2.ChuckBVac" IOName="r_DPUF_B_CHUCK_B_VAC" />
+	<IO Name="PUF2.ChuckARelease" IOName="c_DPUF_B_CHUCK_A_RELEASE" />
+	<IO Name="PUF2.ChuckBRelease" IOName="c_DPUF_B_CHUCK_B_RELEASE" />
+	<IO Name="PUF2.DistanceSensor1" IOName="r_DPUF_B_CHUCK_A_WFER_SNS_1" />
+	<IO Name="PUF2.DistanceSensor2" IOName="r_DPUF_B_CHUCK_A_WFER_SNS_2" />
+	</Module>
+	<Module Name="Loader1">
+	<IO Name="Loader1.SideA.WaferPresent" IOName="r_LoaderA_Wafer_Present" />
+	<IO Name="Loader1.SideA.DoorUnlock" IOName="c_LOADERA_DOOR_UNLOCK" />
+	<IO Name="Loader1.SideA.DoorUpperLocked" IOName="r_LOADERA_DOOR_UPPER_LOCKED" />
+	<IO Name="Loader1.SideA.DoorUpperUnlocked" IOName="r_LOADERA_DOOR_UPPER_UNLOCKED" />
+	<IO Name="Loader1.SideA.DoorLowerLocked" IOName="r_LOADERA_DOOR_LOWER_LOCKED" />
+	<IO Name="Loader1.SideA.DoorLowerUnlocked" IOName="r_LOADERA_DOOR_LOWER_UNLOCKED" />
+	<IO Name="Loader1.SideA.TransRetracted" IOName="r_LOADERA_TRANSLATION_RETRACTED" />
+	<IO Name="Loader1.SideA.BernoulliExtended" IOName="r_LOADERA_BERNOULLI_EXTENDED" />
+	<IO Name="Loader1.SideA.CRSVacuumValue" IOName="r_LoaderA_LS_Vacuum_anlg" />
+	<IO Name="Loader1.SideA.WHBladderPressure" IOName="r_LOADERA_WS_BLADDER_PRESSURE" />
+	<IO Name="Loader1.SideA.TransPressure" IOName="r_LOADERA_TRANSLATION_PRESSURE" />
+	<IO Name="Loader1.SideA.BernoulliPressure" IOName="r_LOADERA_BERNOULLI_PRESSURE" />
+	<IO Name="Loader1.SideA.BernoulliBladderPressure" IOName="r_LOADERA_CHUCK_BLADDER" />
+	<IO Name="Loader1.SideA.CRSVacuum" IOName="c_LoaderA_LS_Vacuum" />	
+	<IO Name="Loader1.SideA.WHBladder" IOName="c_LOADERA_WS_BLADDER" />	
+	<IO Name="Loader1.SideA.TransBladder" IOName="c_LOADERA_TRANS_BLADDER" />	
+	<IO Name="Loader1.SideA.TransHigh" IOName="c_LOADERA_TRANS_HIGH" />	
+	<IO Name="Loader1.SideA.BernoulliBladder" IOName="c_LOADERA_BERNOULLI_BLADDER" />	
+	<IO Name="Loader1.SideA.BernoulliN2" IOName="c_LOADERA_BERNOULLI_N2" />	
+	<IO Name="Loader1.SideA.BernoulliN2Second" IOName="c_LOADERA_BERNOULLI_N2_SECOND" />	
+	<IO Name="Loader1.SideB.WaferPresent" IOName="r_LoaderB_Wafer_Present" />
+	<IO Name="Loader1.SideB.DoorUpperLocked" IOName="r_LOADERB_DOOR_UPPER_LOCKED" />
+	<IO Name="Loader1.SideB.DoorUpperUnlocked" IOName="r_LOADERB_DOOR_UPPER_UNLOCKED" />	
+	<IO Name="Loader1.SideB.DoorLowerLocked" IOName="r_LOADERB_DOOR_LOWER_LOCKED" />	
+	<IO Name="Loader1.SideB.DoorLowerUnlocked" IOName="r_LOADERB_DOOR_LOWER_UNLOCKED" />	
+	<IO Name="Loader1.SideB.TransRetracted" IOName="r_LOADERB_TRANSLATION_RETRACTED" />	
+	<IO Name="Loader1.SideB.BernoulliExtended" IOName="r_LOADERB_BERNOULLI_EXTENDED" />	
+	<IO Name="Loader1.SideB.CRSVacuumValue" IOName="r_LoaderB_LS_Vacuum_anlg" />
+	<IO Name="Loader1.SideB.WHBladderPressure" IOName="r_LOADERB_WS_BLADDER_PRESSURE" />
+	<IO Name="Loader1.SideB.TransPressure" IOName="r_LOADERB_TRANSLATION_PRESSURE" />		
+	<IO Name="Loader1.SideB.BernoulliPressure" IOName="r_LOADERB_BERNOULLI_PRESSURE" />	
+	<IO Name="Loader1.SideB.BernoulliBladderPressure" IOName="r_LOADERB_CHUCK_BLADDER" />	
+	<IO Name="Loader1.SideB.DoorUnlock" IOName="c_LOADERB_DOOR_UNLOCK" />	
+	<IO Name="Loader1.SideB.CRSVacuum" IOName="c_LoaderB_LS_Vacuum" />	
+	<IO Name="Loader1.SideB.WHBladder" IOName="c_LOADERB_WS_BLADDER" />	
+	<IO Name="Loader1.SideB.TransBladder" IOName="c_LOADERB_TRANS_BLADDER" />	
+	<IO Name="Loader1.SideB.TransHigh" IOName="c_LOADERB_TRANS_HIGH" />	
+	<IO Name="Loader1.SideB.BernoulliBladder" IOName="c_LOADERB_BERNOULLI_BLADDER" />	
+	<IO Name="Loader1.SideB.BernoulliN2" IOName="c_LOADERB_BERNOULLI_N2" />	
+	<IO Name="Loader1.SideB.BernoulliN2Second" IOName="c_LOADERB_BERNOULLI_N2_SECOND" />	
+	<IO Name="Loader1.WaferHolderPresent" IOName="r_Cathode_Present" />	
+	<IO Name="Loader1.DripTrayFluid" IOName="r_DRIP_TRAY_FLUID_DETECTION" />	
+	<IO Name="Loader1.WaferHolderClamp" IOName="c_Cathode_Clamp" />	
+	<IO Name="Loader1.WSSideABClamp" IOName="c_WAFER_HOLDER_CLAMPED" />	
+	<IO Name="Loader1.SideAWaferHolderClamp" IOName="r_LOADERA_WS_LOCKED" />
+	<IO Name="Loader1.SideBWaferHolderClamp" IOName="r_LOADERB_WS_LOCKED" />
+	<IO Name="Loader1.LeakFlow" IOName="r_LOADER_GasFlowSensor_FLOW" />
+	<IO Name="Loader1.LeakVacuumValue" IOName="r_LOADER_GasFlowSensor_VACUUM" />
+	<IO Name="Loader1.LeakFlowClamp" IOName="c_Flow_Test_Clamp" />
+	<IO Name="Loader1.LeakVacuum" IOName="c_VACUUM_TEST" />
+	</Module>
+	<Module Name="Facilities">
 	<IO Name="Facilities.N2Enable" IOName="c_N2_ENABLE"/>
 	<IO Name="Facilities.CDAEnable" IOName="c_CDA_ENABLE"/>
 	<IO Name="Facilities.ExternalCDAEnable" IOName="c_EXTERNAL_CDA_ENABLE"/>
@@ -102,8 +127,8 @@
 	<IO Name="Facilities.ArsFluidDetect" IOName="r_SLIPSTREAM_FLUID_PRESENT"/>
 	<IO Name="Facilities.ProcessFluidDetect" IOName="r_CONTAINMENT_FLUID"/>
 	<IO Name="Facilities.SampleFluidDetect" IOName="r_SAMPLE_SYS_FLUID_PRESENT"/>
-  </Module>
-  <Module Name="Transporter2">
+	</Module>
+	<Module Name="Transporter2">
 	<IO Name="Transporter2.Unlock" IOName="c_ENCLOSED_TRANSPORT2_UNLOCK_SOLENOID"/> 
 	<IO Name="Transporter2.Locked1" IOName="r_ENCLOSED_TRANSPORT2_WS_LOCKED_1"/> 
 	<IO Name="Transporter2.Locked2" IOName="r_ENCLOSED_TRANSPORT2_WS_LOCKED_2"/> 
@@ -119,8 +144,8 @@
 	<IO Name="Transporter2.ReadyToLock2" IOName="r_ENCLOSED_TRANSPORT2_WS_READY_TO_LOCK_2"/> 
 	<IO Name="Transporter2.WhPresent1" IOName="r_ENCLOSED_TRANSPORT2_WS_PRESENT_1"/> 
 	<IO Name="Transporter2.WhPresent2" IOName="r_ENCLOSED_TRANSPORT2_WS_PRESENT_2"/> 
-  </Module>
-  <Module Name="Transporter1">
+	</Module>
+	<Module Name="Transporter1">
 	<IO Name="Transporter1.Unlock" IOName="c_ENCLOSED_TRANSPORT_UNLOCK_SOLENOID"/>  
 	<IO Name="Transporter1.Unlocked1" IOName="r_ENCLOSED_TRANSPORT_WS_UNLOCKED_1"/> 
 	<IO Name="Transporter1.Locked2" IOName="r_ENCLOSED_TRANSPORT_WS_LOCKED_2"/> 
@@ -136,12 +161,12 @@
 	<IO Name="Transporter1.ReadyToLock2" IOName="r_ENCLOSED_TRANSPORT_WS_READY_TO_LOCK_2"/> 
 	<IO Name="Transporter1.WhPresent1" IOName="r_ENCLOSED_TRANSPORT_WS_PRESENT_1"/> 
 	<IO Name="Transporter1.WhPresent2" IOName="r_ENCLOSED_TRANSPORT_WS_PRESENT_2"/> 
-  </Module>
-  <Module Name="SRD">
+	</Module>
+	<Module Name="SRD">
 	<IO Name="SRD.FluidContainment" IOName="r_SRD_FLUID_CONTAINMENT"/> 
 	<IO Name="SRD.WaterPressure" IOName="r_SRD_SUPPLY_WATER_PRESS"/>  
-  </Module>
-  <Module Name="SRD1">
+	</Module>
+	<Module Name="SRD1">
 	<IO Name="SRD1.VacuumValue" IOName="r_SRD1_CHUCK_VACUUM_anlg"/>  
 	<IO Name="SRD1.WaferPresence" IOName="r_SRD1_WAFER_PRESENT_anlg"/>  
 	<IO Name="SRD1.DoorClose" IOName="c_SRD1_Shutter_Close"/>  
@@ -151,8 +176,8 @@
 	<IO Name="SRD1.WaterBelow" IOName="c_SRD1_Water_Below_Wafer"/>  
 	<IO Name="SRD1.ChuckVacuum" IOName="c_SRD1_CHUCK_VACUUM"/>  
 	<IO Name="SRD1.ExhaustOn" IOName="c_SRD1_Exhaust_Fan_On"/>  
-  </Module>
-  <Module Name="SRD2">
+	</Module>
+	<Module Name="SRD2">
 	<IO Name="SRD2.VacuumValue" IOName="r_SRD2_CHUCK_VACUUM_anlg"/>  
 	<IO Name="SRD2.WaferPresence" IOName="r_SRD2_WAFER_PRESENT_anlg"/>  
 	<IO Name="SRD2.DoorClose" IOName="c_SRD2_Shutter_Close"/>  
@@ -162,18 +187,18 @@
 	<IO Name="SRD2.WaterBelow" IOName="c_SRD2_Water_Below_Wafer"/>  
 	<IO Name="SRD2.ChuckVacuum" IOName="c_SRD2_CHUCK_VACUUM"/>  
 	<IO Name="SRD2.ExhaustOn" IOName="c_SRD2_Exhaust_Fan_On"/> 
-  </Module>
-  <Module Name="Dryer1">
+	</Module>
+	<Module Name="Dryer1">
 	<IO Name="Dryer1.ExhaustPressure" IOName="r_HVD_1_ANALOG"/>
 	<IO Name="Dryer1.PowerControl" IOName="c_HVD_1_ENABLE"/>
 	<IO Name="Dryer1.BlowerHigh" IOName="c_HVD_1_HIGH"/>
-  </Module>
-  <Module Name="Dryer2">
+	</Module>
+	<Module Name="Dryer2">
 	<IO Name="Dryer2.ExhaustPressure" IOName="r_HVD_2_ANALOG"/>
 	<IO Name="Dryer2.PowerControl" IOName="c_HVD_2_ENABLE"/>
 	<IO Name="Dryer2.BlowerHigh" IOName="c_HVD_2_HIGH"/>
-  </Module>
-  <Module Name="Prewet1">
+	</Module>
+	<Module Name="Prewet1">
 	<IO Name="Prewet1.PumpValve" IOName="c_SPW1_LEV_PUMP_VALVE"/>
 	<IO Name="Prewet1.PumpCurrent" IOName="r_SPW1_LEV_PUMP_CURRENT"/>
 	<IO Name="Prewet1.PumpEnable" IOName="c_SPW1_LEV_PUMP_ENB"/>
@@ -181,8 +206,8 @@
 	<IO Name="Prewet1.PumpFlow" IOName="r_SPW1_LEV_PUMP_FLOW"/>
 	<IO Name="Prewet1.PumpPressure" IOName="r_SPW1_LEV_PUMP_PRES"/>
 	<IO Name="Prewet1.PumpSpeed" IOName="c_SPW1_LEV_PUMP_SPEED"/>
-  </Module>
-  <Module Name="Safety">
+	</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"/>
@@ -266,66 +291,66 @@
 	<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"/>
-  </Module>
-  <Module Name="Rinse1">
+	</Module>
+	<Module Name="Rinse1">
 	<IO Name="Rinse1.WaterLevel" IOName="r_QDRD1_WATER_LEVEL"/>
 	<IO Name="Rinse1.WaferHolderClamp" IOName="c_QDRD1_WS_CLAMP"/>
 	<IO Name="Rinse1.N2Valve" IOName="c_QDRD1_LO_PRESSURE"/>
 	<IO Name="Rinse1.FillValve" IOName="c_QDRD1_DI_FILL"/>
 	<IO Name="Rinse1.DrainValve" IOName="c_QDRD1_DUMP"/>
 	<IO Name="Rinse1.WasteValve" IOName="c_QDRD1_MDRAIN"/>
-  </Module>  
-  <Module Name="Rinse2">
+	</Module>  
+	<Module Name="Rinse2">
 	<IO Name="Rinse2.WaterLevel" IOName="r_QDRD2_WATER_LEVEL"/>
 	<IO Name="Rinse2.WaferHolderClamp" IOName="c_QDRD2_WS_CLAMP"/>
 	<IO Name="Rinse2.N2Valve" IOName="c_QDRD2_LO_PRESSURE"/>
 	<IO Name="Rinse2.FillValve" IOName="c_QDRD2_DI_FILL"/>
 	<IO Name="Rinse2.DrainValve" IOName="c_QDRD2_DUMP"/>
 	<IO Name="Rinse2.WasteValve" IOName="c_QDRD2_MDRAIN"/>
-  </Module>
+	</Module>
   
-  <Module Name="Rinse3">
+	<Module Name="Rinse3">
 	<IO Name="Rinse3.WaterLevel" IOName="r_QDRD3_WATER_LEVEL"/>
 	<IO Name="Rinse3.WaferHolderClamp" IOName="c_QDRD3_WS_CLAMP"/>
 	<IO Name="Rinse3.N2Valve" IOName="c_QDRD3_LO_PRESSURE"/>
 	<IO Name="Rinse3.FillValve" IOName="c_QDRD3_DI_FILL"/>
 	<IO Name="Rinse3.DrainValve" IOName="c_QDRD3_DUMP"/>
 	<IO Name="Rinse3.WasteValve" IOName="c_QDRD3_MDRAIN"/>
-  </Module>
+	</Module>
   
-  <Module Name="Rinse4">
+	<Module Name="Rinse4">
 	<IO Name="Rinse4.WaterLevel" IOName="r_QDRD4_WATER_LEVEL"/>
 	<IO Name="Rinse4.WaferHolderClamp" IOName="c_QDRD4_WS_CLAMP"/>
 	<IO Name="Rinse4.N2Valve" IOName="c_QDRD4_LO_PRESSURE"/>
 	<IO Name="Rinse4.FillValve" IOName="c_QDRD4_DI_FILL"/>
 	<IO Name="Rinse4.DrainValve" IOName="c_QDRD4_DUMP"/>
 	<IO Name="Rinse4.WasteValve" IOName="c_QDRD4_MDRAIN"/>
-  </Module>
+	</Module>
   
-  <Module Name="Rinse5">
+	<Module Name="Rinse5">
 	<IO Name="Rinse5.WaterLevel" IOName="r_QDRD5_WATER_LEVEL"/>
 	<IO Name="Rinse5.WaferHolderClamp" IOName="c_QDRD5_WS_CLAMP"/>
 	<IO Name="Rinse5.N2Valve" IOName="c_QDRD5_LO_PRESSURE"/>
 	<IO Name="Rinse5.FillValve" IOName="c_QDRD5_DI_FILL"/>
 	<IO Name="Rinse5.DrainValve" IOName="c_QDRD5_DUMP"/>
 	<IO Name="Rinse5.WasteValve" IOName="c_QDRD5_MDRAIN"/>
-  </Module>
+	</Module>
   
-  <Module Name="Rinse6">
+	<Module Name="Rinse6">
 	<IO Name="Rinse6.WaterLevel" IOName="r_QDRD6_WATER_LEVEL"/>
 	<IO Name="Rinse6.WaferHolderClamp" IOName="c_QDRD6_WS_CLAMP"/>
 	<IO Name="Rinse6.N2Valve" IOName="c_QDRD6_LO_PRESSURE"/>
 	<IO Name="Rinse6.FillValve" IOName="c_QDRD6_DI_FILL"/>
 	<IO Name="Rinse6.DrainValve" IOName="c_QDRD6_DUMP"/>
 	<IO Name="Rinse6.WasteValve" IOName="c_QDRD6_MDRAIN"/>
-  </Module>
-  <Module Name="Reservoir">
+	</Module>
+	<Module Name="Reservoir">
 	<IO Name="Reservoir.DiReplenFlow" IOName="r_DIREPLEN_FLOW"/>
 	<IO Name="Reservoir.HighLevel" IOName="r_RES_HIGH_LEVEL"/>
 	
-  </Module>
+	</Module>
   
-  <Module Name="Reservoir1">
+	<Module Name="Reservoir1">
 	<IO Name="Reservoir1.EvaporatorLevel" IOName="r_DI_EVAPORATOR_LEVEL"/>
 	<IO Name="Reservoir1.CADiReplen" IOName="c_RES1_CA_DI_REPLEN"/>
 	<IO Name="Reservoir1.ANDiReplen" IOName="c_RES1_AN_DI_REPLEN"/>
@@ -356,8 +381,8 @@
 	<IO Name="Reservoir1.CDAFlowValve" IOName="c_RES1_DI_EVAP_FLOW_ENABLE"/>
 	<IO Name="Reservoir1.ANSampleFlow" IOName="c_RES1_AN_SAMPLE_FLOW_ENABLE"/>
 	<IO Name="Reservoir1.CASampleFlow" IOName="c_RES1_CA_SAMPLE_FLOW_ENABLE"/>
-  </Module>
-  <Module Name="Reservoir2">
+	</Module>
+	<Module Name="Reservoir2">
 	<IO Name="Reservoir2.Flow" IOName="r_RES2_CMM_FLOW"/>
 	<IO Name="Reservoir2.DiReplen" IOName="c_RES2_DI_REPLEN"/>
 	<IO Name="Reservoir2.PHFlowValve" IOName="c_PH2_FLOW_VALVE"/>
@@ -369,8 +394,8 @@
 	<IO Name="Reservoir2.Replen2PumpSpeed" IOName="c_M3_REPLEN2_SPEED"/>
 	<IO Name="Reservoir2.Replen1Level" IOName="r_M3_REPLEN1_LEVEL"/>
 	<IO Name="Reservoir2.Replen2Level" IOName="r_M3_REPLEN2_LEVEL"/>
-  </Module>
-  <Module Name="Reservoir3">
+	</Module>
+	<Module Name="Reservoir3">
 	<IO Name="Reservoir3.CADiReplen" IOName="c_RES3_CA_DI_REPLEN"/>
 	<IO Name="Reservoir3.ANDiReplen" IOName="c_RES3_AN_DI_REPLEN"/>
 	<IO Name="Reservoir3.CAWaterLevel" IOName="r_RES3_CA_LEVEL_raw"/>
@@ -401,9 +426,9 @@
 	<IO Name="Reservoir3.ANTransferFlow" IOName="r_RES3_AN_TRANSFER_FLOW"/>
 	<IO Name="Reservoir3.ANSampleFlow" IOName="c_RES3_AN_SAMPLE_FLOW_ENABLE"/>
 	<IO Name="Reservoir3.CASampleFlow" IOName="c_RES3_CA_SAMPLE_FLOW_ENABLE"/>
-  </Module>
+	</Module>
   
-  <Module Name="Metal1">
+	<Module Name="Metal1">
 	<IO Name="Metal1.ANAPinEnable" IOName="c_CELL1_AN_A_PIN_ENABLE"/>	
 	<IO Name="Metal1.ANBPinEnable" IOName="c_CELL1_AN_B_PIN_ENABLE"/>
 	<IO Name="Metal1.ANAPoutEnable" IOName="c_CELL1_AN_A_POUT_ENABLE"/>	
@@ -414,8 +439,8 @@
 	<IO Name="Metal1.WHClamp" IOName="c_METAL1_WS_CLAMP_ON"/>
 	<IO Name="Metal1.WHUnclamp" IOName="c_METAL1_WS_CLAMP_OFF"/>
 	<IO Name="Metal1.CellFlowValve" IOName="c_CELL1_FLOW"/>
-  </Module>
-  <Module Name="Metal2">  
+	</Module>
+	<Module Name="Metal2">  
 	<IO Name="Metal2.ANAPinEnable" IOName="c_CELL2_AN_A_PIN_ENABLE"/>	
 	<IO Name="Metal2.ANBPinEnable" IOName="c_CELL2_AN_B_PIN_ENABLE"/>
 	<IO Name="Metal2.ANAPoutEnable" IOName="c_CELL2_AN_A_POUT_ENABLE"/>	
@@ -426,8 +451,8 @@
 	<IO Name="Metal2.WHClamp" IOName="c_METAL2_WS_CLAMP_ON"/>
 	<IO Name="Metal2.WHUnclamp" IOName="c_METAL2_WS_CLAMP_OFF"/> 
 	<IO Name="Metal2.CellFlowValve" IOName="c_CELL2_FLOW"/>
-  </Module>
-  <Module Name="Metal3">
+	</Module>
+	<Module Name="Metal3">
 	<IO Name="Metal3.ANAPinEnable" IOName="c_CELL3_AN_A_PIN_ENABLE"/>	
 	<IO Name="Metal3.ANBPinEnable" IOName="c_CELL3_AN_B_PIN_ENABLE"/>
 	<IO Name="Metal3.ANAPoutEnable" IOName="c_CELL3_AN_A_POUT_ENABLE"/>	
@@ -438,20 +463,20 @@
 	<IO Name="Metal3.WHClamp" IOName="c_METAL3_WS_CLAMP_ON"/>
 	<IO Name="Metal3.WHUnclamp" IOName="c_METAL3_WS_CLAMP_OFF"/>
 	<IO Name="Metal3.CellFlowValve" IOName="c_CELL3_FLOW"/>
-  </Module>
-  <Module Name="Metal4">
+	</Module>
+	<Module Name="Metal4">
 	<IO Name="Metal4.CellFlow" IOName="r_PUMP4_FLOW"/>
 	<IO Name="Metal4.CellPump" IOName="c_METAL4_PUMP_ON"/>
 	<IO Name="Metal4.Circulation" IOName="c_METAL4_CIRCULATION"/>
 	<IO Name="Metal4.WaferHolderClamp" IOName="c_METAL4_WS_CLAMP"/>
-  </Module>
-  <Module Name="Metal5">
+	</Module>
+	<Module Name="Metal5">
 	<IO Name="Metal5.CellFlow" IOName="r_PUMP5_FLOW"/>
 	<IO Name="Metal5.CellPump" IOName="c_METAL5_PUMP_ON"/>
 	<IO Name="Metal5.Circulation" IOName="c_METAL5_CIRCULATION"/>
 	<IO Name="Metal5.WaferHolderClamp" IOName="c_METAL5_WS_CLAMP"/>
-  </Module>
-  <Module Name="Metal6">
+	</Module>
+	<Module Name="Metal6">
 	<IO Name="Metal6.ANAPinEnable" IOName="c_CELL6_AN_A_PIN_ENABLE"/>	
 	<IO Name="Metal6.ANBPinEnable" IOName="c_CELL6_AN_B_PIN_ENABLE"/>
 	<IO Name="Metal6.ANAPoutEnable" IOName="c_CELL6_AN_A_POUT_ENABLE"/>	
@@ -462,8 +487,8 @@
 	<IO Name="Metal6.WHClamp" IOName="c_METAL6_WS_CLAMP_ON"/>
 	<IO Name="Metal6.WHUnclamp" IOName="c_METAL6_WS_CLAMP_OFF"/>
 	<IO Name="Metal6.CellFlowValve" IOName="c_CELL6_FLOW"/>
-  </Module>
-  <Module Name="Metal7">
+	</Module>
+	<Module Name="Metal7">
 	<IO Name="Metal7.ANAPinEnable" IOName="c_CELL7_AN_A_PIN_ENABLE"/>	
 	<IO Name="Metal7.ANBPinEnable" IOName="c_CELL7_AN_B_PIN_ENABLE"/>
 	<IO Name="Metal7.ANAPoutEnable" IOName="c_CELL7_AN_A_POUT_ENABLE"/>	
@@ -474,5 +499,5 @@
 	<IO Name="Metal7.WHClamp" IOName="c_METAL7_WS_CLAMP_ON"/>
 	<IO Name="Metal7.WHUnclamp" IOName="c_METAL7_WS_CLAMP_OFF"/>
 	<IO Name="Metal7.CellFlowValve" IOName="c_CELL7_FLOW"/>
-  </Module>
+	</Module>
 </BeckhoffModuleIOCfg>

+ 19 - 20
CyberX8_RT/Config/Devices/WagoControllerCfg-Simulator.xml

@@ -3,23 +3,22 @@
 	<WagoDeviceConfig Module="Wago0" IpAddress="127.0.0.1" Port="501" SendTimeout="2000" RecvTimeout="2000" Channel="1">
 		<Dig_In>
 			<DIGroup Name="N5">
-				<DI Name="DI0"  Address="0" Invert="false"/>
-				<DI Name="DI1"  Address="1" Invert="false"/>
-				<DI Name="DI2"  Address="2" Invert="false"/>
-				<DI Name="DI3"  Address="3" Invert="false"/>
-				<DI Name="DI4"  Address="4" Invert="false"/>
-				<DI Name="DI5"  Address="5" Invert="false"/>
-				<DI Name="DI6"  Address="6" Invert="false"/>
-				<DI Name="DI7"  Address="7" Invert="false"/>
-				<DI Name="DI8"  Address="8" Invert="false"/>
-				<DI Name="DI9"  Address="9" Invert="false"/>
-				<DI Name="DI10"  Address="10" Invert="false"/>
-				<DI Name="DI11"  Address="11" Invert="false"/>
-				<DI Name="DI12"  Address="12" Invert="false"/>
-				<DI Name="DI13"  Address="13" Invert="false"/>
-				<DI Name="DI14"  Address="14" Invert="false"/>
+				<DI Name="r_Cassette_1_150" Address="0" Invert="false"/>
+				<DI Name="r_Cassette_1_100"  Address="1" Invert="false"/>
+				<DI Name="r_Cassette_1_200"  Address="2" Invert="false"/>
+				<DI Name="r_Cassette_2_150"  Address="3" Invert="false"/>
+				<DI Name="r_Cassette_2_100"  Address="4" Invert="false"/>
+				<DI Name="r_Cassette_2_200"  Address="5" Invert="false"/>
+				<DI Name="r_Cassette_3_150"  Address="6" Invert="false"/>
+				<DI Name="r_Cassette_3_100"  Address="7" Invert="false"/>
+				<DI Name="r_Cassette_3_200"  Address="8" Invert="false"/>
+				<DI Name="r_Dummy_1_150"  Address="9" Invert="false"/>
+				<DI Name="r_Dummy_1_100"  Address="10" Invert="false"/>
+				<DI Name="r_Dummy_1_200"  Address="11" Invert="false"/>
+				<DI Name="r_Dummy_2_150"  Address="12" Invert="false"/>
+				<DI Name="r_Dummy_2_100"  Address="13" Invert="false"/>
+				<DI Name="r_Dummy_2_200"  Address="14" Invert="false"/>
 				<DI Name="DI15"  Address="15" Invert="false"/>
-				<DI Name="DI16"  Address="16" Invert="false"/>
 			</DIGroup>
 			<DIGroup Name="N6">
 				<DI Name="DI17"  Address="17" Invert="false"/>
@@ -32,9 +31,9 @@
 			<DOGroup Name="N7">
 				<DO Name="DO0"  Address="512" Invert="false"/>
 				<DO Name="c_LoaderA_LS_Vacuum"  Address="513" Invert="false"/>
-				<DO Name="c_LoaderB_LS_Vacuum"  Address="514" Invert="false"/>
+				<DO Name="DO3"  Address="514" Invert="false"/>
 				<DO Name="DO4"  Address="515" Invert="false"/>
-				<DO Name="c_DPUF_A_CHUCK_A_RELEASE"  Address="516" Invert="false"/>
+				<DO Name="DO5"  Address="516" Invert="false"/>
 				<DO Name="DO6"  Address="517" Invert="false"/>
 				<DO Name="DO7"  Address="518" Invert="false"/>
 				<DO Name="DO8"  Address="519" Invert="false"/>
@@ -62,9 +61,9 @@
 		<Ano_In>
 			<AIGroup Name="N1">
 				<AI Name="r_LoaderA_LS_Vacuum_anlg"  Address="0" Scaling="0=3276.7,-757=16383.5" DataType="short"/>
-				<AI Name="r_LoaderB_LS_Vacuum_anlg"  Address="1" Scaling="0=3276.7,-757=16383.5" DataType="short"/>
+				<AI Name="AI2"  Address="1" DataType="short"/>
 				<AI Name="AI3"  Address="2" DataType="short"/>
-				<AI Name="r_DPUF_A_CHUCK_A_VAC"  Address="3" Scaling="0=3276.7,-757=16383.5" DataType="short"/>
+				<AI Name="AI4"  Address="3" DataType="short"/>
 				<AI Name="AI5"  Address="4" DataType="short"/>
 				<AI Name="AI6"  Address="5" DataType="short"/>
 				<AI Name="AI7"  Address="6" DataType="short"/>

+ 15 - 16
CyberX8_RT/Config/Devices/WagoControllerCfg.xml

@@ -3,23 +3,22 @@
   <WagoDeviceConfig Module="Wago0" IpAddress="10.0.0.12" Port="502" SendTimeout="2000" RecvTimeout="2000" Channel="1"> 
 	<Dig_In>
 		<DIGroup Name="N5">
-			<DI Name="DI0"  Address="0" Invert="false"/>
-			<DI Name="DI1"  Address="1" Invert="false"/>
-			<DI Name="DI2"  Address="2" Invert="false"/>
-			<DI Name="DI3"  Address="3" Invert="false"/>
-			<DI Name="DI4"  Address="4" Invert="false"/>
-			<DI Name="DI5"  Address="5" Invert="false"/>
-			<DI Name="DI6"  Address="6" Invert="false"/>
-			<DI Name="DI7"  Address="7" Invert="false"/>
-			<DI Name="DI8"  Address="8" Invert="false"/>
-			<DI Name="DI9"  Address="9" Invert="false"/>
-			<DI Name="DI10"  Address="10" Invert="false"/>
-			<DI Name="DI11"  Address="11" Invert="false"/>
-			<DI Name="DI12"  Address="12" Invert="false"/>
-			<DI Name="DI13"  Address="13" Invert="false"/>
-			<DI Name="DI14"  Address="14" Invert="false"/>
+			<DI Name="r_Cassette_1_150" Address="0" Invert="false"/>
+			<DI Name="r_Cassette_1_100"  Address="1" Invert="false"/>
+			<DI Name="r_Cassette_1_200"  Address="2" Invert="false"/>
+			<DI Name="r_Cassette_2_150"  Address="3" Invert="false"/>
+			<DI Name="r_Cassette_2_100"  Address="4" Invert="false"/>
+			<DI Name="r_Cassette_2_200"  Address="5" Invert="false"/>
+			<DI Name="r_Cassette_3_150"  Address="6" Invert="false"/>
+			<DI Name="r_Cassette_3_100"  Address="7" Invert="false"/>
+			<DI Name="r_Cassette_3_200"  Address="8" Invert="false"/>
+			<DI Name="r_Dummy_1_150"  Address="9" Invert="false"/>
+			<DI Name="r_Dummy_1_100"  Address="10" Invert="false"/>
+			<DI Name="r_Dummy_1_200"  Address="11" Invert="false"/>
+			<DI Name="r_Dummy_2_150"  Address="12" Invert="false"/>
+			<DI Name="r_Dummy_2_100"  Address="13" Invert="false"/>
+			<DI Name="r_Dummy_2_200"  Address="14" Invert="false"/>
 			<DI Name="DI15"  Address="15" Invert="false"/>
-			<DI Name="DI16"  Address="16" Invert="false"/>
 		</DIGroup>
 		<DIGroup Name="N6">
 			<DI Name="DI17"  Address="17" Invert="false"/>

+ 25 - 1
CyberX8_RT/Config/System.sccfg

@@ -70,7 +70,6 @@
 		<config default="5" name="DefaultHomeSpeedInPercent" nameView="DefaultHomeSpeed InPercent" description="机械臂Home速度" max="100" min="1" paramter="" tag="" unit="" type="Integer" />
 
 		<config default="2" name="EfemType" nameView="EFEM Type" description="EFEM类型,1=Future广川 2=SunWay 3=Brooks" max="300" min="1" paramter="" tag="" unit="" type="Integer" />
-
 		<config default="false" name="AutoUnlockAfterUnload" nameView="auto unlock after unload" description="是否自动解锁" max="" min="" paramter="" tag="" unit="" type="Bool" />
 	
 		<config default="false" name="IsLoadPort1Unable" nameView="Is LoadPort1 Unable" description="LP1是否无法使用" max="" min="" paramter="" tag="" unit="" type="Bool" />
@@ -88,6 +87,31 @@
 			<config default="false" name="EnableScanner" nameView="Enable Scanner Reader" description="是否打开扫码枪功能" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
 
 		</configs>
+		<configs name="LP1" nameView="LP1">
+			<config default="50" name="Cassete200Station" nameView="Cassete200Station" description="Wafer 200 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+			<config default="51" name="Cassete150Station" nameView="Cassete150Station" description="Wafer 150 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+			<config default="52" name="Cassete100Station" nameView="Cassete100Station" description="Wafer 150 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+		</configs>
+		<configs name="LP2" nameView="LP2">
+			<config default="53" name="Cassete200Station" nameView="Cassete200Station" description="Wafer 200 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+			<config default="54" name="Cassete150Station" nameView="Cassete150Station" description="Wafer 150 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+			<config default="55" name="Cassete100Station" nameView="Cassete100Station" description="Wafer 150 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+		</configs>
+		<configs name="LP3" nameView="LP3">
+			<config default="56" name="Cassete200Station" nameView="Cassete200Station" description="Wafer 200 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+			<config default="57" name="Cassete150Station" nameView="Cassete150Station" description="Wafer 150 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+			<config default="58" name="Cassete100Station" nameView="Cassete100Station" description="Wafer 150 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+		</configs>
+		<configs name="Dummy1" nameView="Dummy1">
+			<config default="59" name="Cassete200Station" nameView="Cassete200Station" description="Wafer 200 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+			<config default="60" name="Cassete150Station" nameView="Cassete150Station" description="Wafer 150 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+			<config default="61" name="Cassete100Station" nameView="Cassete100Station" description="Wafer 150 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+		</configs>
+		<configs name="Dummy2" nameView="Dummy2">
+			<config default="62" name="Cassete200Station" nameView="Cassete200Station" description="Wafer 200 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+			<config default="63" name="Cassete150Station" nameView="Cassete150Station" description="Wafer 150 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+			<config default="64" name="Cassete100Station" nameView="Cassete100Station" description="Wafer 150 Cassete station number" max="120" min="0" paramter="" tag="" unit="s" type="Integer"/>
+		</configs>
 	</configs>
 	<!--DualPUF-->
 	<configs name="DualPUF" nameView="DualPUF">

+ 3 - 0
CyberX8_RT/CyberX8_RT.csproj

@@ -196,12 +196,15 @@
     <Compile Include="Devices\Dryer\DryerAutoOff.cs" />
     <Compile Include="Devices\Dryer\DryerBlowerHighRoutine.cs" />
     <Compile Include="Devices\Dryer\DryerDevice.cs" />
+    <Compile Include="Devices\EFEM\Dummy.cs" />
     <Compile Include="Devices\EFEM\EfemBase.cs" />
     <Compile Include="Devices\EFEM\EfemDevice.cs" />
     <Compile Include="Devices\EFEM\EfemInterface.cs" />
     <Compile Include="Devices\EFEM\EfemMessage.cs" />
     <Compile Include="Devices\EFEM\IEfemMessageHander.cs" />
     <Compile Include="Devices\EFEM\JetMessageHandler.cs" />
+    <Compile Include="Devices\EFEM\SumWayRobotErrorCode.cs" />
+    <Compile Include="Devices\EFEM\SunWayRobot.cs" />
     <Compile Include="Devices\EFEM\SunWayEfem.cs" />
     <Compile Include="Devices\EFEM\JetEfem.cs" />
     <Compile Include="Devices\EFEM\Loadport.cs" />

+ 5 - 3
CyberX8_RT/Devices/EFEM/EfemBase.cs

@@ -56,7 +56,7 @@ namespace CyberX8_RT.Devices.EFEM
             }
             else if (Status == RState.Running)
             {
-                LOG.Write(eEvent.ERR_EFEM_ROBOT, ModuleName.EFEM, "EFEM is busy, please wait a minute");
+                LOG.Write(eEvent.ERR_EFEM_ROBOT, ModuleName.EFEM, $"EFEM is busy, please wait a minute");
                 return false;
             }
             else if (Status == RState.Failed || Status == RState.Timeout)
@@ -104,15 +104,17 @@ namespace CyberX8_RT.Devices.EFEM
         public abstract bool Place(ModuleName station, int slot, Hand hand);
         public abstract bool Goto(ModuleName station, Hand hand,string updown="UP");
         public abstract bool Grip(Hand blade, bool isGrip);
+        public abstract bool GotoMap(ModuleName mod, Hand hand,string extend="EX");
         public abstract bool Map(ModuleName mod);
-        public abstract bool Vacuum(ModuleName mod,string VacuumState);
+
+        public abstract bool RequestMapResult(ModuleName mod);
+        public abstract bool Vacuum(ModuleName mod,bool VacuumState);
         public abstract bool SetPinUp(ModuleName mod);
         public abstract bool SetPinDown(ModuleName mod);
 
         public abstract bool SetAlignAngle(ModuleName mod,double angle);
         public abstract bool SetRobotSpeed(ModuleName mod,int speed);
         public abstract bool RobotPowerOn(ModuleName mod,bool status);
-        public abstract bool SetHomeSpeed(ModuleName mod, int speed);
         public abstract bool Align(ModuleName mod, double angle,float delayTime, WaferSize size);
         public abstract bool SetLamp(LightType light, LightStatus status);
         public abstract bool Load(ModuleName mod);

+ 13 - 5
CyberX8_RT/Devices/EFEM/JetEfem.cs

@@ -145,13 +145,9 @@ namespace CyberX8_RT.Devices.EFEM
         {
             return false;
         }
-        public override bool SetHomeSpeed(ModuleName mod, int speed)
-        {
-            return false;
-        }
         public override bool RobotPowerOn(ModuleName mod, bool status)
         { return false; }
-        public override bool Vacuum(ModuleName mod, string state)
+        public override bool Vacuum(ModuleName mod, bool state)
         {
             return false;
         }
@@ -479,6 +475,18 @@ namespace CyberX8_RT.Devices.EFEM
             return _socket.Write(_currentMsg.ToString());
         }
 
+
+        public override bool GotoMap(ModuleName mod, Hand hand, string extend = "EX")
+        {
+            LOG.WriteLog(eEvent.ERR_EFEM_COMMON_FAILED, Module.ToString(), $"System cannot support GotoMap");
+            return false;
+        }
+
+        public override bool RequestMapResult(ModuleName mod)
+        {
+            LOG.WriteLog(eEvent.ERR_EFEM_COMMON_FAILED, Module.ToString(), $"System cannot support RequestMapResult");
+            return false;
+        }
         public override bool Map(ModuleName mod)
         {
             if (!CheckEfemStatus())

+ 91 - 12
CyberX8_RT/Devices/EFEM/Loadport.cs

@@ -18,13 +18,23 @@ using CyberX8_RT.Devices.YASKAWA;
 using CyberX8_RT.Modules;
 using Aitex.Core.RT.IOCore;
 using CyberX8_RT.Dispatch;
+using MECF.Framework.Common.IOCore;
 
 namespace CyberX8_RT.Devices.EFEM
 {
     sealed class Loadport : ILoadport
     {
+        #region 常量 
+        private const string CASSETE_200_PRESENT= "Cassete200Present";
+        private const string CASSETE_150_PRESENT = "Cassete150Present";
+        private const string CASSETE_100_PRESENT = "Cassete100Present";
+        #endregion
         private EfemEntity _controller => Singleton<RouteManager>.Instance.EFEM;
 
+        /// <summary>
+        /// 变量是否初始化字典
+        /// </summary>
+        private Dictionary<string, bool> _variableInitializeDic = new Dictionary<string, bool>();
         private EfemBase _efemBase;
 
         //---------------------------------Properties------------------------------------
@@ -100,7 +110,9 @@ namespace CyberX8_RT.Devices.EFEM
         private bool _enableThickness;
         private string AlarmWaferProtrude = "WaferProtrude";
         private LoadPortFACallback _faCallback = new LoadPortFACallback();
-
+        private bool _cassete200Present = false;
+        private bool _cassete150Present = false;
+        private bool _cassete100Present = false;
         // Constructor
         //
         public Loadport(ModuleName mod, EfemBase efem)
@@ -135,6 +147,67 @@ namespace CyberX8_RT.Devices.EFEM
             OP.Subscribe($"{Module}.SetThick", (cmd, args) => { SetThick(); return true; });
             OP.Subscribe($"{Module}.SetThin", (cmd, args) => { SetThin(); return true; });
 
+            SubscribeValueAction();
+        }
+        /// <summary>
+        /// 订阅变量数值发生变化
+        /// </summary>
+        private void SubscribeValueAction()
+        {
+            BeckhoffIoSubscribeUpdateVariable(CASSETE_100_PRESENT);
+            BeckhoffIoSubscribeUpdateVariable(CASSETE_150_PRESENT);
+            BeckhoffIoSubscribeUpdateVariable(CASSETE_200_PRESENT);
+        }
+
+        /// <summary>
+        /// 订阅IO变量
+        /// </summary>
+        /// <param name="variable"></param>
+        private void BeckhoffIoSubscribeUpdateVariable(string variable)
+        {
+            _variableInitializeDic[variable] = false;
+            IOModuleManager.Instance.SubscribeModuleVariable($"{Module}", variable, UpdateVariableValue);
+        }
+
+        /// 更新变量数值
+        /// </summary>
+        /// <param name="variable"></param>
+        /// <param name="value"></param>
+        private void UpdateVariableValue(string variable, object value)
+        {
+            bool cassete=(bool)value;
+            if (variable == CASSETE_200_PRESENT)
+            {
+                _cassete200Present = cassete;
+                if (cassete)
+                {
+                    WaferSize = WaferSize.WS8;
+                }
+            }
+            else if (variable == CASSETE_150_PRESENT && cassete)
+            {
+                _cassete150Present = cassete;
+                if (cassete)
+                {
+                    WaferSize = WaferSize.WS6;
+                }
+            }
+            else if (variable == CASSETE_100_PRESENT && cassete)
+            {
+                _cassete100Present = cassete;
+                if (cassete)
+                {
+                    WaferSize = WaferSize.WS4;
+                }
+            }
+            if (!_cassete100Present && !_cassete150Present && !_cassete200Present)
+            {
+                UpdateWaferArrive(false);
+            }
+            else
+            {
+                UpdateWaferArrive(true);
+            }
         }
 
         // Methods
@@ -280,7 +353,6 @@ namespace CyberX8_RT.Devices.EFEM
         }
         #endregion
 
-
         #region unload
 
         public void Unload()
@@ -697,16 +769,7 @@ namespace CyberX8_RT.Devices.EFEM
                             }
                         }
                     }
-                    if (resultNormal)
-                    {
-                        _faCallback.CarrierSlotMapComplete(this);
-                    }
-                    else
-                    {
-                        _faCallback.CarrierSlotMapFailed(this);
-                    }
-
-                    this.IsMapped = true;
+                    UpdateMapResult(resultNormal);
                     break;
 
                 case EfemOperation.SigStatus:
@@ -751,6 +814,20 @@ namespace CyberX8_RT.Devices.EFEM
                     break;
             }
         }
+
+        public void UpdateMapResult(bool result)
+        {
+            if (result)
+            {
+                _faCallback.CarrierSlotMapComplete(this);
+            }
+            else
+            {
+                _faCallback.CarrierSlotMapFailed(this);
+            }
+
+            this.IsMapped = true;
+        }
         /// <summary>
         /// 更新Wafer到达情况 
         /// </summary>
@@ -762,6 +839,7 @@ namespace CyberX8_RT.Devices.EFEM
                 if (!bArrived)
                 {
                     this.HasCassette = false;
+                    this.IsLoaded = false;
                     this.IsMapped = false;
                     //EV.PostInfoLog(mod.ToString(), "Cassette removed");
                     //OP.DoOperation("System.CassetteLeave");     //For unload light control off afer job done
@@ -778,6 +856,7 @@ namespace CyberX8_RT.Devices.EFEM
                 if (bArrived)
                 {
                     this.HasCassette = true;
+                    IsLoaded = true;
                     CarrierManager.Instance.CreateCarrier(Module.ToString());
                     _faCallback.CarrierArrived(this);
 

+ 14 - 35
CyberX8_RT/Devices/EFEM/SunWayEfem.cs

@@ -354,6 +354,17 @@ namespace CyberX8_RT.Devices.EFEM
             return false;
         }
 
+        public override bool GotoMap(ModuleName mod, Hand hand,string extend="EX")
+        {
+            LOG.WriteLog(eEvent.ERR_EFEM_COMMON_FAILED, Module.ToString(), $"System cannot support GotoMap");
+            return false;
+        }
+
+        public override bool RequestMapResult(ModuleName mod)
+        {
+            LOG.WriteLog(eEvent.ERR_EFEM_COMMON_FAILED, Module.ToString(), $"System cannot support RequestMapResult");
+            return false;
+        }
         public override bool Pick(ModuleName station, int slot, Hand hand)
         {
             //判断机台是否准备就绪
@@ -498,7 +509,7 @@ namespace CyberX8_RT.Devices.EFEM
             return _socket.Write(_currentMsg.ToString());
         }
 
-        public override bool Vacuum(ModuleName mod,string VacuumState)
+        public override bool Vacuum(ModuleName mod,bool VacuumState)
         {
             //判断机台是否准备就绪
             if (!_isComm)
@@ -512,12 +523,12 @@ namespace CyberX8_RT.Devices.EFEM
                 LOG.WriteLog(eEvent.ERROR_EFEM_COMMUNICATION, Module.ToString(), $"Socket is not Conntected");
                 return false;
             }
-
+            string strVacuum = VacuumState ? "ON" : "OFF";
             _currentMsg = new EfemMessage
             {
                 Operation = EfemOperation.Vacuum,
                 Head = EfemMessage.MsgHead.MOV,
-                Parameters = new List<string> { SunWayMessageHandler.Instance.ModuleString[mod],VacuumState }
+                Parameters = new List<string> { SunWayMessageHandler.Instance.ModuleString[mod],strVacuum }
             };
 
             _status = RState.Running;
@@ -690,38 +701,6 @@ namespace CyberX8_RT.Devices.EFEM
             return _socket.Write(_currentMsg.ToString());
         }
 
-
-        public override bool SetHomeSpeed(ModuleName mod, int speed)
-        {
-
-            //判断机台是否准备就绪
-            if (!_isComm)
-            {
-                LOG.WriteLog(eEvent.ERROR_EFEM_NOREADY, Module.ToString(), "No \"CommReady\" Message Received,Cannot Execute Action");
-                return false;
-            }
-            //判断socket是否链接
-            if (!_socket.IsConnected)
-            {
-                LOG.WriteLog(eEvent.ERROR_EFEM_COMMUNICATION, Module.ToString(), $"Socket is not Conntected");
-                return false;
-            }
-            if (!CheckEfemStatus())
-                return false;     
-            _currentMsg = new EfemMessage
-            {
-                Operation = EfemOperation.Speed,
-                Head = EfemMessage.MsgHead.SET,
-                Parameters = new List<string>
-                {
-                    SunWayMessageHandler.Instance.ModuleString[mod],
-                    speed.ToString()
-                }
-            };
-            _status = RState.Running;
-            return _socket.Write(_currentMsg.ToString());
-        }
-
         public override bool Align(ModuleName mod, double angle, float delayTime, WaferSize size)
         {
             //判断机台是否准备就绪

+ 1 - 1
CyberX8_RT/Modules/EFEM/EfemHomeRoutine.cs

@@ -219,7 +219,7 @@ namespace CyberX8_RT.Modules.EFEM
 
         private bool SetHomeSpeed()
         {
-            return _efem.SetHomeSpeed(ModuleName.EfemRobot, _homeSpeed);
+            return _efem.SetRobotSpeed(ModuleName.EfemRobot, _homeSpeed);
         }
 
         private bool SetRobotSpeed()

+ 3 - 10
CyberX8_RT/Modules/EFEM/EfemVacuumRoutine.cs

@@ -20,7 +20,7 @@ namespace CyberX8_RT.Modules.EFEM
 {
     public class EfemVacuumRoutine : ModuleRoutineBase, IRoutine
     {
-        private string _vacuumStatus;
+        private bool _vacuumStatus;
 
         private ModuleName _vacuumModule;
 
@@ -47,14 +47,7 @@ namespace CyberX8_RT.Modules.EFEM
         public RState Start(params object[] objs)
         {
             _vacuumModule = (ModuleName)objs[0];
-            if ((bool)objs[1] == true)
-            {
-                _vacuumStatus = "ON";
-            }
-            else
-            {
-                _vacuumStatus = "OFF";
-            }
+            _vacuumStatus = (bool)objs[1];
             return Runner.Start(Module, "Vacumm");
         }
         /// <summary>
@@ -72,7 +65,7 @@ namespace CyberX8_RT.Modules.EFEM
         /// Vacuum功能
         /// </summary>
         /// <returns></returns>
-        private bool Vacuum(ModuleName moduleName,string VacuumState)
+        private bool Vacuum(ModuleName moduleName,bool VacuumState)
         {
             return _efem.Vacuum(moduleName,VacuumState);
         }

+ 31 - 5
CyberX8_RT/Modules/LPs/LoadPortMapRoutine.cs

@@ -16,8 +16,14 @@ namespace CyberX8_RT.Modules.LPs
     {
         enum RoutineStep
         {
+            GotoMapWaitIdle,
+            GotoMap,
             WaitEFEMIdle,
             Map,
+            RequestMapWaitIdle, 
+            RequestMap,
+            BackWaitIdle,
+            Back,
             End,
 
         }
@@ -45,19 +51,39 @@ namespace CyberX8_RT.Modules.LPs
 
         public RState Monitor()
         {
-            Runner.Run(RoutineStep.Map, Map, CheckDevice, _timeout * 1000)
-                    .End(RoutineStep.End, NullFun, _delay_1s);
+            Runner.Wait(RoutineStep.GotoMapWaitIdle, () => _lpModule.IsRobotIdle)
+                .Run(RoutineStep.GotoMap,GotoMap,CheckDevice,_timeout*1000)
+                .Wait(RoutineStep.WaitEFEMIdle,()=> _lpModule.IsRobotIdle)
+                .Run(RoutineStep.Map, Map, CheckDevice, _timeout * 1000)
+                .Wait(RoutineStep.RequestMapWaitIdle,()=> _lpModule.IsRobotIdle)
+                .Run(RoutineStep.RequestMap,RequestMap,CheckDevice,_timeout*1000)
+                .Wait(RoutineStep.BackWaitIdle,()=> _lpModule.IsRobotIdle)
+                .Run(RoutineStep.Back,Back,CheckDevice,_timeout*1000)
+                .End(RoutineStep.End, NullFun, _delay_1s);
 
             return Runner.Status;
         }
-
-        public bool Map()
+        private bool GotoMap()
+        {
+            return _lpModule.JetEfem.GotoMap(Module, Aitex.Sorter.Common.Hand.Blade1);
+        }
+        private bool Map()
         {
             Notify($"Start Map {_lpModule.LPDevice.Module}");
             _lpModule.LPDevice.Map();
             return true;
         }
 
+        private bool Back()
+        {
+            return _lpModule.JetEfem.GotoMap(Module, Aitex.Sorter.Common.Hand.Blade1,"RE");
+        }
+
+        private bool RequestMap()
+        {
+            return _lpModule.JetEfem.RequestMapResult(Module);
+        }
+
         bool CheckDevice()
         {
             if (_lpModule.LPDevice.IsError)
@@ -71,7 +97,7 @@ namespace CyberX8_RT.Modules.LPs
 
         public void Abort()
         {
-
+            Runner.Stop("Manual Abort");
         }
     }
 }

+ 4 - 0
CyberX8_RT/Modules/LPs/LoadPortModule.cs

@@ -83,6 +83,10 @@ namespace CyberX8_RT.Modules.LPs
             CycleLoadUnload
         }
 
+        public EfemBase JetEfem
+        {
+            get { return _efem; }
+        }
         private readonly EfemBase _efem;
 
 

+ 2 - 1
CyberX8_Simulator/Devices/WagoSocketSimulator.cs

@@ -43,7 +43,8 @@ namespace CyberX8_Simulator.Devices
         /// </summary>
         private void InitializeData()
         {
-            AIShorts[3] = 0x1388; 
+            AIShorts[3] = 0x1388;
+            DIBytes[2] = 0x01;
         }
 
         #region 功能方法

+ 22 - 22
CyberX8_Themes/UserControls/LoaderStationSideControl.xaml

@@ -47,7 +47,7 @@
 
                 </Grid>
 
-                <Grid Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" Margin="0,0,5,0">
+                <!--<Grid Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="165"></ColumnDefinition>
                         <ColumnDefinition Width="20"></ColumnDefinition>
@@ -59,7 +59,7 @@
                     <Ellipse Grid.Column="1" Width="16" Height="16"  Fill="{Binding DoorUnlocked, Converter={StaticResource boolReverseToColor}, ElementName=self}"   Stroke="Silver"/>
                     <Button Style="{StaticResource SysBtnStyle}"  Grid.Column="2" Content="On" Click="DoorLockOn_Click"></Button>
                     <Button Style="{StaticResource SysBtnStyle}"  Grid.Column="3" Content="Off"  Click="DoorLockOff_Click"></Button>
-                </Grid>
+                </Grid>-->
 
                 <Grid Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Grid.ColumnDefinitions>
@@ -89,7 +89,7 @@
                     <Button Style="{StaticResource SysBtnStyle}"  Grid.Column="3" Content="Off"  Click="WhBladderOff_Click"></Button>
                 </Grid>
 
-                <Grid Grid.Row="4" Grid.Column="0" VerticalAlignment="Center" Margin="0,0,5,0">
+                <!--<Grid Grid.Row="4" Grid.Column="0" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="165"></ColumnDefinition>
                         <ColumnDefinition Width="20"></ColumnDefinition>
@@ -101,9 +101,9 @@
                     <Ellipse Grid.Column="1" Width="16" Height="16"  Fill="{Binding TransBladdered, Converter={StaticResource boolToColor}, ElementName=self}"   Stroke="Silver"/>
                     <Button Style="{StaticResource SysBtnStyle}"  Grid.Column="2" Content="On"  Click="TranlateBladderOn_Click"></Button>
                     <Button Style="{StaticResource SysBtnStyle}"  Grid.Column="3" Content="Off" Click="TranlateBladderOff_Click"></Button>
-                </Grid>
+                </Grid>-->
 
-                <Grid Grid.Row="5" Grid.Column="0" VerticalAlignment="Center" Margin="0,0,5,0">
+                <!--<Grid Grid.Row="5" Grid.Column="0" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="165"></ColumnDefinition>
                         <ColumnDefinition Width="20"></ColumnDefinition>
@@ -115,9 +115,9 @@
                     <Ellipse Grid.Column="1" Width="16" Height="16"  Fill="{Binding TransHighPresed, Converter={StaticResource boolToColor}, ElementName=self}"   Stroke="Silver"/>
                     <Button Style="{StaticResource SysBtnStyle}"  Grid.Column="2" Content="On" Click="TranlateHighPresOn_Click"></Button>
                     <Button Style="{StaticResource SysBtnStyle}"  Grid.Column="3" Content="Off" Click="TranlateHighPresOff_Click"></Button>
-                </Grid>
+                </Grid>-->
 
-                <Grid Grid.Row="6" Grid.Column="0" VerticalAlignment="Center" Margin="0,0,5,0">
+                <Grid Grid.Row="4" Grid.Column="0" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="165"></ColumnDefinition>
                         <ColumnDefinition Width="20"></ColumnDefinition>
@@ -131,7 +131,7 @@
                     <Button Style="{StaticResource SysBtnStyle}"  Grid.Column="3" Content="Off" Click="BernoulliBladderOff_Click"></Button>
                 </Grid>
 
-                <Grid Grid.Row="7" Grid.Column="0" VerticalAlignment="Center" Margin="0,0,5,0">
+                <Grid Grid.Row="5" Grid.Column="0" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="165"></ColumnDefinition>
                         <ColumnDefinition Width="20"></ColumnDefinition>
@@ -145,7 +145,7 @@
                     <Button Style="{StaticResource SysBtnStyle}"  Grid.Column="3" Content="Off" Click="BernoulliN2Off_Click"></Button>
                 </Grid>
 
-                <Grid Grid.Row="0" Grid.Column="1" Grid.RowSpan="2" VerticalAlignment="Center" Margin="0,0,5,0">
+                <!--<Grid Grid.Row="0" Grid.Column="1" Grid.RowSpan="2" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Grid.RowDefinitions>
                         <RowDefinition Height="16"></RowDefinition>
                         <RowDefinition Height="22"></RowDefinition>
@@ -157,9 +157,9 @@
                     <Ellipse Grid.Row="1" Width="16" Height="16"  Fill="{Binding ElementName=self, Path=DoorUpperUnlocked, Converter={StaticResource boolToColor}}"   Stroke="Silver" Margin="63,3,16,3"/>
                     <Ellipse Grid.Row="2" Width="16" Height="16"  Fill="{Binding ElementName=self, Path=DoorLowerUnlocked, Converter={StaticResource boolToColor}}"   Stroke="Silver" Margin="63,3,16,3"/>
 
-                </Grid>
+                </Grid>-->
 
-                <Grid Grid.Row="0" Grid.Column="2" Grid.RowSpan="2" VerticalAlignment="Center" Margin="0,0,5,0">
+                <!--<Grid Grid.Row="0" Grid.Column="2" Grid.RowSpan="2" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Grid.RowDefinitions>
                         <RowDefinition Height="16"></RowDefinition>
                         <RowDefinition Height="22"></RowDefinition>
@@ -169,7 +169,7 @@
                     <Ellipse Grid.Row="1" Width="16" Height="16"  Fill="{Binding ElementName=self,Path=DoorUpperLocked, Converter={StaticResource boolToColor}}"   Stroke="Silver" Margin="38,3,41,3"/>
                     <Ellipse Grid.Row="2" Width="16" Height="16"  Fill="{Binding ElementName=self,Path=DoorLowerLocked, Converter={StaticResource boolToColor}}"   Stroke="Silver" Margin="38,3,41,3"/>
 
-                </Grid>
+                </Grid>-->
 
                 <Grid Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Label Content="LS Vacuum" FontSize="16" VerticalContentAlignment="Center" VerticalAlignment="Top" Grid.RowSpan="2" HorizontalContentAlignment="Left"/>
@@ -188,42 +188,42 @@
                     <TextBlock Width="60" Text="{Binding ElementName=self,Path=WhPressureValue,StringFormat=\{0:F2\},Mode=TwoWay}" Background="Black" Foreground="Lime" FontSize="16" FontWeight="Bold"/>
                     <TextBlock Margin="2,0" Width="45" Text="psi" Background="Black" Foreground="Lime" FontSize="13" FontWeight="Bold"/>
                 </WrapPanel>
-                <Grid Grid.Row="4" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,5,0">
+                <!--<Grid Grid.Row="4" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="29*"/>
                         <ColumnDefinition Width="106*"/>
                     </Grid.ColumnDefinitions>
                     <Label Content="Retracted" FontSize="16" VerticalContentAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Left" Grid.ColumnSpan="2"/>
                     <Ellipse Width="16" Height="16"  Fill="{Binding TransRetracted, Converter={StaticResource boolToColor}, ElementName=self}"   Stroke="Silver" Margin="54,7,36,7" Grid.Column="1"/>
-                </Grid>
-                <Grid Grid.Row="5" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,5,0">
+                </Grid>-->
+                <!--<Grid Grid.Row="5" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Label Content="Translation Pres" FontSize="16" VerticalContentAlignment="Center" VerticalAlignment="Top" Grid.RowSpan="2" HorizontalContentAlignment="Left"/>
                 </Grid>
 
                 <WrapPanel Grid.Row="5" Grid.Column="2" VerticalAlignment="Center">
                     <TextBlock Width="60" Text="{Binding ElementName=self,Path=TranslationPresValue,StringFormat=\{0:F2\},Mode=TwoWay}" Background="Black" Foreground="Lime" FontSize="16" FontWeight="Bold"/>
                     <TextBlock Margin="2,0" Width="45" Text="psi" Background="Black" Foreground="Lime" FontSize="13" FontWeight="Bold"/>
-                </WrapPanel>
+                </WrapPanel>-->
 
-                <Grid Grid.Row="6" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,5,0">
+                <Grid Grid.Row="4" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Label Content="E" FontSize="16" VerticalContentAlignment="Center" VerticalAlignment="Top" Grid.RowSpan="2" HorizontalContentAlignment="Left"/>
 
-                    <Ellipse Width="16" Height="16"  Fill="{Binding BernoulliExtend, Converter={StaticResource boolToColor}, ElementName=self}"   Stroke="Silver" Margin="14,4,65,4"/>
+                    <Ellipse Width="16" Height="16"  Fill="{Binding BernoulliBladdered, Converter={StaticResource boolToColor}, ElementName=self}"   Stroke="Silver" Margin="14,4,65,4"/>
 
                     <Label Content="R" FontSize="16" VerticalContentAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Left" Margin="49,0,-49,0"/>
-                    <Ellipse Width="16" Height="16"  Fill="{Binding BernoulliExtend, Converter={StaticResource boolReverseToColor}, ElementName=self}"   Stroke="Silver" Margin="63,3,16,3"/>
+                    <Ellipse Width="16" Height="16"  Fill="{Binding BernoulliBladdered, Converter={StaticResource boolReverseToColor}, ElementName=self}"   Stroke="Silver" Margin="63,3,16,3"/>
                 </Grid>
 
-                <WrapPanel Grid.Row="6" Grid.Column="2" VerticalAlignment="Center">
+                <WrapPanel Grid.Row="4" Grid.Column="2" VerticalAlignment="Center">
                     <TextBlock Width="60" Text="{Binding ElementName=self,Path=BernoulliBladderPressure,StringFormat=\{0:F2\},Mode=TwoWay}" Background="Black" Foreground="Lime" FontSize="16" FontWeight="Bold"/>
                     <TextBlock Margin="2,0" Width="45" Text="psi" Background="Black" Foreground="Lime" FontSize="13" FontWeight="Bold"/>
                 </WrapPanel>
 
-                <Grid Grid.Row="7" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,5,0">
+                <Grid Grid.Row="5" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,5,0">
                     <Label Content="N2 Pressure" FontSize="16" VerticalContentAlignment="Center" VerticalAlignment="Top" Grid.RowSpan="2" HorizontalContentAlignment="Left"/>
                 </Grid>
 
-                <WrapPanel Grid.Row="7" Grid.Column="2" VerticalAlignment="Center">
+                <WrapPanel Grid.Row="5" Grid.Column="2" VerticalAlignment="Center">
                     <TextBlock Width="60" Text="{Binding ElementName=self,Path=BernoulliPressure,StringFormat=\{0:F2\},Mode=TwoWay}" Background="Black" Foreground="Lime" FontSize="16" FontWeight="Bold"/>
                     <TextBlock Margin="2,0" Width="45" Text="psi" Background="Black" Foreground="Lime" FontSize="13" FontWeight="Bold"/>
                 </WrapPanel>

+ 2 - 2
Framework/Common/SubstrateTrackings/WaferInfo.cs

@@ -14,8 +14,8 @@ namespace Aitex.Core.Common
     {
         WS0,    //undefine, initialize status
         WS3,
-        WS4,
-        WS6,
+        WS4=100,
+        WS6=150,
         WS150,  //150mm
         WS159,  //150mm with tray
         WS8=200,

+ 0 - 1
Framework/RTEquipmentLibrary/HardwareUnits/Robots/AsyncSocket.cs

@@ -281,7 +281,6 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot
                     byte[] byteData = Encoding.ASCII.GetBytes(data);
                     _socket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), _socket);
                 }
-
                 return true;
                 
             }