Merge branch 'develop' into feature/single-session-login
# Conflicts: # SicRT/Properties/AssemblyInfo.cs # SicRT/ReleaseNotes.md # SicUI/MainView.xaml # SicUI/MainViewModel.cs # SicUI/Properties/AssemblyInfo.cs # ThirdParty/MECF.Framework/MECF.Framework.Common.dll # ThirdParty/MECF.Framework/MECF.Framework.RT.Core.dll # ThirdParty/MECF.Framework/MECF.Framework.RT.EquipmentLibrary.dll # ThirdParty/MECF.Framework/MECF.Framework.Simulator.Core.dll # ThirdParty/MECF.Framework/MECF.Framework.UI.Client.dll # ThirdParty/MECF.Framework/MECF.Framework.UI.Core.dll # ThirdParty/MECF.Framework/Sicentury.Core.dll
This commit is contained in:
commit
3531413790
|
@ -10,6 +10,7 @@ using Aitex.Sorter.Common;
|
|||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.HiWinAligner;
|
||||
using SicModules.Aligners.Routines;
|
||||
|
||||
namespace SicModules.Aligners
|
||||
{
|
||||
|
|
|
@ -3,7 +3,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.Aligners
|
||||
namespace SicModules.Aligners.Routines
|
||||
{
|
||||
public class AlignerAlignRoutine :AlignerBaseRoutine
|
||||
{
|
|
@ -6,7 +6,7 @@ using MECF.Framework.Common.Equipment;
|
|||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.HiWinAligner;
|
||||
|
||||
namespace SicModules.Aligners
|
||||
namespace SicModules.Aligners.Routines
|
||||
{
|
||||
public class AlignerBaseRoutine : ModuleRoutine, IRoutine
|
||||
{
|
|
@ -1,7 +1,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
namespace SicModules.Aligners
|
||||
namespace SicModules.Aligners.Routines
|
||||
{
|
||||
public class AlignerHomeRoutine : AlignerBaseRoutine
|
||||
{
|
|
@ -11,6 +11,7 @@ using Aitex.Core.Utilities;
|
|||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using SicModules.Buffers.Routines;
|
||||
|
||||
namespace SicModules.Buffers
|
||||
{
|
||||
|
|
|
@ -5,7 +5,7 @@ using Aitex.Core.RT.Device.Devices;
|
|||
using Aitex.Core.RT.Routine;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.Buffers
|
||||
namespace SicModules.Buffers.Routines
|
||||
{
|
||||
public class BufferCoolingRoutine : ModuleRoutine, IRoutine
|
||||
{
|
|
@ -3,7 +3,7 @@ using Aitex.Core.RT.Device;
|
|||
using Aitex.Core.RT.Routine;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.Buffers
|
||||
namespace SicModules.Buffers.Routines
|
||||
{
|
||||
class BufferHomeRoutine : ModuleRoutine, IRoutine
|
||||
{
|
|
@ -21,17 +21,17 @@
|
|||
aiOutputVoltage="AI_PSU3OutputVoltage" aiOutputArms="AI_PSU3OutputArms" aiOutputPower="AI_PSU3OutputPower" iSimVoltage="AI_PSU3SimVoltage" aiSimArms="AI_PSU3SimArms" doStatus="DO_PSU3Enable" doReset="DO_PSU3Reset" aoConstant="AO_PSU3Constant" diStatus="DI_OuterHeaterEnableFB" diAlarm="DI_PSU3Alarm" AlarmText="Alarm68 PSU3 Alarm[DI-322]" diCommunicationError="DI_PSU3dpCommunicationError" commAlarmText="" doHeatEnable="DO_HeaterEnable" diHeatEnable="DI_PSUEnableFB" doRelatedEnable="DO_OuterHeaterEnable" />
|
||||
</IoPSUs>
|
||||
<IoSCRs classType="Aitex.Core.RT.Device.Devices.IoSCR" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<IoSCR id="SCR1" display="SCR1" schematicId="SCR1" aioType="float"
|
||||
<IoSCR id="SCR1" display="SCR1" schematicId="SCR1" aioType="float"
|
||||
scBasePath="PM.{module}.Heater" scResLimitMax="SCR1ResistanceMax"
|
||||
aiVoltage="AI_SCR1Voltage" aiArms="AI_SCR1Arms" aiPower="AI_SCR1Power" diStatus="DI_SCR1Status" doReset="DO_SCR1Reset" doStatus="DO_SCR1Enable" diAlarm="DI_SCR1Alarm" AlarmText="" />
|
||||
<IoSCR id="SCR2" display="SCR2" schematicId="SCR2" aioType="float"
|
||||
<IoSCR id="SCR2" display="SCR2" schematicId="SCR2" aioType="float"
|
||||
scBasePath="PM.{module}.Heater" scResLimitMax="SCR2ResistanceMax"
|
||||
aiVoltage="AI_SCR2Voltage" aiArms="AI_SCR2Arms" aiPower="AI_SCR2Power" diStatus="DI_SCR2Status" doReset="DO_SCR2Reset" doStatus="DO_SCR2Enable" diAlarm="DI_SCR2Alarm" AlarmText="" />
|
||||
<IoSCR id="SCR3" display="SCR3" schematicId="SCR3" aioType="float"
|
||||
<IoSCR id="SCR3" display="SCR3" schematicId="SCR3" aioType="float"
|
||||
scBasePath="PM.{module}.Heater" scResLimitMax="SCR3ResistanceMax"
|
||||
aiVoltage="AI_SCR3Voltage" aiArms="AI_SCR3Arms" aiPower="AI_SCR3Power" diStatus="DI_SCR3Status" doReset="DO_SCR3Reset" doStatus="DO_SCR3Enable" diAlarm="DI_SCR3Alarm" AlarmText="" />
|
||||
</IoSCRs>
|
||||
|
||||
|
||||
<IoHeats classType="Aitex.Core.RT.Device.Devices.IoHeat" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<IoHeat module="" id="PMHeatEnable" display="HeatEnable" schematicId="HeatEnable" diEnable="DI_PSUEnableFB" doEnable="DO_HeaterEnable" />
|
||||
</IoHeats>
|
||||
|
@ -171,7 +171,7 @@
|
|||
scAlarmLow=""
|
||||
scAlarmHigh="SHFlowTemp"
|
||||
scWarningOffset="WarningOffset"
|
||||
scFilterDuration="FilterDuration" />
|
||||
scFilterDuration="FilterDuration"/>
|
||||
|
||||
<IoSensorWaterFlowTemp id="FlowTemp2" module="" display="TopFlow(U2)" schematicId="ChamTopFlowTemp" unit="℃"
|
||||
ai="AI_ChamTopFlowTemp"
|
||||
|
@ -191,7 +191,7 @@
|
|||
scBasePath="PM.{module}.CoolingWater"
|
||||
scAlarmHigh="ChamMiddleFlow1Temp"
|
||||
scWarningOffset="WarningOffset"
|
||||
scFilterDuration="FilterDuration" />
|
||||
scFilterDuration="FilterDuration"/>
|
||||
|
||||
<IoSensorWaterFlowTemp id="FlowTemp4" module="" display="MiddleFlow2(U4)" schematicId="ChamMiddleFlow2Temp" unit="℃"
|
||||
ai="AI_ChamMiddleFlow2Temp"
|
||||
|
@ -222,7 +222,7 @@
|
|||
scAlarmHigh="SpareFlowTemp"
|
||||
scWarningOffset="WarningOffset"
|
||||
scFilterDuration="FilterDuration" />
|
||||
|
||||
|
||||
<IoSensorWaterFlowTemp id="FlowTemp7" module="" display="PowerRod1Flow(U7)" schematicId="PowerRod1FlowTemp" unit="℃"
|
||||
ai="AI_PowerRod1FlowTemp"
|
||||
diFlowSW="DI_PowerRod1FlowSW"
|
||||
|
@ -241,7 +241,7 @@
|
|||
scBasePath="PM.{module}.CoolingWater"
|
||||
scAlarmHigh="PowerRod2FlowTemp"
|
||||
scWarningOffset="WarningOffset"
|
||||
scFilterDuration="FilterDuration" />
|
||||
scFilterDuration="FilterDuration"/>
|
||||
|
||||
<IoSensorWaterFlowTemp id="FlowTemp9" module="" display="Foreline2Flow(U9)" schematicId="Foreline2FlowTemp" unit="℃"
|
||||
ai="AI_Foreline2FlowTemp"
|
||||
|
@ -318,26 +318,26 @@
|
|||
<IoPump id="Pump" module="" display="Pump" schematicId="Pump" unit="" aioType="" diDryPumpAlarm="DI_DryPumpAlarm" diPumpExhaustPress="DI_PumpExhaustPressSW" diDryPumpFlow="DI_DryPumpFlowSW" diDryPump1Running="DI_DryPump1Running" diDryPump1Warning="DI_DryPump1Warning" />
|
||||
</IoPumps>
|
||||
<IoPTOffsetAndKs classType="Aitex.Core.RT.Device.Devices.IoPTOffsetAndK" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<IoPTOffsetAndK id="PT1_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT1_Offset" />
|
||||
<IoPTOffsetAndK id="PT1_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT1_K" />
|
||||
<IoPTOffsetAndK id="PT2_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT2_Offset" />
|
||||
<IoPTOffsetAndK id="PT2_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT2_K" />
|
||||
<IoPTOffsetAndK id="PT3_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT3_Offset" />
|
||||
<IoPTOffsetAndK id="PT3_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT3_K" />
|
||||
<IoPTOffsetAndK id="PT4_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT4_Offset" />
|
||||
<IoPTOffsetAndK id="PT4_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT4_K" />
|
||||
<IoPTOffsetAndK id="PT9_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT9_Offset" />
|
||||
<IoPTOffsetAndK id="PT9_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT9_K" />
|
||||
<IoPTOffsetAndK id="PT10_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT10_Offset" />
|
||||
<IoPTOffsetAndK id="PT10_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT10_K" />
|
||||
<IoPTOffsetAndK id="U1_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI3_Offset" />
|
||||
<IoPTOffsetAndK id="U2_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI4_Offset" />
|
||||
<IoPTOffsetAndK id="U3_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI5_Offset" />
|
||||
<IoPTOffsetAndK id="U4_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI2_Offset" />
|
||||
<IoPTOffsetAndK id="U5_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI6_Offset" />
|
||||
<IoPTOffsetAndK id="U6_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI7_Offset" />
|
||||
<IoPTOffsetAndK id="U7_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI8_Offset" />
|
||||
<IoPTOffsetAndK id="U8_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI9_Offset" />
|
||||
<IoPTOffsetAndK id="PT1_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT1_Offset" />
|
||||
<IoPTOffsetAndK id="PT1_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT1_K" />
|
||||
<IoPTOffsetAndK id="PT2_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT2_Offset" />
|
||||
<IoPTOffsetAndK id="PT2_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT2_K" />
|
||||
<IoPTOffsetAndK id="PT3_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT3_Offset" />
|
||||
<IoPTOffsetAndK id="PT3_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT3_K" />
|
||||
<IoPTOffsetAndK id="PT4_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT4_Offset" />
|
||||
<IoPTOffsetAndK id="PT4_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT4_K" />
|
||||
<IoPTOffsetAndK id="PT9_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT9_Offset" />
|
||||
<IoPTOffsetAndK id="PT9_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT9_K" />
|
||||
<IoPTOffsetAndK id="PT10_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT10_Offset" />
|
||||
<IoPTOffsetAndK id="PT10_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT10_K" />
|
||||
<IoPTOffsetAndK id="U1_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI3_Offset" />
|
||||
<IoPTOffsetAndK id="U2_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI4_Offset" />
|
||||
<IoPTOffsetAndK id="U3_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI5_Offset" />
|
||||
<IoPTOffsetAndK id="U4_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI2_Offset" />
|
||||
<IoPTOffsetAndK id="U5_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI6_Offset" />
|
||||
<IoPTOffsetAndK id="U6_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI7_Offset" />
|
||||
<IoPTOffsetAndK id="U7_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI8_Offset" />
|
||||
<IoPTOffsetAndK id="U8_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI9_Offset" />
|
||||
<IoPTOffsetAndK id="U9_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI10_Offset" />
|
||||
<IoPTOffsetAndK id="U10_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI11_Offset" />
|
||||
<IoPTOffsetAndK id="U11_Water" module="" display="WaterTemp" schematicId="" unit="" aioType="float" aoOffset="AO_AI12_Offset" />
|
||||
|
@ -437,7 +437,6 @@
|
|||
<IoSensor id="SensorSCR1Alarm" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCR1Alarm" infoText="" warningText="" alarmText="Alarm69 SCR1.Alarm [DI-323]" />
|
||||
<IoSensor id="SensorSCR2Alarm" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCR2Alarm" infoText="" warningText="" alarmText="Alarm70 SCR2.Alarm [DI-324]" />
|
||||
<IoSensor id="SensorSCR3Alarm" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCR3Alarm" infoText="" warningText="" alarmText="Alarm71 SCR3.Alarm [DI-325]" />
|
||||
<IoSensor id="SensorGatewayCommunicationError" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_GatewayCommunicationError" infoText="" warningText="" alarmText="Alarm78 TD-140 Gateway Communication Error [DI-327]" />
|
||||
<IoSensor id="SensorPSUTCDPCommunicationError" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_PSUdpCommunicationError" infoText="" warningText="" alarmText="Alarm72 PSU dp Communication Error [DI-328]" />
|
||||
<IoSensor id="SensorSCRTCDPCommunicationError" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCRTCDPCommunicationError" infoText="" warningText="" alarmText="Alarm73 SCR dp Communication Error [DI-329]" />
|
||||
<IoSensor id="SensorPSU1dpCommunicationError" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_PSU1dpCommunicationError" infoText="" warningText="" alarmText="Alarm74 PSU-1 dp Communication Error [DI-330]" />
|
||||
|
@ -541,9 +540,9 @@
|
|||
<IoSignalTowers classType="MECF.Framework.RT.EquipmentLibrary.Devices.IoSignalTower" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<IoSignalTower id="SignalTower" module="PM1" display="SignalTower" schematicId="PMSignalTower"
|
||||
eventFile="STEvents.xml"
|
||||
doGreen="DO_TowerGreen"
|
||||
doYellow="DO_TowerYellow"
|
||||
doRed="DO_TowerRed"
|
||||
doGreen="DO_TowerGreen"
|
||||
doYellow="DO_TowerYellow"
|
||||
doRed="DO_TowerRed"
|
||||
doBuzzer="DO_Buzzer" />
|
||||
</IoSignalTowers>
|
||||
<IoChamberMoveBodys classType="Aitex.Core.RT.Device.Devices.IoChamberMoveBody" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
|
@ -596,52 +595,53 @@
|
|||
<IoV99s classType="Aitex.Core.RT.Device.PmDevices.IoV99" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<IoV99 id="Valve99" display="" schematicId="" unit="" valve1="V99" valve2="V99s" />
|
||||
</IoV99s>
|
||||
<IoInterLocks classType="Aitex.Core.RT.Device.Devices.IoInterLock" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<IoInterLock id="PMInterLock" display="" schematicId="" unit="" doLidOpenRoutineSucceed="DO_PurgeRoutineSucceed"
|
||||
doLidCloseRoutineSucceed="DO_CleanRoutineSucceed" doProcessRunning="DO_ProcessRunning" doPreprocessRunning="DO_PreprocessRunning"
|
||||
doCyclePurgeRoutineRunning="DO_CyclePurgeRoutineRunning" doExchangeMoRoutineRunning="DO_ExchangeMoRoutineRunning"
|
||||
doLidCloseRoutineRunning="DO_CleanRoutineRunning" doLidOpenRoutineRunning="DO_PurgeRoutineRunning"
|
||||
doPumpDownRoutineRunning="DO_PumpRoutineRunning" doVentRoutineRunning="DO_VentRoutineRunning"
|
||||
doPostProcessRunning="DO_PostProcessRunning" diServoDriverFaultSW="DI_ServoDriverFaultSW" diH2PressureSW="DI_H2PressureSW"
|
||||
doVACTransferAllowed="DO_VACTransferAllowed" doATMTransferAllowed="DO_ATMTransferAllowed" doProcessIdleRunning="DO_ProcessIdleRunning"
|
||||
doATMIdleRoutineRunning="DO_ATMIdleRoutineRunning" doVACIdleRoutineRunning="DO_VACIdleRoutineRunning" diPSU1Status="DI_PSU1Status"
|
||||
diPSU2Status="DI_PSU2Status" diPSU3Status="DI_PSU3Status" diSCR1Status="DI_SCR1Status" diSCR2Status="DI_SCR2Status" diSCR3Status="DI_SCR3Status"
|
||||
doPSU1Enable="DO_PSU1Enable" doPSU2Enable="DO_PSU2Enable" doPSU3Enable="DO_PSU3Enable" doSCR1Enable="DO_SCR1Enable"
|
||||
doSCR2Enable="DO_SCR2Enable" doSCR3Enable="DO_SCR3Enable" doTCSSupply="DO_TCSFluidInfusion" aiTempCtrl1="AI_PSUTC"
|
||||
doReactorATMTransferReady="DO_ReactorATMTransferReady" doReactorVACTransferReady="DO_ReactorVACTransferReady" diPMATMSW="DI_PMATMSW"
|
||||
aiActualSpeed="AI_ActualSpeed" aiCurPos="AI_ConfinementRingCurPos" aiDownPos="AI_ConfinementRingDownPos" diPSUEnable="DI_PSUEnableFB" diHeaterTempBelow900CSW="DI_HeaterTempLowLimitSW"
|
||||
doPMASlitDoorClosed="DO_SlitVlvClosed" diChamLidClosed="DI_ChamLidClosed" diConfinementRingDown="DI_ConfinementRingDown"
|
||||
aiChamPress="AI_ActualPressure" doReactorPressRisingRate="DO_ReactorPressRisingRateFast" doUPSLowBattery="DO_UPSLowBattery"
|
||||
|
||||
doChamMiddleFlow2Temp="DO_ChamMiddleFlow2Temp"
|
||||
doSHFlowTemp="DO_SHFlowTemp"
|
||||
doChamTopFlowTemp="DO_ChamTopFlowTemp"
|
||||
doChamMiddleFlow1Temp="DO_ChamMiddleFlow1Temp"
|
||||
doChamBottomFlowTemp="DO_ChamBottomFlowTemp"
|
||||
doSpareFlowTemp="DO_SpareFlowTemp"
|
||||
doPowerRod1FlowTemp="DO_PowerRod1FlowTemp"
|
||||
doPowerRod2FlowTemp="DO_PowerRod2FlowTemp"
|
||||
doForelineFlowTemp ="DO_ForelineFlowTemp"
|
||||
doElectrodeWFlowTemp="DO_ElectrodeWFlowTemp"
|
||||
doTMPump1FlowTemp="DO_TMPump1FlowTemp"
|
||||
doTransformerFlowTemp="DO_TransformerFlowTemp"
|
||||
doTMTopLidTemp="DO_Spare1FlowTemp"
|
||||
doTMBufferFlowTemp="DO_Spare2FlowTemp"
|
||||
|
||||
aiChamMiddleFlow2Temp="AI_ChamMiddleFlow2Temp"
|
||||
aiSHFlowTemp="AI_SHFlowTemp"
|
||||
aiChamTopFlowTemp="AI_ChamTopFlowTemp"
|
||||
aiChamMiddleFlowTemp="AI_ChamMiddleFlow1Temp"
|
||||
aiChamBottomFlowTemp="AI_ChamBottomFlowTemp"
|
||||
aiForeline1FlowTemp="AI_Foreline1FlowTemp"
|
||||
aiPowerRod1FlowTemp="AI_PowerRod1FlowTemp"
|
||||
aiPowerRod2FlowTemp="AI_PowerRod2FlowTemp"
|
||||
aiElectrodeWFlowTemp="AI_ElectrodeWFlowTemp"
|
||||
aiTMPump1FlowTemp="AI_TMPumpFlowTemp"
|
||||
aiTMPump2FlowTemp="AI_Foreline1FlowTemp"
|
||||
aiTransformerFlowTemp="AI_TransformerFlowTemp"
|
||||
aiForelineFlowTemp="AI_Foreline2FlowTemp"
|
||||
aiTMTopLidTemp="AI_Spare1Temp"
|
||||
aiTMBufferFlowTemp="AI_Spare2Temp" />
|
||||
</IoInterLocks>
|
||||
<IoInterLocks classType="Aitex.Core.RT.Device.Devices.IoInterLock" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<IoInterLock id="PMInterLock" display="" schematicId="" unit="" doLidOpenRoutineSucceed="DO_PurgeRoutineSucceed"
|
||||
doLidCloseRoutineSucceed="DO_CleanRoutineSucceed" doProcessRunning="DO_ProcessRunning" doPreprocessRunning="DO_PreprocessRunning"
|
||||
doCyclePurgeRoutineRunning="DO_CyclePurgeRoutineRunning" doExchangeMoRoutineRunning="DO_ExchangeMoRoutineRunning"
|
||||
doLidCloseRoutineRunning="DO_CleanRoutineRunning" doLidOpenRoutineRunning="DO_PurgeRoutineRunning"
|
||||
doPumpDownRoutineRunning="DO_PumpRoutineRunning" doVentRoutineRunning="DO_VentRoutineRunning"
|
||||
doPostProcessRunning="DO_PostProcessRunning" diServoDriverFaultSW="DI_ServoDriverFaultSW" diH2PressureSW="DI_H2PressureSW"
|
||||
doVACTransferAllowed="DO_VACTransferAllowed" doATMTransferAllowed="DO_ATMTransferAllowed" doProcessIdleRunning="DO_ProcessIdleRunning"
|
||||
doATMIdleRoutineRunning="DO_ATMIdleRoutineRunning" doVACIdleRoutineRunning="DO_VACIdleRoutineRunning" diPSU1Status="DI_PSU1Status"
|
||||
diPSU2Status="DI_PSU2Status" diPSU3Status="DI_PSU3Status" diSCR1Status="DI_SCR1Status" diSCR2Status="DI_SCR2Status" diSCR3Status="DI_SCR3Status"
|
||||
doPSU1Enable="DO_PSU1Enable" doPSU2Enable="DO_PSU2Enable" doPSU3Enable="DO_PSU3Enable" doSCR1Enable="DO_SCR1Enable"
|
||||
doSCR2Enable="DO_SCR2Enable" doSCR3Enable="DO_SCR3Enable" doTCSSupply="DO_TCSFluidInfusion" aiTempCtrl1="AI_PSUTC"
|
||||
doReactorATMTransferReady="DO_ReactorATMTransferReady" doReactorVACTransferReady="DO_ReactorVACTransferReady" diPMATMSW="DI_PMATMSW"
|
||||
aiActualSpeed="AI_ActualSpeed" aiCurPos="AI_ConfinementRingCurPos" aiDownPos="AI_ConfinementRingDownPos" diPSUEnable="DI_PSUEnableFB" diHeaterTempBelow900CSW="DI_HeaterTempLowLimitSW"
|
||||
doPMASlitDoorClosed="DO_SlitVlvClosed" diChamLidClosed="DI_ChamLidClosed" diConfinementRingDown="DI_ConfinementRingDown"
|
||||
aiChamPress="AI_ActualPressure" doReactorPressRisingRate="DO_ReactorPressRisingRateFast" doUPSLowBattery="DO_UPSLowBattery"
|
||||
|
||||
|
||||
doChamMiddleFlow2Temp="DO_ChamMiddleFlow2Temp"
|
||||
doSHFlowTemp="DO_SHFlowTemp"
|
||||
doChamTopFlowTemp="DO_ChamTopFlowTemp"
|
||||
doChamMiddleFlow1Temp="DO_ChamMiddleFlow1Temp"
|
||||
doChamBottomFlowTemp="DO_ChamBottomFlowTemp"
|
||||
doSpareFlowTemp="DO_SpareFlowTemp"
|
||||
doPowerRod1FlowTemp="DO_PowerRod1FlowTemp"
|
||||
doPowerRod2FlowTemp="DO_PowerRod2FlowTemp"
|
||||
doForelineFlowTemp ="DO_ForelineFlowTemp"
|
||||
doElectrodeWFlowTemp="DO_ElectrodeWFlowTemp"
|
||||
doTMPump1FlowTemp="DO_TMPump1FlowTemp"
|
||||
doTransformerFlowTemp="DO_TransformerFlowTemp"
|
||||
doTMTopLidTemp="DO_Spare1FlowTemp"
|
||||
doTMBufferFlowTemp="DO_Spare2FlowTemp"
|
||||
|
||||
aiChamMiddleFlow2Temp="AI_ChamMiddleFlow2Temp"
|
||||
aiSHFlowTemp="AI_SHFlowTemp"
|
||||
aiChamTopFlowTemp="AI_ChamTopFlowTemp"
|
||||
aiChamMiddleFlowTemp="AI_ChamMiddleFlow1Temp"
|
||||
aiChamBottomFlowTemp="AI_ChamBottomFlowTemp"
|
||||
aiForeline1FlowTemp="AI_Foreline1FlowTemp"
|
||||
aiPowerRod1FlowTemp="AI_PowerRod1FlowTemp"
|
||||
aiPowerRod2FlowTemp="AI_PowerRod2FlowTemp"
|
||||
aiElectrodeWFlowTemp="AI_ElectrodeWFlowTemp"
|
||||
aiTMPump1FlowTemp="AI_TMPumpFlowTemp"
|
||||
aiTMPump2FlowTemp="AI_Foreline1FlowTemp"
|
||||
aiTransformerFlowTemp="AI_TransformerFlowTemp"
|
||||
aiForelineFlowTemp="AI_Foreline2FlowTemp"
|
||||
aiTMTopLidTemp="AI_Spare1Temp"
|
||||
aiTMBufferFlowTemp="AI_Spare2Temp"/>
|
||||
</IoInterLocks>
|
||||
</DeviceModelDefine>
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -8,6 +8,7 @@ using Aitex.Core.Utilities;
|
|||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using SicModules.EFEMs.Routines;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
{
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
namespace SicModules.EFEMs.Routines
|
||||
{
|
||||
public class EFEMHomeRoutine : EfemBaseRoutine
|
||||
{
|
|
@ -14,7 +14,7 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
|
|||
using SicModules.Devices;
|
||||
using static MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase.RobotBaseDevice;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
namespace SicModules.EFEMs.Routines
|
||||
{
|
||||
public class EfemBaseRoutine : ModuleRoutine, IRoutine
|
||||
{
|
|
@ -7,10 +7,12 @@ using MECF.Framework.Common.Equipment;
|
|||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadLocks;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.UnLoad;
|
||||
using SicModules.LLs;
|
||||
using SicModules.LLs.Routines;
|
||||
using SicModules.TMs;
|
||||
using SicModules.UnLoads;
|
||||
using SicModules.UnLoads.Routines;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
namespace SicModules.EFEMs.Routines
|
||||
{
|
||||
public class EfemSlitValveRoutine : EfemBaseRoutine
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
namespace SicModules.EFEMs.Routines
|
||||
{
|
||||
public class TrayRobotHomeRoutine : EfemBaseRoutine
|
||||
{
|
|
@ -4,7 +4,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
namespace SicModules.EFEMs.Routines
|
||||
{
|
||||
public class TrayRobotMapRoutine : EfemBaseRoutine
|
||||
{
|
|
@ -6,8 +6,9 @@ using MECF.Framework.Common.Equipment;
|
|||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
|
||||
using SicModules.LLs;
|
||||
using SicModules.LLs.Routines;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
namespace SicModules.EFEMs.Routines
|
||||
{
|
||||
public class TrayRobotPickRoutine : EfemBaseRoutine
|
||||
{
|
|
@ -8,8 +8,9 @@ using MECF.Framework.Common.SubstrateTrackings;
|
|||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
|
||||
using SicModules.Devices;
|
||||
using SicModules.LLs;
|
||||
using SicModules.LLs.Routines;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
namespace SicModules.EFEMs.Routines
|
||||
{
|
||||
public class TrayRobotPlaceRoutine : EfemBaseRoutine
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
namespace SicModules.EFEMs.Routines
|
||||
{
|
||||
public class WaferRobotHomeRoutine : EfemBaseRoutine
|
||||
{
|
|
@ -4,7 +4,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
namespace SicModules.EFEMs.Routines
|
||||
{
|
||||
public class WaferRobotMapRoutine : EfemBaseRoutine
|
||||
{
|
|
@ -8,9 +8,11 @@ using MECF.Framework.Common.Equipment;
|
|||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
|
||||
using SicModules.LLs;
|
||||
using SicModules.LLs.Routines;
|
||||
using SicModules.UnLoads;
|
||||
using SicModules.UnLoads.Routines;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
namespace SicModules.EFEMs.Routines
|
||||
{
|
||||
public class WaferRobotPickRoutine : EfemBaseRoutine
|
||||
{
|
|
@ -9,9 +9,11 @@ using MECF.Framework.Common.SubstrateTrackings;
|
|||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.HiWinAligner;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
|
||||
using SicModules.LLs;
|
||||
using SicModules.LLs.Routines;
|
||||
using SicModules.UnLoads;
|
||||
using SicModules.UnLoads.Routines;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
namespace SicModules.EFEMs.Routines
|
||||
{
|
||||
public class WaferRobotPlaceRoutine : EfemBaseRoutine
|
||||
{
|
|
@ -8,6 +8,7 @@ using Aitex.Core.Utilities;
|
|||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Fsm;
|
||||
using SicModules.EFEMs.Routines;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
{
|
||||
|
|
|
@ -8,6 +8,7 @@ using Aitex.Core.Utilities;
|
|||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Fsm;
|
||||
using SicModules.EFEMs.Routines;
|
||||
|
||||
namespace SicModules.EFEMs
|
||||
{
|
||||
|
|
|
@ -13,6 +13,7 @@ using Aitex.Core.Utilities;
|
|||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using SicModules.LLs.Routines;
|
||||
|
||||
namespace SicModules.LLs
|
||||
{
|
||||
|
|
|
@ -4,7 +4,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadHomeRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -11,7 +11,7 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TMs;
|
|||
using SicModules.Devices;
|
||||
using SicModules.TMs;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockBaseRoutine : ModuleRoutine, IRoutine
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockClawRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -3,7 +3,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockGroupRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -8,7 +8,7 @@ using MECF.Framework.Common.DBCore;
|
|||
using MECF.Framework.Common.Equipment;
|
||||
using SicModules.Devices;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockLeakCheckRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -1,7 +1,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockLiftRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -3,7 +3,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockPrepareTransferRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -6,7 +6,7 @@ using Aitex.Core.RT.SCCore;
|
|||
using MECF.Framework.Common.Equipment;
|
||||
using SicModules.Devices;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockPumpRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -6,7 +6,7 @@ using Aitex.Core.RT.SCCore;
|
|||
using MECF.Framework.Common.Equipment;
|
||||
using SicModules.Devices;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockPurgeRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -4,7 +4,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockServoToRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -1,4 +1,4 @@
|
|||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockTrayAlignerRoutine:LoadLockBaseRoutine
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
using Aitex.Core.RT.Device.Unit;
|
||||
using Aitex.Core.RT.Routine;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockTrayClawRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -6,7 +6,7 @@ using Aitex.Core.RT.SCCore;
|
|||
using MECF.Framework.Common.Equipment;
|
||||
using SicModules.Devices;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockVentRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadRotationHomeOffsetRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.LLs
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadSeparateRoutine : LoadLockBaseRoutine
|
||||
{
|
|
@ -6,6 +6,7 @@ using Aitex.Core.Common;
|
|||
using Aitex.Core.RT.DataCenter;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.Fsm;
|
||||
using Aitex.Core.RT.IOCore.Interlock;
|
||||
using Aitex.Core.RT.OperationCenter;
|
||||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
@ -171,6 +172,11 @@ namespace SicModules.PMs
|
|||
get { return IsServiceIdle; }// !IsOnline; }
|
||||
}
|
||||
|
||||
public bool DI206EqualsTrue_OR_DO177EqualsTrue
|
||||
{
|
||||
get { return (V73.Status || _pmInterLock.DoExchangeMoRoutineRunning); }
|
||||
}
|
||||
|
||||
public override bool IsInit
|
||||
{
|
||||
get { return FsmState == (int)STATE.Init; }
|
||||
|
@ -414,9 +420,24 @@ namespace SicModules.PMs
|
|||
|
||||
InitalDeviceFunc();
|
||||
|
||||
InitScChangeCallback();
|
||||
|
||||
return base.Initialize();
|
||||
}
|
||||
|
||||
private void InitScChangeCallback()
|
||||
{
|
||||
// Bypass Interlock时自动Offline
|
||||
SC.RegisterValueChangedCallback($"PM.{Module}.BypassInterlock", isBypassed =>
|
||||
{
|
||||
if (isBypassed is true && IsOnline)
|
||||
{
|
||||
PutOffline();
|
||||
EV.PostWarningLog(Module, "Offline automatically due to interlock bypassed");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void InitRoutine()
|
||||
{
|
||||
_purgeRoutine = new PMPurgeRoutine(ModuleHelper.Converter(Module), this);
|
||||
|
@ -461,10 +482,13 @@ namespace SicModules.PMs
|
|||
DATA.Subscribe($"{Module}.Status", () => StringFsmStatus.Replace("0", "").Replace("1", "").Replace("2", ""));
|
||||
DATA.Subscribe($"{Module}.IsOnline", () => IsOnline);
|
||||
DATA.Subscribe($"{Module}.IsService", () => IsServiceIdle);
|
||||
DATA.Subscribe($"{Module}.DI206EqualsTrue_OR_DO177EqualsTrue", () => DI206EqualsTrue_OR_DO177EqualsTrue);
|
||||
|
||||
DATA.Subscribe($"{Module}.IsAlarm", () => IsAlarm);
|
||||
DATA.Subscribe($"{Module}.IsWarning", () => IsWarning);
|
||||
DATA.Subscribe($"{Module}.IsIdle", () => !IsWarning && (IsIdle || IsInit || IsSafety));
|
||||
DATA.Subscribe($"{Module}.IsBypassInterlock", () => IsBypassInterlock);
|
||||
DATA.Subscribe($"{Module}.IsBypassEnableTable", () => IsBypassEnableTable);
|
||||
|
||||
DATA.Subscribe($"{Module}.WaferSize", () => WaferManager.Instance.GetWaferSize(_module, 0).ToString());
|
||||
|
||||
|
@ -571,12 +595,12 @@ namespace SicModules.PMs
|
|||
{
|
||||
if (IsService)
|
||||
{
|
||||
EV.PostWarningLog(Module, $"{Module} is Service State,do not Online");
|
||||
EV.PostWarningLog(Module, $"{Module} is Service State, can not be Online");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查互锁,如果互锁旁路,则不能Online
|
||||
DoIfInterlockEnabled(() =>
|
||||
DoIfInterlockNotBypassed(() =>
|
||||
{
|
||||
IsOnline = true;
|
||||
NotifyModuleOfflineCancellation.Cancel();
|
||||
|
@ -761,7 +785,6 @@ namespace SicModules.PMs
|
|||
|
||||
//ProcessIdle
|
||||
Transition(STATE.ProcessIdle, MSG.SelectRecipe, FsmSelectRecipe, STATE.ProcessIdle);
|
||||
|
||||
Transition(STATE.ProcessIdle, MSG.RunRecipe, FsmStartPreProcess, STATE.PreProcess);
|
||||
|
||||
//PreProcess
|
||||
|
@ -820,6 +843,7 @@ namespace SicModules.PMs
|
|||
Transition(STATE.StopHeat, MSG.Abort, FsmAbortTask, STATE.ProcessIdle);
|
||||
}
|
||||
|
||||
|
||||
private bool FsmToInit(object[] param)
|
||||
{
|
||||
return true;
|
||||
|
@ -944,6 +968,13 @@ namespace SicModules.PMs
|
|||
private bool FsmToProcessIdle(object[] param)
|
||||
{
|
||||
Result ret;
|
||||
|
||||
if (IsService)
|
||||
{
|
||||
EV.PostWarningLog(Module, $"{Module} is Service State, can not do ProcessIdle");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (SC.GetValue<bool>("PM.IsProcessIdleRoutine"))
|
||||
{
|
||||
string RoutineFileName = SC.GetStringValue($"PM.{Module}.ProcessIdleFileName");
|
||||
|
@ -1140,11 +1171,20 @@ namespace SicModules.PMs
|
|||
if (IsServiceIdle)
|
||||
{
|
||||
// 如果退出Service模式,需要检查Interlock是否启用,如果未启用,不能退出Service模式
|
||||
DoIfInterlockEnabled(() => { IsServiceIdle = false; });
|
||||
DoIfInterlockNotBypassed(() =>
|
||||
{
|
||||
IsServiceIdle = false;
|
||||
|
||||
// 如果退出Service模式,Interlock信息以Warning等级输出
|
||||
Singleton<InterlockManager>.Instance.SetEventLevel(Module, false);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
IsServiceIdle = true;
|
||||
|
||||
// 如果退出Service模式,Interlock信息以Info等级输出
|
||||
Singleton<InterlockManager>.Instance.SetEventLevel(Module, true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -1214,6 +1254,12 @@ namespace SicModules.PMs
|
|||
// return false;
|
||||
//}
|
||||
|
||||
if (IsBypassInterlock || IsBypassEnableTable)
|
||||
{
|
||||
EV.PostWarningLog(Module, $"Interlock bypassed, unable to start process");
|
||||
return false;
|
||||
}
|
||||
|
||||
_preprocessRoutine.Init((string)param[0], (bool)param[1], (bool)param[2]);
|
||||
Result ret = StartRoutine(_preprocessRoutine);
|
||||
if (ret == Result.FAIL || ret == Result.DONE)
|
||||
|
@ -1231,6 +1277,12 @@ namespace SicModules.PMs
|
|||
|
||||
private bool FsmEnterProcess(object[] param)
|
||||
{
|
||||
if (IsService)
|
||||
{
|
||||
EV.PostWarningLog(Module, $"{Module} is Service State, can not enter Process");
|
||||
return false;
|
||||
}
|
||||
|
||||
WaferManager.Instance.UpdateWaferProcessStatus(ModuleHelper.Converter(Module), 0, WaferProcessStatus.InProcess);
|
||||
_procDataStatManager.Begin(_recipeRunningInfo.RecipeName);
|
||||
return true;
|
||||
|
|
|
@ -90,7 +90,8 @@ namespace SicModules.PMs
|
|||
|
||||
#region InterLock
|
||||
|
||||
[Tag("PMInterLock")] public IoInterLock _pmInterLock { get; set; }
|
||||
[Tag("PMInterLock")]
|
||||
public IoInterLock _pmInterLock { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -391,7 +392,6 @@ namespace SicModules.PMs
|
|||
|
||||
#endregion
|
||||
|
||||
|
||||
#region CoolingWater
|
||||
|
||||
[Tag("FlowTemp1")]
|
||||
|
@ -439,6 +439,7 @@ namespace SicModules.PMs
|
|||
|
||||
#endregion
|
||||
|
||||
|
||||
Func<MemberInfo, bool> _hasTagAttribute;
|
||||
Func<object, bool> _isTagAttribute;
|
||||
|
||||
|
@ -2136,7 +2137,7 @@ namespace SicModules.PMs
|
|||
|
||||
#region Enable Table中起保护作用的内容
|
||||
|
||||
////4.C (MO Line valve)(DO13 V43 常闭)(DO18 V48 常闭) {V43s,V48s同步增加条件}
|
||||
//4.C (MO Line valve)(DO13 V43 常闭)(DO18 V48 常闭) {V43s,V48s同步增加条件}
|
||||
if (V43 != null)
|
||||
{
|
||||
V43.FuncCheckInterLock = (setValue) =>
|
||||
|
@ -2297,254 +2298,254 @@ namespace SicModules.PMs
|
|||
|
||||
|
||||
//6.GasBox.Vent.Pump (DO45 V72常闭)
|
||||
if (V72 != null)
|
||||
{
|
||||
V72.FuncCheckInterLock = (setValue) =>
|
||||
{
|
||||
if (setValue)
|
||||
{
|
||||
if (EPV2 != null && _ioThrottleValve != null)
|
||||
{
|
||||
//if (V72 != null)
|
||||
//{
|
||||
// V72.FuncCheckInterLock = (setValue) =>
|
||||
// {
|
||||
// if (setValue)
|
||||
// {
|
||||
// if (EPV2 != null && _ioThrottleValve != null)
|
||||
// {
|
||||
|
||||
if (!EPV2.Status)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:EPV2 should be open!");
|
||||
return false;
|
||||
}
|
||||
// if (!EPV2.Status)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:EPV2 should be open!");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (!_ioThrottleValve.TVValveEnable)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:TV should be enable!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// if (!_ioThrottleValve.TVValveEnable)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:TV should be enable!");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return true;
|
||||
};
|
||||
// return true;
|
||||
// };
|
||||
|
||||
//返回True,表明条件满足,强制关阀
|
||||
V72.FuncForceOpen = (curStatue) =>
|
||||
{
|
||||
if (curStatue)
|
||||
{
|
||||
//满足条件,强制执行
|
||||
if (EPV2 != null && _ioThrottleValve != null)
|
||||
{
|
||||
if (!EPV2.Status || !_ioThrottleValve.TVValveEnable)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// //返回True,表明条件满足,强制关阀
|
||||
// V72.FuncForceOpen = (curStatue) =>
|
||||
// {
|
||||
// if (curStatue)
|
||||
// {
|
||||
// //满足条件,强制执行
|
||||
// if (EPV2 != null && _ioThrottleValve != null)
|
||||
// {
|
||||
// if (!EPV2.Status || !_ioThrottleValve.TVValveEnable)
|
||||
// {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
// return false;
|
||||
// };
|
||||
//}
|
||||
|
||||
//13.MO Source.VAc (DO16 V46常闭,DO20 V50常闭) [DI206 V73 常闭] {V46s,V50s同步增加条件}
|
||||
if (V46 != null)
|
||||
{
|
||||
V46.FuncCheckInterLock = (setValue) =>
|
||||
{
|
||||
if (setValue)
|
||||
{
|
||||
if (V73 != null && V43 != null && _pmInterLock != null)
|
||||
{
|
||||
if (V43.Status)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V43 should be closed");
|
||||
return false;
|
||||
}
|
||||
//if (V46 != null)
|
||||
//{
|
||||
// V46.FuncCheckInterLock = (setValue) =>
|
||||
// {
|
||||
// if (setValue)
|
||||
// {
|
||||
// if (V73 != null && V43 != null && _pmInterLock != null)
|
||||
// {
|
||||
// if (V43.Status)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V43 should be closed");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (!IsServiceMode)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:PM should in service mode");
|
||||
return false;
|
||||
}
|
||||
// if (!IsServiceMode)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:PM should in service mode");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning))
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V73 is open or Not ExchangeMo routine running ");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V43,V73,V48 is not null!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// if (!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning))
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V73 is open or Not ExchangeMo routine running ");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V43,V73,V48 is not null!");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return true;
|
||||
};
|
||||
// return true;
|
||||
// };
|
||||
|
||||
//返回True,表明条件满足,强制关阀
|
||||
V46.FuncForceOpen = (curStatue) =>
|
||||
{
|
||||
if (curStatue)
|
||||
{
|
||||
//满足条件,强制执行
|
||||
if (V73 != null && V43 != null && _pmInterLock != null)
|
||||
{
|
||||
if (V43.Status || !IsServiceMode ||
|
||||
(!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// //返回True,表明条件满足,强制关阀
|
||||
// V46.FuncForceOpen = (curStatue) =>
|
||||
// {
|
||||
// if (curStatue)
|
||||
// {
|
||||
// //满足条件,强制执行
|
||||
// if (V73 != null && V43 != null && _pmInterLock != null)
|
||||
// {
|
||||
// if (V43.Status || !IsServiceMode ||
|
||||
// (!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning)))
|
||||
// {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
// return false;
|
||||
// };
|
||||
//}
|
||||
|
||||
if (V46s != null)
|
||||
{
|
||||
V46s.FuncCheckInterLock = (setValue) =>
|
||||
{
|
||||
if (setValue)
|
||||
{
|
||||
if (V73 != null && V43 != null && _pmInterLock != null)
|
||||
{
|
||||
if (V43.Status)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V43 should be closed");
|
||||
return false;
|
||||
}
|
||||
//if (V46s != null)
|
||||
//{
|
||||
// V46s.FuncCheckInterLock = (setValue) =>
|
||||
// {
|
||||
// if (setValue)
|
||||
// {
|
||||
// if (V73 != null && V43 != null && _pmInterLock != null)
|
||||
// {
|
||||
// if (V43.Status)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V43 should be closed");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (!IsServiceMode)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:PM should in service mode");
|
||||
return false;
|
||||
}
|
||||
// if (!IsServiceMode)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:PM should in service mode");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning))
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V73 is open or Not ExchangeMo routine running ");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V43,V73,V48 is not null!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// if (!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning))
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V73 is open or Not ExchangeMo routine running ");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V43,V73,V48 is not null!");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return true;
|
||||
};
|
||||
}
|
||||
// return true;
|
||||
// };
|
||||
//}
|
||||
|
||||
if (V50 != null)
|
||||
{
|
||||
V50.FuncCheckInterLock = (setValue) =>
|
||||
{
|
||||
if (setValue)
|
||||
{
|
||||
if (V73 != null && V48 != null && _pmInterLock != null)
|
||||
{
|
||||
if (V48.Status)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V48 should be closed");
|
||||
return false;
|
||||
}
|
||||
//if (V50 != null)
|
||||
//{
|
||||
// V50.FuncCheckInterLock = (setValue) =>
|
||||
// {
|
||||
// if (setValue)
|
||||
// {
|
||||
// if (V73 != null && V48 != null && _pmInterLock != null)
|
||||
// {
|
||||
// if (V48.Status)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V48 should be closed");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (!IsServiceMode)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:PM should in service mode");
|
||||
return false;
|
||||
}
|
||||
// if (!IsServiceMode)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:PM should in service mode");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning))
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V73 be open or Not ExchangeMo routine running ");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V73,V43,V48 is not null!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// if (!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning))
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V73 be open or Not ExchangeMo routine running ");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V73,V43,V48 is not null!");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return true;
|
||||
};
|
||||
// return true;
|
||||
// };
|
||||
|
||||
//返回True,表明条件满足,强制关阀
|
||||
V50.FuncForceOpen = (curStatue) =>
|
||||
{
|
||||
if (curStatue)
|
||||
{
|
||||
//满足条件,强制执行
|
||||
if (V73 != null && V48 != null && _pmInterLock != null)
|
||||
{
|
||||
if (V48.Status || !IsServiceMode ||
|
||||
(!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// //返回True,表明条件满足,强制关阀
|
||||
// V50.FuncForceOpen = (curStatue) =>
|
||||
// {
|
||||
// if (curStatue)
|
||||
// {
|
||||
// //满足条件,强制执行
|
||||
// if (V73 != null && V48 != null && _pmInterLock != null)
|
||||
// {
|
||||
// if (V48.Status || !IsServiceMode ||
|
||||
// (!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning)))
|
||||
// {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return false;
|
||||
};
|
||||
// return false;
|
||||
// };
|
||||
|
||||
}
|
||||
//}
|
||||
|
||||
if (V50s != null)
|
||||
{
|
||||
V50s.FuncCheckInterLock = (setValue) =>
|
||||
{
|
||||
if (setValue)
|
||||
{
|
||||
if (V73 != null && V48 != null && _pmInterLock != null)
|
||||
{
|
||||
if (V48.Status)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V48 should be closed");
|
||||
return false;
|
||||
}
|
||||
//if (V50s != null)
|
||||
//{
|
||||
// V50s.FuncCheckInterLock = (setValue) =>
|
||||
// {
|
||||
// if (setValue)
|
||||
// {
|
||||
// if (V73 != null && V48 != null && _pmInterLock != null)
|
||||
// {
|
||||
// if (V48.Status)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V48 should be closed");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (!IsServiceMode)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:PM should in service mode");
|
||||
return false;
|
||||
}
|
||||
// if (!IsServiceMode)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:PM should in service mode");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning))
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V73 be open or Not ExchangeMo routine running ");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V73,V43,V48 should not be null!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// if (!(V73.Status || !_pmInterLock.DoExchangeMoRoutineRunning))
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V73 be open or Not ExchangeMo routine running ");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V73,V43,V48 should not be null!");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return true;
|
||||
};
|
||||
}
|
||||
// return true;
|
||||
// };
|
||||
//}
|
||||
|
||||
//if (V64 != null)
|
||||
//{
|
||||
|
@ -2638,121 +2639,121 @@ namespace SicModules.PMs
|
|||
//}
|
||||
|
||||
//14.DOR Vac (DO48 V75常闭)[V76常闭]
|
||||
if (V75 != null)
|
||||
{
|
||||
V75.FuncCheckInterLock = (setValue) =>
|
||||
{
|
||||
if (setValue)
|
||||
{
|
||||
if (V76 != null)
|
||||
{
|
||||
if (V76.Status)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V76 should be closed");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V76 should be not null");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//if (V75 != null)
|
||||
//{
|
||||
// V75.FuncCheckInterLock = (setValue) =>
|
||||
// {
|
||||
// if (setValue)
|
||||
// {
|
||||
// if (V76 != null)
|
||||
// {
|
||||
// if (V76.Status)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V76 should be closed");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V76 should be not null");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return true;
|
||||
};
|
||||
// return true;
|
||||
// };
|
||||
|
||||
//返回True,表明条件满足,强制关阀
|
||||
V75.FuncForceOpen = (curStatue) =>
|
||||
{
|
||||
if (curStatue)
|
||||
{
|
||||
//满足条件,强制执行
|
||||
if (V76 != null)
|
||||
{
|
||||
if (V76.Status)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// //返回True,表明条件满足,强制关阀
|
||||
// V75.FuncForceOpen = (curStatue) =>
|
||||
// {
|
||||
// if (curStatue)
|
||||
// {
|
||||
// //满足条件,强制执行
|
||||
// if (V76 != null)
|
||||
// {
|
||||
// if (V76.Status)
|
||||
// {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
// return false;
|
||||
// };
|
||||
//}
|
||||
|
||||
//15.DOR Refill (DO49 V76常闭)
|
||||
if (V76 != null)
|
||||
{
|
||||
V76.FuncCheckInterLock = (setValue) =>
|
||||
{
|
||||
if (setValue)
|
||||
{
|
||||
if (SensorPMATMSW != null && _pmInterLock != null && V75 != null)
|
||||
{
|
||||
if (SensorPMATMSW.Value) //DI9=1
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:DI-4 PM AT ATM ");
|
||||
return false;
|
||||
}
|
||||
////15.DOR Refill (DO49 V76常闭)
|
||||
//if (V76 != null)
|
||||
//{
|
||||
// V76.FuncCheckInterLock = (setValue) =>
|
||||
// {
|
||||
// if (setValue)
|
||||
// {
|
||||
// if (SensorPMATMSW != null && _pmInterLock != null && V75 != null)
|
||||
// {
|
||||
// if (SensorPMATMSW.Value) //DI9=1
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:DI-4 PM AT ATM ");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (!_pmInterLock.DoLidOpenRoutineSucceed)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:Purge Routine Succeed should be on ");
|
||||
return false;
|
||||
}
|
||||
// if (!_pmInterLock.DoLidOpenRoutineSucceed)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:Purge Routine Succeed should be on ");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (V75.Status)
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:V75 should be Closed!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EV.PostWarningLog(Module, "Condition:SensorPMATMSW should be not null");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// if (V75.Status)
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:V75 should be Closed!");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// EV.PostWarningLog(Module, "Condition:SensorPMATMSW should be not null");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return true;
|
||||
};
|
||||
// return true;
|
||||
// };
|
||||
|
||||
//返回True,表明条件满足,强制关阀
|
||||
V76.FuncForceOpen = (curStatue) =>
|
||||
{
|
||||
if (curStatue)
|
||||
{
|
||||
//满足条件,强制执行
|
||||
if (SensorPMATMSW != null)
|
||||
{
|
||||
if (SensorPMATMSW.Value)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// //返回True,表明条件满足,强制关阀
|
||||
// V76.FuncForceOpen = (curStatue) =>
|
||||
// {
|
||||
// if (curStatue)
|
||||
// {
|
||||
// //满足条件,强制执行
|
||||
// if (SensorPMATMSW != null)
|
||||
// {
|
||||
// if (SensorPMATMSW.Value)
|
||||
// {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
|
||||
//V76和V75只能开一个
|
||||
if (V75 != null)
|
||||
{
|
||||
if (V75.Status)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// //V76和V75只能开一个
|
||||
// if (V75 != null)
|
||||
// {
|
||||
// if (V75.Status)
|
||||
// {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
// return false;
|
||||
// };
|
||||
//}
|
||||
|
||||
//16.17.PM pump bypass valve force open (DO52 V27) Checked
|
||||
if (V27 != null)
|
||||
|
@ -2948,7 +2949,6 @@ namespace SicModules.PMs
|
|||
|
||||
#endregion Enable Table中起保护作用的内容
|
||||
|
||||
|
||||
#region 以下内容为InterLock表中复合条件内容
|
||||
|
||||
////10.TMA.Vent (DO12 V42常闭)[V41常闭]
|
||||
|
|
|
@ -58,16 +58,16 @@
|
|||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Aligners\AlignerAlignRoutine.cs" />
|
||||
<Compile Include="Aligners\AlignerBaseRoutine.cs" />
|
||||
<Compile Include="Aligners\AlignerHomeRoutine.cs" />
|
||||
<Compile Include="Aligners\Routines\AlignerAlignRoutine.cs" />
|
||||
<Compile Include="Aligners\Routines\AlignerBaseRoutine.cs" />
|
||||
<Compile Include="Aligners\Routines\AlignerHomeRoutine.cs" />
|
||||
<Compile Include="Aligners\AlignerModule.cs" />
|
||||
<Compile Include="Aligners\AlignerModuleBase.cs" />
|
||||
<Compile Include="Aligners\SicAligner.cs" />
|
||||
<Compile Include="Buffers\BufferModule.cs" />
|
||||
<Compile Include="Buffers\BufferModuleBase.cs" />
|
||||
<Compile Include="Buffers\BufferCoolingRoutine.cs" />
|
||||
<Compile Include="Buffers\BufferHomeRoutine.cs" />
|
||||
<Compile Include="Buffers\Routines\BufferCoolingRoutine.cs" />
|
||||
<Compile Include="Buffers\Routines\BufferHomeRoutine.cs" />
|
||||
<Compile Include="Buffers\SicBuffer.cs" />
|
||||
<Compile Include="Cassettes\CassetteModule.cs" />
|
||||
<Compile Include="Cassettes\CassetteModuleBase.cs" />
|
||||
|
@ -78,40 +78,40 @@
|
|||
<Compile Include="Devices\SicAds.cs" />
|
||||
<Compile Include="Devices\SiemensIoProvider.cs" />
|
||||
<Compile Include="Devices\TcAds.cs" />
|
||||
<Compile Include="EFEMs\EfemBaseRoutine.cs" />
|
||||
<Compile Include="EFEMs\TrayRobotHomeRoutine.cs" />
|
||||
<Compile Include="EFEMs\WaferRobotHomeRoutine.cs" />
|
||||
<Compile Include="EFEMs\Routines\EfemBaseRoutine.cs" />
|
||||
<Compile Include="EFEMs\Routines\TrayRobotHomeRoutine.cs" />
|
||||
<Compile Include="EFEMs\Routines\WaferRobotHomeRoutine.cs" />
|
||||
<Compile Include="EFEMs\TrayRobotModule.cs" />
|
||||
<Compile Include="EFEMs\WaferRobotModule.cs" />
|
||||
<Compile Include="EFEMs\EFEMModule.cs" />
|
||||
<Compile Include="EFEMs\EFEMModuleBase.cs" />
|
||||
<Compile Include="EFEMs\EfemSlitValveRoutine.cs" />
|
||||
<Compile Include="EFEMs\EFEMHomeRoutine.cs" />
|
||||
<Compile Include="EFEMs\Routines\EfemSlitValveRoutine.cs" />
|
||||
<Compile Include="EFEMs\Routines\EFEMHomeRoutine.cs" />
|
||||
<Compile Include="EFEMs\SicEFEM.cs" />
|
||||
<Compile Include="EFEMs\SicEfemRobot.cs" />
|
||||
<Compile Include="EFEMs\TrayRobotPickRoutine.cs" />
|
||||
<Compile Include="EFEMs\TrayRobotPlaceRoutine.cs" />
|
||||
<Compile Include="EFEMs\TrayRobotMapRoutine.cs" />
|
||||
<Compile Include="EFEMs\WaferRobotPlaceRoutine.cs" />
|
||||
<Compile Include="EFEMs\WaferRobotMapRoutine.cs" />
|
||||
<Compile Include="EFEMs\WaferRobotPickRoutine.cs" />
|
||||
<Compile Include="LLs\LoadHomeRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockBaseRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockClawRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockGroupRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockLeakCheckRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockLiftRoutine.cs" />
|
||||
<Compile Include="EFEMs\Routines\TrayRobotPickRoutine.cs" />
|
||||
<Compile Include="EFEMs\Routines\TrayRobotPlaceRoutine.cs" />
|
||||
<Compile Include="EFEMs\Routines\TrayRobotMapRoutine.cs" />
|
||||
<Compile Include="EFEMs\Routines\WaferRobotPlaceRoutine.cs" />
|
||||
<Compile Include="EFEMs\Routines\WaferRobotMapRoutine.cs" />
|
||||
<Compile Include="EFEMs\Routines\WaferRobotPickRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockModule.cs" />
|
||||
<Compile Include="LLs\LoadLockModuleBase.cs" />
|
||||
<Compile Include="LLs\LoadLockPrepareTransferRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockPumpRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockPurgeRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockServoToRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockTrayAlignerRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockTrayClawRoutine.cs" />
|
||||
<Compile Include="LLs\LoadLockVentRoutine.cs" />
|
||||
<Compile Include="LLs\LoadRotationHomeOffsetRoutine.cs" />
|
||||
<Compile Include="LLs\LoadSeparateRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadHomeRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockBaseRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockClawRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockGroupRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockLeakCheckRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockLiftRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockPrepareTransferRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockPumpRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockPurgeRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockServoToRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockTrayAlignerRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockTrayClawRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockVentRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadRotationHomeOffsetRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadSeparateRoutine.cs" />
|
||||
<Compile Include="LLs\SicLoadLock.cs" />
|
||||
<Compile Include="PMs\PMModule.cs" />
|
||||
<Compile Include="PMs\PMModuleDevice.cs" />
|
||||
|
@ -160,43 +160,43 @@
|
|||
<Compile Include="PMs\Utilities\UnitAlarmItem.cs" />
|
||||
<Compile Include="PMs\Utilities\XmlConfig.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="TMs\TMHomeRoutine.cs" />
|
||||
<Compile Include="TMs\TMServoRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMBaseRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMHomeRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMLeakcheckRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMPressureBalancePidRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMPressureBalanceRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMPumpRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMPurgeRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMRobotExtendRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMRobotGoToRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMRobotHomeRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMRobotPickAndPlaceRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMRobotPickRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMRobotPlaceRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMRobotRetractRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMServoRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMSlitValveRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMVentRoutine.cs" />
|
||||
<Compile Include="TMs\Routines\TMVerifySlitValveRoutine.cs" />
|
||||
<Compile Include="TMs\SicTM.cs" />
|
||||
<Compile Include="TMs\SicTMRobot.cs" />
|
||||
<Compile Include="TMs\TMBaseRoutine.cs" />
|
||||
<Compile Include="TMs\TMLeakcheckRoutine.cs" />
|
||||
<Compile Include="TMs\TMModule.cs" />
|
||||
<Compile Include="TMs\TMModuleBase.cs" />
|
||||
<Compile Include="TMs\TMPressureBalancePidRoutine.cs" />
|
||||
<Compile Include="TMs\TMPressureBalanceRoutine.cs" />
|
||||
<Compile Include="TMs\TMPumpRoutine.cs" />
|
||||
<Compile Include="TMs\TMPurgeRoutine.cs" />
|
||||
<Compile Include="TMs\TMRobotExtendRoutine.cs" />
|
||||
<Compile Include="TMs\TMRobotGoToRoutine.cs" />
|
||||
<Compile Include="TMs\TMRobotHomeRoutine.cs" />
|
||||
<Compile Include="TMs\TMRobotPickAndPlaceRoutine.cs" />
|
||||
<Compile Include="TMs\TMRobotPickRoutine.cs" />
|
||||
<Compile Include="TMs\TMRobotPlaceRoutine.cs" />
|
||||
<Compile Include="TMs\TMRobotRetractRoutine.cs" />
|
||||
<Compile Include="TMs\TMSlitValveRoutine.cs" />
|
||||
<Compile Include="TMs\TMVentRoutine.cs" />
|
||||
<Compile Include="TMs\TMVerifySlitValveRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadBaseRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadClawRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadCoolingRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadHomeRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadLeakCheckRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadLiftRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadPrepareTransferRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadPumpRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadPurgeRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadSeparateRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadServoToRoutine.cs" />
|
||||
<Compile Include="UnLoads\Routines\UnLoadVentRoutine.cs" />
|
||||
<Compile Include="UnLoads\SicUnLoad.cs" />
|
||||
<Compile Include="UnLoads\UnLoadBaseRoutine.cs" />
|
||||
<Compile Include="UnLoads\UnLoadClawRoutine.cs" />
|
||||
<Compile Include="UnLoads\UnLoadHomeRoutine.cs" />
|
||||
<Compile Include="UnLoads\UnLoadLeakCheckRoutine.cs" />
|
||||
<Compile Include="UnLoads\UnLoadCoolingRoutine.cs" />
|
||||
<Compile Include="UnLoads\UnLoadLiftRoutine.cs" />
|
||||
<Compile Include="UnLoads\UnLoadModule.cs" />
|
||||
<Compile Include="UnLoads\UnLoadModuleBase.cs" />
|
||||
<Compile Include="UnLoads\UnLoadPrepareTransferRoutine.cs" />
|
||||
<Compile Include="UnLoads\UnLoadPumpRoutine.cs" />
|
||||
<Compile Include="UnLoads\UnLoadPurgeRoutine.cs" />
|
||||
<Compile Include="UnLoads\UnLoadSeparateRoutine.cs" />
|
||||
<Compile Include="UnLoads\UnLoadServoToRoutine.cs" />
|
||||
<Compile Include="UnLoads\UnLoadVentRoutine.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Config\TM\DeviceModelSystem.xml">
|
||||
|
|
|
@ -17,7 +17,7 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
|
|||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TMs;
|
||||
using SicModules.Devices;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMBaseRoutine : ModuleRoutine, IRoutine
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMHomeRoutine : TMBaseRoutine
|
||||
{
|
|
@ -12,7 +12,7 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TMs;
|
|||
using SicModules.Devices;
|
||||
using SicModules.LLs;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMLeakCheckRoutine : ModuleRoutine, IRoutine
|
||||
{
|
|
@ -11,7 +11,7 @@ using Aitex.Core.Util;
|
|||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TMs;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMPressureBalancePidRoutine : TMBaseRoutine
|
||||
{
|
|
@ -5,7 +5,7 @@ using Aitex.Core.RT.SCCore;
|
|||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TMs;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMPressureBalanceRoutine : TMBaseRoutine
|
||||
{
|
|
@ -9,7 +9,7 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadLocks;
|
|||
using SicModules.Devices;
|
||||
using SicModules.LLs;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMPumpRoutine : TMBaseRoutine
|
||||
{
|
|
@ -10,7 +10,7 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TMs;
|
|||
using SicModules.Devices;
|
||||
using SicModules.LLs;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMPurgeRoutine : TMBaseRoutine
|
||||
{
|
|
@ -8,7 +8,7 @@ using MECF.Framework.Common.Schedulers;
|
|||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadLocks;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.PMs;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMRobotExtendRoutine : TMBaseRoutine
|
||||
{
|
|
@ -8,7 +8,7 @@ using MECF.Framework.Common.Equipment;
|
|||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMRobotGotoRoutine : TMBaseRoutine
|
||||
{
|
|
@ -8,7 +8,7 @@ using MECF.Framework.Common.SubstrateTrackings;
|
|||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMRobotHomeRoutine : TMBaseRoutine
|
||||
{
|
|
@ -5,7 +5,7 @@ using Aitex.Sorter.Common;
|
|||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMRobotPickAndPlaceRoutine : TMBaseRoutine
|
||||
{
|
|
@ -7,7 +7,7 @@ using MECF.Framework.Common.Equipment;
|
|||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMRobotPickRoutine : TMBaseRoutine
|
||||
{
|
|
@ -6,9 +6,9 @@ using Aitex.Core.RT.SCCore;
|
|||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
|
||||
using SicModules.LLs;
|
||||
using SicModules.LLs.Routines;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMRobotPlaceRoutine : TMBaseRoutine
|
||||
{
|
|
@ -8,7 +8,7 @@ using MECF.Framework.Common.Schedulers;
|
|||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadLocks;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.PMs;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMRobotRetractRoutine : TMBaseRoutine
|
||||
{
|
|
@ -4,7 +4,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMServoRoutine : TMBaseRoutine
|
||||
{
|
|
@ -12,9 +12,11 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadLocks;
|
|||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TMs;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.UnLoad;
|
||||
using SicModules.LLs;
|
||||
using SicModules.LLs.Routines;
|
||||
using SicModules.UnLoads;
|
||||
using SicModules.UnLoads.Routines;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMSlitValveRoutine : TMBaseRoutine
|
||||
{
|
|
@ -10,7 +10,7 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Temps.P116PIDTC;
|
|||
using SicModules.Devices;
|
||||
using SicModules.LLs;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMVentRoutine : TMBaseRoutine
|
||||
{
|
|
@ -9,7 +9,7 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadLocks;
|
|||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.PMs;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TMs;
|
||||
|
||||
namespace SicModules.TMs
|
||||
namespace SicModules.TMs.Routines
|
||||
{
|
||||
public class TMVerifySlitValveRoutine : ModuleRoutine, IRoutine
|
||||
{
|
|
@ -220,7 +220,7 @@ namespace SicModules.TMs
|
|||
}
|
||||
}
|
||||
//检查InterLock
|
||||
if (!SC.GetConfigItem("System.BypassInterlock").BoolValue && (module == ModuleName.PM1 || module == ModuleName.PMA) )
|
||||
if (!SC.GetConfigItem("PM.PM1.BypassInterlock").BoolValue && (module == ModuleName.PM1 || module == ModuleName.PMA) )
|
||||
{
|
||||
if (!isOpen)
|
||||
{
|
||||
|
@ -232,7 +232,7 @@ namespace SicModules.TMs
|
|||
}
|
||||
}
|
||||
|
||||
if (!SC.GetConfigItem("System.BypassInterlock").BoolValue && (module == ModuleName.PM2 || module == ModuleName.PMB))
|
||||
if (!SC.GetConfigItem("PM.PM2.BypassInterlock").BoolValue && (module == ModuleName.PM2 || module == ModuleName.PMB))
|
||||
{
|
||||
if (!isOpen)
|
||||
{
|
||||
|
|
|
@ -18,6 +18,7 @@ using Aitex.Sorter.Common;
|
|||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Event;
|
||||
using MECF.Framework.Common.PLC;
|
||||
using SicModules.TMs.Routines;
|
||||
using SicAds = SicModules.Devices.SicAds;
|
||||
|
||||
namespace SicModules.TMs
|
||||
|
@ -84,6 +85,9 @@ namespace SicModules.TMs
|
|||
};
|
||||
|
||||
|
||||
public bool IsBypassInterlock => SC.GetValue<bool>($"TM.BypassInterlock");
|
||||
|
||||
public bool IsBypassEnableTable => SC.GetValue<bool>($"TM.BypassEnableTable");
|
||||
|
||||
public bool IsAlarm
|
||||
{
|
||||
|
@ -242,9 +246,24 @@ namespace SicModules.TMs
|
|||
|
||||
InitData();
|
||||
|
||||
InitScChangeCallback();
|
||||
|
||||
return base.Initialize();
|
||||
}
|
||||
|
||||
private void InitScChangeCallback()
|
||||
{
|
||||
// Bypass Interlock时自动Offline
|
||||
SC.RegisterValueChangedCallback($"TM.BypassInterlock", isBypassed =>
|
||||
{
|
||||
if (isBypassed is true && IsOnline)
|
||||
{
|
||||
PutOffline();
|
||||
EV.PostWarningLog(Module, "Offline automatically due to interlock bypassed");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void InitRoutine()
|
||||
{
|
||||
_gotoRoutine = new TMRobotGotoRoutine();
|
||||
|
@ -554,6 +573,8 @@ namespace SicModules.TMs
|
|||
DATA.Subscribe($"{Module}.IsError", () => IsError);
|
||||
DATA.Subscribe($"{Module}.IsAlarm", () => IsAlarm);
|
||||
DATA.Subscribe($"{Module}.IsWarning", () => IsWarning);
|
||||
DATA.Subscribe($"{Module}.IsBypassInterlock", () => IsBypassInterlock);
|
||||
DATA.Subscribe($"{Module}.IsBypassEnableTable", () => IsBypassEnableTable);
|
||||
|
||||
DATA.Subscribe($"{Name}.CurrentRoutineLoop", () => CurrentRoutineLoop);
|
||||
DATA.Subscribe($"{Name}.CurrentRoutineLoopTotal", () => CurrentRoutineLoopTotal);
|
||||
|
@ -1058,8 +1079,13 @@ namespace SicModules.TMs
|
|||
|
||||
private bool PutOnline()
|
||||
{
|
||||
if (IsBypassInterlock || IsBypassEnableTable)
|
||||
{
|
||||
EV.PostWarningLog(Module, $"Interlock is bypassed");
|
||||
return false;
|
||||
}
|
||||
|
||||
IsOnline = true;
|
||||
//NotifyModuleOfflineCancellation.Cancel();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ using SicModules.Devices;
|
|||
using SicModules.EFEMs;
|
||||
using SicModules.TMs;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadBaseRoutine : ModuleRoutine, IRoutine
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadClawRoutine : UnLoadBaseRoutine
|
||||
{
|
|
@ -1,7 +1,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.Util;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadCoolingRoutine : UnLoadBaseRoutine
|
||||
{
|
|
@ -4,7 +4,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadHomeRoutine : UnLoadBaseRoutine
|
||||
{
|
|
@ -6,7 +6,7 @@ using Aitex.Core.RT.SCCore;
|
|||
using MECF.Framework.Common.DBCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadLeakCheckRoutine : UnLoadBaseRoutine
|
||||
{
|
|
@ -1,7 +1,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadLiftRoutine : UnLoadBaseRoutine
|
||||
{
|
|
@ -3,7 +3,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadPrepareTransferRoutine : UnLoadBaseRoutine
|
||||
{
|
|
@ -4,7 +4,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadPumpRoutine : UnLoadBaseRoutine
|
||||
{
|
|
@ -4,7 +4,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadPurgeRoutine : UnLoadBaseRoutine
|
||||
{
|
|
@ -1,7 +1,7 @@
|
|||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadSeparateRoutine : UnLoadBaseRoutine
|
||||
{
|
|
@ -4,7 +4,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadServoToRoutine : UnLoadBaseRoutine
|
||||
{
|
|
@ -4,7 +4,7 @@ using Aitex.Core.RT.Routine;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
namespace SicModules.UnLoads.Routines
|
||||
{
|
||||
public class UnLoadVentRoutine : UnLoadBaseRoutine
|
||||
{
|
|
@ -10,6 +10,7 @@ using Aitex.Core.Utilities;
|
|||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using SicModules.UnLoads.Routines;
|
||||
|
||||
namespace SicModules.UnLoads
|
||||
{
|
||||
|
|
|
@ -42,7 +42,6 @@ Global
|
|||
{5EAFA05F-C2C0-40B3-9C8F-46D8559148D0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{5EAFA05F-C2C0-40B3-9C8F-46D8559148D0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{FDF5BB48-689B-4B88-BABC-110F3DC07C67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FDF5BB48-689B-4B88-BABC-110F3DC07C67}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FDF5BB48-689B-4B88-BABC-110F3DC07C67}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{FDF5BB48-689B-4B88-BABC-110F3DC07C67}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{FDF5BB48-689B-4B88-BABC-110F3DC07C67}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
|
|
|
@ -20,8 +20,6 @@
|
|||
<config default="false" name="EnableDataBaseClean" description="Enable DataBase Clean" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="180" name="DataKeepDays" description="Data Keep Days" max="10000" min="1" paramter="" tag="" unit="" type="Integer" />
|
||||
<config default="true" name="IsIgnoreSaveDB" description="IO不存储到数据库" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="false" name="BypassInterlock" description="Bypass Interlock" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="false" name="BypassEnableTable" description="Bypass EnableTable" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="true" name="RecipeCascadeLoading" visible="false" description="启用瀑布流方式加载Recipe" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="false" name="RecipeSaveToDB" description="Recipe文件保存到数据库" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="true" name="IsPMHostSignalTower" description="是否使用PM PLC控制三色灯;如果设定为False,则使用TM PLC控制三色灯" max="" min="" paramter="" tag="" unit="" type="Bool" visible="false" />
|
||||
|
@ -502,6 +500,8 @@
|
|||
</configs>
|
||||
</configs>
|
||||
<configs name="PM1">
|
||||
<config default="false" name="BypassInterlock" description="Bypass Interlock" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="false" name="BypassEnableTable" description="Bypass EnableTable" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="Sic" visible="false" name="RecipeChamberType" description="Recipe Chamber Type" max="" min="" paramter="" tag="" unit="" type="String" />
|
||||
<config default="" name="LastRecipeName" description="last recipe name" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />
|
||||
<config default="127.0.01:102" name="SiemensIP" description="Siemens IP Address,Default IP:192.168.1.105:102" max="" min="" paramter="" tag="" unit="" type="String" />
|
||||
|
@ -1034,6 +1034,8 @@
|
|||
</configs>
|
||||
|
||||
<configs name="PM2">
|
||||
<config default="false" name="BypassInterlock" description="Bypass Interlock" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="false" name="BypassEnableTable" description="Bypass EnableTable" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="Sic" visible="false" name="RecipeChamberType" description="Recipe Chamber Type" max="" min="" paramter="" tag="" unit="" type="String" />
|
||||
<config default="" name="LastRecipeName" description="last recipe name" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />
|
||||
<config default="127.0.0.1:102" name="SiemensIP" description="Siemens IP Address,Default IP:192.168.1.205:102" max="" min="" paramter="" tag="" unit="" type="String" />
|
||||
|
@ -1566,6 +1568,8 @@
|
|||
</configs>
|
||||
</configs>
|
||||
<configs name="TM">
|
||||
<config default="false" name="BypassInterlock" description="Bypass Interlock" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="false" name="BypassEnableTable" description="Bypass EnableTable" max="" min="" paramter="" tag="" unit="" type="Bool" />
|
||||
<config default="200" name="ProcessPressure" description="传盘压力基准" max="1200" min="0" paramter="" tag="" unit="mbar" type="Double" />
|
||||
<config default="20" name="VacuumPressureBaseOffset" description="传盘压力Offset" max="1200" min="0" paramter="" tag="" unit="mbar" type="Double" />
|
||||
<config default="127.0.0.1:102" name="SiemensIP" description="Siemens IP Address,Default IP: 192.168.1.102" max="" min="" paramter="" tag="" unit="" type="String" />
|
||||
|
@ -1757,7 +1761,7 @@
|
|||
<config default="100" name="SlowFastVentSwitchPressure" description="充气的时候,快慢阀门切换的压力值" max="600" min="0" paramter="" tag="" unit="mbar" type="Double" />
|
||||
<config default="980" name="VentBasePressure" description="充气的底压" max="1100" min="0" paramter="" tag="" unit="mbar" type="Double" />
|
||||
<config default="100" name="SlowVentTimeout" description="慢充气超时时间" max="1000" min="0" paramter="" tag="" unit="s" type="Integer" />
|
||||
<config default="100" name="FastVentTimeout" description="快充气超时时间" max="1000" min="0" paramter="" tag="" unit="s" type="Integer" />
|
||||
<config default="100" name="FastVentTimeout" description="快充气超时时间" max="1000" min="0" paramter="" tag="" unit="s" type="Integer" visible="false"/>
|
||||
<config default="10" name="VentDelayTime" description="充气到大气压后,继续充气多长时间" max="1000" min="0" paramter="" tag="" unit="s" type="Integer" />
|
||||
<config default="250" name="RoutineTimeOut" description="Routine超时时间" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
|
||||
</configs>
|
||||
|
|
|
@ -479,7 +479,6 @@ namespace SicRT.Equipments.Systems
|
|||
DATA.Subscribe("System.IsAutoRunning", () => IsAutoRunning);
|
||||
DATA.Subscribe("System.Modules", () => _modules);
|
||||
DATA.Subscribe("System.SignalTowerData", () => _mainSignalTower?.DeviceData);
|
||||
DATA.Subscribe("System.IsEngMode", () => _isEngMode);
|
||||
}
|
||||
|
||||
private void InitOp()
|
||||
|
@ -1366,22 +1365,9 @@ namespace SicRT.Equipments.Systems
|
|||
{
|
||||
MonitorPmTmInfo();
|
||||
MonitorUPSAlarm();
|
||||
MonitorEngMode();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private bool _isEngMode;
|
||||
|
||||
private void MonitorEngMode()
|
||||
{
|
||||
var isBypassInterlock = SC.GetValue<bool>("System.BypassInterlock");
|
||||
var isBypassEnableTable = SC.GetValue<bool>("System.BypassEnableTable");
|
||||
_isEngMode = isBypassInterlock || isBypassEnableTable;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void MonitorPmTmInfo()
|
||||
{
|
||||
if (_pm1SlitValve != null)
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Aitex.Common.Util;
|
||||
using Aitex.Common.Util;
|
||||
using Aitex.Core.RT.ConfigCenter;
|
||||
using Aitex.Core.RT.DataCenter;
|
||||
using Aitex.Core.RT.DataCollection;
|
||||
|
@ -12,7 +10,6 @@ using Aitex.Core.RT.RecipeCenter;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Core.WCF;
|
||||
using SicRT.Modules;
|
||||
using MECF.Framework.Common.Account;
|
||||
using MECF.Framework.Common.Communications;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
@ -23,11 +20,7 @@ using MECF.Framework.RT.Core.Applications;
|
|||
using MECF.Framework.RT.Core.Backend;
|
||||
using MECF.Framework.RT.Core.IoProviders;
|
||||
using SorterRT.Modules;
|
||||
using SicRT.Equipments;
|
||||
using SicRT.Equipments.Systems;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using DocumentFormat.OpenXml.ExtendedProperties;
|
||||
using SicModules.PMs.RecipeExecutions;
|
||||
using MECF.Framework.UI.Client.TrayThickness.HistoryData;
|
||||
|
||||
|
@ -70,9 +63,11 @@ namespace SicRT.Instances
|
|||
IoManager.Instance.Initialize(PathManager.GetCfgDir() + "tm\\interlock.xml");
|
||||
|
||||
|
||||
IoManager.Instance.Initialize(PathManager.GetCfgDir() + "pm\\pm1\\interlockPM1.xml");
|
||||
IoManager.Instance.Initialize(
|
||||
$"{PathManager.GetCfgDir()}pm\\pm1\\interlockPM1.xml");
|
||||
|
||||
IoManager.Instance.Initialize(PathManager.GetCfgDir() + "pm\\pm2\\interlockPM2.xml");
|
||||
IoManager.Instance.Initialize(
|
||||
$"{PathManager.GetCfgDir()}pm\\pm2\\interlockPM2.xml");
|
||||
|
||||
WaferManager.Instance.Initialize();
|
||||
|
||||
|
|
|
@ -4,14 +4,6 @@ Manual-GE 手动通用版(适用无EFEM设备)
|
|||
|
||||
------
|
||||
|
||||
## 下次发行备忘
|
||||
- Bug修复
|
||||
- 修正Recipe单元格白名单功能不能工作的问题
|
||||
- 新特性
|
||||
- 优化Data History左侧列表中的水温名称
|
||||
- 微调TM视图中的按钮位置
|
||||
|
||||
|
||||
## Version 2023.09.22.01
|
||||
- Bug修复
|
||||
- 优化ReadOnly模式下屏蔽键盘输入的方法
|
||||
|
@ -24,6 +16,36 @@ Manual-GE 手动通用版(适用无EFEM设备)
|
|||
- 新特性
|
||||
- 无
|
||||
|
||||
|
||||
- 新特性
|
||||
- interlock_bypass分腔体单独控制
|
||||
- interlock表更新
|
||||
- 不同recipe的data曲线数据对比功能
|
||||
-
|
||||
## Version 23.9.20.3
|
||||
|
||||
**2023-09-20**
|
||||
|
||||
- Bug修复
|
||||
|
||||
- 新特性
|
||||
- 合并develop分支和Interlock分支
|
||||
- 1:删除PM DI0和DI7 (DO2、40、41、54、112-119、111的互锁 (为了开腔维护时间可以吹扫)
|
||||
-2 优化Data History左侧列表中的水温名称
|
||||
- 3微调TM视图中的按钮位置
|
||||
- 4.修改V75V76和V72TVInterlock
|
||||
|
||||
|
||||
## Version 1.1.20.50
|
||||
|
||||
**2023-09-25**
|
||||
|
||||
- Bug修复
|
||||
- 修正Recipe单元格白名单功能不能工作的问题
|
||||
- 新特性
|
||||
- 优化Data History左侧列表中的水温名称
|
||||
- 微调TM视图中的按钮位置
|
||||
|
||||
## Version 1.1.19.49
|
||||
|
||||
**2023-09-04**
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
;Name and file
|
||||
Name "Sic ${ver1}.${ver2}.${ver3}.${ver4}"
|
||||
OutFile "Sic_手动通用无EFEM_Setup_v${ver1}.${ver2}.${ver3}.${ver4}.exe"
|
||||
OutFile "Sic_手动通用_Setup_v${ver1}.${ver2}.${ver3}.${ver4}.exe"
|
||||
|
||||
;Default installation folder
|
||||
;InstallDir "$LOCALAPPDATA\Modern UI Test"
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
Height="80"
|
||||
Margin="-20,-24"
|
||||
Source="Images/AtmRobotMultiLP/dock.png"
|
||||
Visibility="{Binding ShowDock, Converter={StaticResource boolVisibilityConverter}}" />
|
||||
Visibility="{Binding ShowDock, Converter={StaticResource BoolVisibilityConverter}}" />
|
||||
|
||||
<Common:AxisCanvas
|
||||
x:Name="canvas1"
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
Height="80"
|
||||
Margin="-20,-24"
|
||||
Source="Images/AtmRobotMultiLP/dock.png"
|
||||
Visibility="{Binding ShowDock, Converter={StaticResource boolVisibilityConverter}}" />
|
||||
Visibility="{Binding ShowDock, Converter={StaticResource BoolVisibilityConverter}}" />
|
||||
<!--<Image Width="38" Height="38" Source="Images/AtmRobotMultiLP/robotDock.png" />-->
|
||||
<Common:AxisCanvas
|
||||
x:Name="canvas1"
|
||||
|
|
|
@ -4,29 +4,21 @@
|
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:cal="http://www.caliburn.org"
|
||||
xmlns:client="clr-namespace:SicUI.Client"
|
||||
xmlns:converter="clr-namespace:MECF.Framework.UI.Client.Ctrlib.Converter;assembly=MECF.Framework.UI.Client"
|
||||
xmlns:deviceControl="clr-namespace:Aitex.Core.UI.DeviceControl;assembly=MECF.Framework.UI.Core"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
|
||||
xmlns:wnd="http://OpenSEMI.Ctrlib.com/presentation"
|
||||
xmlns:converters="clr-namespace:MECF.Framework.UI.Core.Converters;assembly=MECF.Framework.UI.Core"
|
||||
xmlns:converter1="clr-namespace:SicUI.Converter"
|
||||
xmlns:userControls="clr-namespace:Sicentury.Core.UserControls;assembly=Sicentury.Core"
|
||||
xmlns:controls="clr-namespace:MECF.Framework.UI.Client.Ctrlib.Controls;assembly=MECF.Framework.UI.Client"
|
||||
xmlns:converter="clr-namespace:SicUI.Converter"
|
||||
Title="Sic Manual Edition"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
WindowState="Maximized"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="980" d:DesignWidth="1900"
|
||||
d:DataContext="{d:DesignInstance Type=client:MainViewModel, IsDesignTimeCreatable=False}">
|
||||
<Window.Resources>
|
||||
<client:CollectionLastIndexConverter x:Key="collectionLastIndexConverter" />
|
||||
<converter:UnitOnlineBorderColorConverter x:Key="UnitOnlineBorderColorConverter" />
|
||||
<converters:EngModeToBdThicknessConverter x:Key="BdThicknessConverter"/>
|
||||
<converters:EngModeToBdColorConverter x:Key="BdColorConverter"/>
|
||||
<converters:EngModeToBgWatermarkVisibilityConverter x:Key="WatermarkVisibilityConverter"/>
|
||||
|
||||
<converter1:IsReadOnlyModeToUserInfoNameBgConverter x:Key="IsReadOnlyModeToUserInfoNameBgConverter"/>
|
||||
<converter:IsReadOnlyModeToUserInfoNameBgConverter x:Key="IsReadOnlyModeToUserInfoNameBgConverter" />
|
||||
</Window.Resources>
|
||||
|
||||
<Grid Background="{DynamicResource MainArea_BG}">
|
||||
|
@ -353,8 +345,6 @@
|
|||
<Border
|
||||
Margin="3,1"
|
||||
Padding="1"
|
||||
BorderBrush="{Binding IsEngMode, Converter={StaticResource BdColorConverter}}"
|
||||
BorderThickness="{Binding IsEngMode, Converter={StaticResource BdThicknessConverter}}"
|
||||
CornerRadius="4">
|
||||
<Grid x:Name="MainPage">
|
||||
<Grid.Style>
|
||||
|
@ -450,588 +440,120 @@
|
|||
<RowDefinition />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="102" />
|
||||
<ColumnDefinition MinWidth="65" />
|
||||
<ColumnDefinition Width="102" />
|
||||
<ColumnDefinition MinWidth="65" />
|
||||
<ColumnDefinition Width="102" />
|
||||
<ColumnDefinition MinWidth="65" />
|
||||
<ColumnDefinition Width="102" />
|
||||
<ColumnDefinition MinWidth="65" />
|
||||
<ColumnDefinition Width="1*" />
|
||||
<ColumnDefinition Width="1*" />
|
||||
<ColumnDefinition Width="1*" />
|
||||
<ColumnDefinition Width="1*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineSystem, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="System"
|
||||
Style="{DynamicResource TopLable_LeftTop}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set All Module Online" IsEnabled="{Binding IsOnlineSystem, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="System" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set All Module Offline" IsEnabled="{Binding IsOnlineSystem}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="System" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>
|
||||
<Label
|
||||
Grid.Column="4"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineLL, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="Load"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set LoadLock Online" IsEnabled="{Binding IsOnlineLL, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="LoadLock" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set LoadLock Offline" IsEnabled="{Binding IsOnlineLL}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="LoadLock" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>
|
||||
<Label
|
||||
Grid.Column="2"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineTM, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="TM"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set TM Online" IsEnabled="{Binding IsOnlineTM, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="TM" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set TM Offline" IsEnabled="{Binding IsOnlineTM}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="TM" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>
|
||||
<!--<Label
|
||||
Grid.Column="8"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineAligner, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="Aligner"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set Aligner Online" IsEnabled="{Binding IsOnlineAligner, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="Aligner" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set Aligner Offline" IsEnabled="{Binding IsOnlineAligner}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="Aligner" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>-->
|
||||
|
||||
<!--<Label
|
||||
Grid.Column="10"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineCassBL, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="CassBL"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set CassBL Online" IsEnabled="{Binding IsOnlineCassBL, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="CassBL" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set CassBL Offline" IsEnabled="{Binding IsOnlineCassBL}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="CassBL" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>-->
|
||||
|
||||
<!--<Label
|
||||
Grid.Row="1"
|
||||
Grid.Column="8"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineCassAL, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="CassAL"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set CassAL Online" IsEnabled="{Binding IsOnlineCassAL, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="CassAL" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set CassAL Offline" IsEnabled="{Binding IsOnlineCassAL}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="CassAL" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>-->
|
||||
|
||||
<!--<Label
|
||||
Grid.Row="1"
|
||||
Grid.Column="10"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineCassAR, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="CassAR"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set CassAR Online" IsEnabled="{Binding IsOnlineCassAR, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="CassAR" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set CassAR Offline" IsEnabled="{Binding IsOnlineCassAR}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="CassAR" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>-->
|
||||
|
||||
<Label
|
||||
Grid.Row="0"
|
||||
Grid.Column="6"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineBuffer, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="Buffer"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set Buffer Online" IsEnabled="{Binding IsOnlineBuffer, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="Buffer" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set Buffer Offline" IsEnabled="{Binding IsOnlineBuffer}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="Buffer" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>
|
||||
|
||||
<!--<Label
|
||||
Grid.Column="12"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineWaferRobot, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="WaferRobot"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set WaferRobot Online" IsEnabled="{Binding IsOnlineWaferRobot, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="WaferRobot" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set WaferRobot Offline" IsEnabled="{Binding IsOnlineWaferRobot}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="WaferRobot" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>-->
|
||||
|
||||
<!--<Label
|
||||
Grid.Row="1"
|
||||
Grid.Column="12"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineTrayRobot, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="TrayRobot"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set TrayRobot Online" IsEnabled="{Binding IsOnlineTrayRobot, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="TrayRobot" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set TrayRobot Offline" IsEnabled="{Binding IsOnlineTrayRobot}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="TrayRobot" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>-->
|
||||
|
||||
|
||||
|
||||
<!--<Label
|
||||
Grid.Column="4"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineEFEM, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="EFEM"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set Efem Online" IsEnabled="{Binding IsOnlineEFEM, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="EFEM" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set Buffer Offline" IsEnabled="{Binding IsOnlineEFEM}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="EFEM" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>-->
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
<controls:ModuleStatusIndicator
|
||||
Grid.Row="0"
|
||||
Grid.Column="0"
|
||||
Margin="1,1,0,1"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlinePM1, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="PM1"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set PM1 Online" IsEnabled="{Binding IsOnlinePM1, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="PM1" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set PM1 Offline" IsEnabled="{Binding IsOnlinePM1}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="PM1" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Caption="System"
|
||||
ModuleName="System"
|
||||
ModuleDescription="All Module"
|
||||
IsOnline="{Binding IsOnlineSystem}"
|
||||
Status="{Binding RtStatus}"
|
||||
cal:Message.Attach="[SetOnline] = [Action SetModuleOnline($source, $eventArgs)];[SetOffline] = [Action SetModuleOffline($source, $eventArgs)]" />
|
||||
<controls:ModuleStatusIndicator
|
||||
Grid.Row="0"
|
||||
Grid.Column="1"
|
||||
Caption="TM"
|
||||
ModuleName="TM"
|
||||
ModuleDescription="TM"
|
||||
IsOnline="{Binding IsOnlineTM}"
|
||||
Status="{Binding TMStatus}"
|
||||
HasWarning="{Binding IsTMWarning}"
|
||||
WarningTip="{Binding TMWarningMessage}"
|
||||
cal:Message.Attach="[SetOnline] = [Action SetModuleOnline($source, $eventArgs)];[SetOffline] = [Action SetModuleOffline($source, $eventArgs)]" />
|
||||
<controls:ModuleStatusIndicator
|
||||
Grid.Row="0"
|
||||
Grid.Column="2"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlinePM2, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="PM2"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set PM2 Online" IsEnabled="{Binding IsOnlinePM2, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="PM2" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set PM2 Offline" IsEnabled="{Binding IsOnlinePM2}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="PM2" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Grid.Column="4"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="{Binding IsOnlineUnLoad, Converter={StaticResource UnitOnlineBorderColorConverter}}"
|
||||
Content="UnLoad"
|
||||
Style="{DynamicResource TopLable}">
|
||||
<Label.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Set UnLoad Online" IsEnabled="{Binding IsOnlineUnLoad, Converter={StaticResource BoolReverseConverter}}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOnline">
|
||||
<cal:Parameter Value="UnLoad" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Set UnLoad Offline" IsEnabled="{Binding IsOnlineUnLoad}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="SetModuleOffline">
|
||||
<cal:Parameter Value="UnLoad" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</MenuItem>
|
||||
</ContextMenu>
|
||||
</Label.ContextMenu>
|
||||
</Label>
|
||||
<Label
|
||||
Grid.Row="2"
|
||||
Caption="LL"
|
||||
ModuleName="LoadLock"
|
||||
ModuleDescription="LoadLock"
|
||||
IsOnline="{Binding IsOnlineLL}"
|
||||
Status="{Binding LLStatus}"
|
||||
cal:Message.Attach="[SetOnline] = [Action SetModuleOnline($source, $eventArgs)];[SetOffline] = [Action SetModuleOffline($source, $eventArgs)]" />
|
||||
<controls:ModuleStatusIndicator
|
||||
Grid.Row="0"
|
||||
Grid.Column="3"
|
||||
Caption="Buffer"
|
||||
ModuleName="Buffer"
|
||||
ModuleDescription="Buffer"
|
||||
IsOnline="{Binding IsOnlineBuffer}"
|
||||
Status="{Binding BufferStatus}"
|
||||
cal:Message.Attach="[SetOnline] = [Action SetModuleOnline($source, $eventArgs)];[SetOffline] = [Action SetModuleOffline($source, $eventArgs)]" />
|
||||
<controls:ModuleStatusIndicator
|
||||
Grid.Row="1"
|
||||
Grid.Column="0"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="Gray"
|
||||
Content="Log"
|
||||
Style="{DynamicResource TopLable_LeftBottom}" />
|
||||
Caption="PM1"
|
||||
ModuleName="PM1"
|
||||
ModuleDescription="PM1"
|
||||
IsOnline="{Binding IsOnlinePM1}"
|
||||
Status="{Binding PM1Status}"
|
||||
HasWarning="{Binding IsPM1Warning}"
|
||||
WarningTip="{Binding PM1WarningMessage}"
|
||||
cal:Message.Attach="[SetOnline] = [Action SetModuleOnline($source, $eventArgs)];[SetOffline] = [Action SetModuleOffline($source, $eventArgs)]" />
|
||||
<controls:ModuleStatusIndicator
|
||||
Grid.Row="1"
|
||||
Grid.Column="1"
|
||||
Caption="PM2"
|
||||
ModuleName="PM2"
|
||||
ModuleDescription="PM2"
|
||||
IsOnline="{Binding IsOnlinePM2}"
|
||||
Status="{Binding PM2Status}"
|
||||
HasWarning="{Binding IsPM2Warning}"
|
||||
WarningTip="{Binding PM2WarningMessage}"
|
||||
cal:Message.Attach="[SetOnline] = [Action SetModuleOnline($source, $eventArgs)];[SetOffline] = [Action SetModuleOffline($source, $eventArgs)]" />
|
||||
<controls:ModuleStatusIndicator
|
||||
Grid.Row="1"
|
||||
Grid.Column="2"
|
||||
Caption="UnLoad"
|
||||
ModuleName="UnLoad"
|
||||
ModuleDescription="UnLoad"
|
||||
IsOnline="{Binding IsOnlineUnLoad}"
|
||||
Status="{Binding UnLoadStatus}"
|
||||
cal:Message.Attach="[SetOnline] = [Action SetModuleOnline($source, $eventArgs)];[SetOffline] = [Action SetModuleOffline($source, $eventArgs)]" />
|
||||
|
||||
<TextBox
|
||||
Grid.Column="1"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding RtStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding RtStatus}"
|
||||
TextWrapping="Wrap" />
|
||||
<TextBox
|
||||
Grid.Column="5"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding LLStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding LLStatus}"
|
||||
TextWrapping="Wrap" />
|
||||
<TextBox
|
||||
Grid.Column="3"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding TMStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding TMStatus}"
|
||||
TextWrapping="Wrap" />
|
||||
<!--<TextBox
|
||||
Grid.Column="5"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding EFEMStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding EFEMStatus}"
|
||||
TextWrapping="Wrap" />-->
|
||||
<!--<TextBox
|
||||
Grid.Column="9"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding AlignerStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding AlignerStatus}"
|
||||
TextWrapping="Wrap" />-->
|
||||
<!--<TextBox
|
||||
Grid.Column="11"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding CassBLStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding CassBLStatus}"
|
||||
TextWrapping="Wrap" />-->
|
||||
<!--<TextBox
|
||||
Grid.Column="13"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding WaferRobotStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding WaferRobotStatus}"
|
||||
TextWrapping="Wrap" />-->
|
||||
<!--<TextBox
|
||||
Grid.Row="1"
|
||||
Grid.Column="9"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding CassALStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding CassALStatus}"
|
||||
TextWrapping="Wrap" />-->
|
||||
<!--<TextBox
|
||||
Grid.Row="1"
|
||||
Grid.Column="11"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding CassARStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding CassARStatus}"
|
||||
TextWrapping="Wrap" />-->
|
||||
<!--<TextBox
|
||||
Grid.Row="1"
|
||||
Grid.Column="13"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding TrayRobotStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding TrayRobotStatus}"
|
||||
TextWrapping="Wrap" />-->
|
||||
<TextBox
|
||||
Grid.Row="0"
|
||||
Grid.Column="7"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding BufferStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding BufferStatus}"
|
||||
TextWrapping="Wrap" />
|
||||
<TextBox
|
||||
Grid.Row="1"
|
||||
Grid.Column="1"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding PM1StatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding PM1Status}"
|
||||
TextWrapping="Wrap" />
|
||||
<TextBox
|
||||
Grid.Row="1"
|
||||
Grid.Column="3"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding PM2StatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding PM2Status}"
|
||||
TextWrapping="Wrap" />
|
||||
<TextBox
|
||||
Grid.Row="1"
|
||||
Grid.Column="5"
|
||||
VerticalContentAlignment="Center"
|
||||
Background="{Binding UnLoadStatusBackground}"
|
||||
Style="{StaticResource TextBox_Top}"
|
||||
Text="{Binding UnLoadStatus}"
|
||||
TextWrapping="Wrap" />
|
||||
|
||||
<Grid
|
||||
Grid.Row="2"
|
||||
Grid.Column="1"
|
||||
Grid.ColumnSpan="13">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="90" />
|
||||
<ColumnDefinition Width="100" />
|
||||
<ColumnDefinition Width="100" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<ComboBox
|
||||
Height="Auto"
|
||||
VerticalContentAlignment="Center"
|
||||
FontSize="15"
|
||||
ItemsSource="{Binding EventLogsView}"
|
||||
SelectedIndex="{Binding EventLogsView.Count, Mode=OneWay, Converter={StaticResource collectionLastIndexConverter}}"
|
||||
Style="{DynamicResource Top_ComboBox}"
|
||||
Visibility="{Binding AllEventsVisibility}"/>
|
||||
<DockPanel Grid.Row="2" Grid.ColumnSpan="4" Grid.Column="0" LastChildFill="True">
|
||||
|
||||
<Label
|
||||
Grid.Column="1"
|
||||
DockPanel.Dock="Left"
|
||||
Width="100"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
BorderBrush="Gray"
|
||||
Content="Log"
|
||||
Style="{DynamicResource TopLable_LeftBottom}" />
|
||||
<Button
|
||||
DockPanel.Dock="Right"
|
||||
Width="90"
|
||||
Height="30"
|
||||
Content="Buzzer Off"
|
||||
Style="{DynamicResource TopButton}" Margin="2,0,0,0">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="BuzzerOff" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</Button>
|
||||
<Button
|
||||
DockPanel.Dock="Right"
|
||||
Width="90"
|
||||
Height="30"
|
||||
Content="Reset"
|
||||
Style="{DynamicResource TopButton}" Margin="2,0,0,0">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="Reset" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</Button>
|
||||
<Label
|
||||
DockPanel.Dock="Right"
|
||||
Width="90"
|
||||
Height="30"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
Style="{DynamicResource TopLable_RightBottom}">
|
||||
|
@ -1044,36 +566,16 @@
|
|||
Foreground="{DynamicResource FG_Black}"
|
||||
IsChecked="{Binding IsShowAlarmEventOnly, Delay=10}" />
|
||||
</Label>
|
||||
<ComboBox
|
||||
Height="Auto"
|
||||
VerticalContentAlignment="Center"
|
||||
FontSize="15"
|
||||
ItemsSource="{Binding EventLogsView}"
|
||||
SelectedIndex="{Binding EventLogsView.Count, Mode=OneWay, Converter={StaticResource collectionLastIndexConverter}}"
|
||||
Style="{DynamicResource Top_ComboBox}"
|
||||
Visibility="{Binding AllEventsVisibility}"/>
|
||||
|
||||
|
||||
<Button
|
||||
Grid.Column="2"
|
||||
Width="90"
|
||||
Height="30"
|
||||
Margin="0"
|
||||
Content="Reset"
|
||||
Style="{DynamicResource TopButton}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="Reset" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</Button>
|
||||
<Button
|
||||
Grid.Column="3"
|
||||
Width="90"
|
||||
Height="30"
|
||||
Margin="0"
|
||||
Content="Buzzer Off"
|
||||
Style="{DynamicResource TopButton}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="BuzzerOff" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</Button>
|
||||
|
||||
</Grid>
|
||||
</DockPanel>
|
||||
</Grid>
|
||||
<Label
|
||||
Grid.Column="3"
|
||||
|
@ -1083,26 +585,26 @@
|
|||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
Style="{DynamicResource TopLable_SignalTower}">
|
||||
<Viewbox Width="45" Height="80">
|
||||
<deviceControl:AITSignalTower
|
||||
<Viewbox Width="45" Height="80">
|
||||
<deviceControl:AITSignalTower
|
||||
Width="45"
|
||||
Height="110"
|
||||
DeviceData="{Binding SignalTowerData}" />
|
||||
</Viewbox>
|
||||
</Label>
|
||||
</Viewbox>
|
||||
</Label>
|
||||
<Grid Grid.Column="4" Margin="5,10">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition />
|
||||
<RowDefinition />
|
||||
</Grid.RowDefinitions>
|
||||
<Border
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition />
|
||||
<RowDefinition />
|
||||
</Grid.RowDefinitions>
|
||||
<Border
|
||||
Margin="2,4"
|
||||
Background="{Binding IsReadOnlyMode, Converter={StaticResource IsReadOnlyModeToUserInfoNameBgConverter}}"
|
||||
BorderBrush="{DynamicResource TopFrame_UserInfoBD}"
|
||||
BorderThickness="1"
|
||||
CornerRadius="5"
|
||||
SnapsToDevicePixels="True">
|
||||
<TextBlock
|
||||
<TextBlock
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
FontFamily="Arial"
|
||||
|
@ -1110,19 +612,19 @@
|
|||
Foreground="{DynamicResource TopFrame_TextColor}"
|
||||
Text="{Binding User.LoginName}"
|
||||
TextWrapping="NoWrap" />
|
||||
</Border>
|
||||
<Button
|
||||
</Border>
|
||||
<Button
|
||||
Grid.Row="1"
|
||||
Margin="2,4"
|
||||
Content="Logout"
|
||||
Style="{DynamicResource Logout_Button}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="ShowLogoutDialog" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</Button>
|
||||
</Grid>
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="ShowLogoutDialog" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</Button>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
@ -1131,13 +633,13 @@
|
|||
Background="{DynamicResource MainArea_BG}"
|
||||
IsHitTestVisible="{Binding IsReadOnlyMode, Converter={StaticResource BoolReverseConverter}}"
|
||||
PreviewKeyDown="GdContentContainer_OnPreviewKeyDown">
|
||||
<Border Visibility="{Binding IsEngMode, Converter={StaticResource WatermarkVisibilityConverter}}">
|
||||
<Border.Background>
|
||||
<Border>
|
||||
<!--<Border.Background>
|
||||
<ImageBrush ImageSource="/Resources/Images/interlock_bypass_watermark.png"
|
||||
TileMode="Tile" Opacity="0.15" ViewportUnits="Absolute"
|
||||
Viewport="0,-20,250,200" Viewbox="0,0,1.5,1.5" Stretch="Fill"
|
||||
ViewboxUnits="RelativeToBoundingBox" />
|
||||
</Border.Background>
|
||||
</Border.Background>-->
|
||||
</Border>
|
||||
<ContentControl
|
||||
x:Name="ActiveItem"
|
||||
|
|
|
@ -242,11 +242,32 @@ namespace SicUI.Client
|
|||
|
||||
[Subscription("Rt.Status")]
|
||||
public string RtStatus { get; set; }
|
||||
public string RtStatusBackground => ModuleStatusBackground.GetStatusBackground(RtStatus);
|
||||
|
||||
|
||||
[Subscription("PM1.Status")]
|
||||
public string _PM1Status { get; set; }
|
||||
|
||||
[Subscription("PM1.IsBypassInterlock")]
|
||||
public bool IsPM1InterlockBypassed { get; set; }
|
||||
|
||||
[Subscription("PM1.IsBypassEnableTable")]
|
||||
public bool IsPM1EnableTableBypassed { get; set; }
|
||||
|
||||
public bool IsPM1Warning => IsPM1InterlockBypassed || IsPM1EnableTableBypassed;
|
||||
|
||||
public string PM1WarningMessage
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IsPM1InterlockBypassed && IsPM1EnableTableBypassed)
|
||||
return "PM1 Interlock and Enable Table are bypassed";
|
||||
|
||||
if (IsPM1InterlockBypassed)
|
||||
return "PM1 Interlock is bypassed";
|
||||
|
||||
return "PM1 Enable Table is bypassed";
|
||||
}
|
||||
}
|
||||
|
||||
public string PM1Status
|
||||
{
|
||||
get
|
||||
|
@ -258,7 +279,6 @@ namespace SicUI.Client
|
|||
}
|
||||
set => _PM1Status = value;
|
||||
}
|
||||
public string PM1StatusBackground => ModuleStatusBackground.GetStatusBackground(PM1Status);
|
||||
|
||||
[Subscription("PM2.Status")]
|
||||
public string _PM2Status { get; set; }
|
||||
|
@ -274,25 +294,29 @@ namespace SicUI.Client
|
|||
}
|
||||
set => _PM2Status = value;
|
||||
}
|
||||
public string PM2StatusBackground => ModuleStatusBackground.GetStatusBackground(PM2Status);
|
||||
|
||||
[Subscription("Aligner.Status")]
|
||||
public string AlignerStatus { get; set; }
|
||||
public string AlignerStatusBackground => ModuleStatusBackground.GetStatusBackground(AlignerStatus);
|
||||
[Subscription("PM2.IsBypassInterlock")]
|
||||
public bool IsPM2InterlockBypassed { get; set; }
|
||||
|
||||
[Subscription("CassAL.Status")]
|
||||
public string CassALStatus { get; set; }
|
||||
public string CassALStatusBackground => ModuleStatusBackground.GetStatusBackground(CassALStatus);
|
||||
[Subscription("PM2.IsBypassEnableTable")]
|
||||
public bool IsPM2EnableTableBypassed { get; set; }
|
||||
|
||||
[Subscription("CassAR.Status")]
|
||||
public string CassARStatus { get; set; }
|
||||
public string CassARStatusBackground => ModuleStatusBackground.GetStatusBackground(CassARStatus);
|
||||
public bool IsPM2Warning => IsPM2InterlockBypassed || IsPM2EnableTableBypassed;
|
||||
|
||||
[Subscription("CassBL.Status")]
|
||||
public string CassBLStatus { get; set; }
|
||||
public string CassBLStatusBackground => ModuleStatusBackground.GetStatusBackground(CassBLStatus);
|
||||
public string PM2WarningMessage
|
||||
{
|
||||
get
|
||||
{
|
||||
if(IsPM2InterlockBypassed && IsPM2EnableTableBypassed)
|
||||
return "PM2 Interlock and Enable Table are bypassed";
|
||||
|
||||
if(IsPM2InterlockBypassed)
|
||||
return "PM2 Interlock is bypassed";
|
||||
|
||||
return "PM2 Enable Table is bypassed";
|
||||
}
|
||||
}
|
||||
|
||||
//[Subscription("UnLoad.Status")]
|
||||
public string UnLoadStatus
|
||||
{
|
||||
get => "NotInstall";
|
||||
|
@ -301,32 +325,37 @@ namespace SicUI.Client
|
|||
|
||||
}
|
||||
}
|
||||
public string UnLoadStatusBackground => ModuleStatusBackground.GetStatusBackground(UnLoadStatus);
|
||||
|
||||
[Subscription("EFEM.Status")]
|
||||
public string EFEMStatus { get; set; }
|
||||
public string EFEMStatusBackground => ModuleStatusBackground.GetStatusBackground(EFEMStatus);
|
||||
|
||||
[Subscription("Buffer.Status")]
|
||||
public string BufferStatus { get; set; }
|
||||
public string BufferStatusBackground => ModuleStatusBackground.GetStatusBackground(BufferStatus);
|
||||
|
||||
[Subscription("LoadLock.Status")]
|
||||
public string LLStatus { get; set; }
|
||||
public string LLStatusBackground => ModuleStatusBackground.GetStatusBackground(LLStatus);
|
||||
|
||||
[Subscription("TM.Status")]
|
||||
public string TMStatus { get; set; }
|
||||
public string TMStatusBackground => ModuleStatusBackground.GetStatusBackground(TMStatus);
|
||||
|
||||
[Subscription("WaferRobot.Status")]
|
||||
public string WaferRobotStatus { get; set; }
|
||||
public string WaferRobotStatusBackground => ModuleStatusBackground.GetStatusBackground(WaferRobotStatus);
|
||||
[Subscription("TM.IsBypassInterlock")]
|
||||
public bool IsTMInterlockBypassed { get; set; }
|
||||
|
||||
[Subscription("TrayRobot.Status")]
|
||||
public string TrayRobotStatus { get; set; }
|
||||
public string TrayRobotStatusBackground => ModuleStatusBackground.GetStatusBackground(TrayRobotStatus);
|
||||
[Subscription("TM.IsBypassEnableTable")]
|
||||
public bool IsTMEanbleTableBypassed { get; set; }
|
||||
|
||||
public bool IsTMWarning => IsTMInterlockBypassed || IsTMEanbleTableBypassed;
|
||||
|
||||
public string TMWarningMessage
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IsTMInterlockBypassed && IsTMEanbleTableBypassed)
|
||||
return "TM Interlock and Enable Table are bypassed";
|
||||
|
||||
if (IsTMInterlockBypassed)
|
||||
return "TM Interlock is bypassed";
|
||||
|
||||
return "TM Enable Table is bypassed";
|
||||
}
|
||||
}
|
||||
|
||||
[Subscription("System.IsOnline")]
|
||||
public bool IsOnlineSystem { get; set; }
|
||||
|
@ -336,16 +365,6 @@ namespace SicUI.Client
|
|||
|
||||
[Subscription("PM2.IsOnline")]
|
||||
public bool IsOnlinePM2 { get; set; }
|
||||
[Subscription("EFEM.IsOnline")]
|
||||
public bool IsOnlineEFEM { get; set; }
|
||||
[Subscription("Aligner.IsOnline")]
|
||||
public bool IsOnlineAligner { get; set; }
|
||||
[Subscription("CassAL.IsOnline")]
|
||||
public bool IsOnlineCassAL { get; set; }
|
||||
[Subscription("CassBL.IsOnline")]
|
||||
public bool IsOnlineCassBL { get; set; }
|
||||
[Subscription("CassAR.IsOnline")]
|
||||
public bool IsOnlineCassAR { get; set; }
|
||||
|
||||
[Subscription("UnLoad.IsOnline")]
|
||||
public bool IsOnlineUnLoad { get; set; }
|
||||
|
@ -358,14 +377,6 @@ namespace SicUI.Client
|
|||
[Subscription("Buffer.IsOnline")]
|
||||
public bool IsOnlineBuffer { get; set; }
|
||||
|
||||
[Subscription("WaferRobot.IsOnline")]
|
||||
public bool IsOnlineWaferRobot { get; set; }
|
||||
|
||||
[Subscription("TrayRobot.IsOnline")]
|
||||
public bool IsOnlineTrayRobot { get; set; }
|
||||
|
||||
|
||||
|
||||
[Subscription("System.SignalTowerData")]
|
||||
public AITSignalTowerData SignalTowerData { get; set; }
|
||||
|
||||
|
@ -375,10 +386,6 @@ namespace SicUI.Client
|
|||
set;
|
||||
}
|
||||
|
||||
[Subscription("System.IsEngMode")]
|
||||
public bool IsEngMode { get; set; }
|
||||
|
||||
|
||||
public string RunTime => DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
|
||||
|
|
|
@ -1821,6 +1821,12 @@ namespace SicUI.Models.PMs
|
|||
//有些特殊处理
|
||||
if (strPMOP.Contains("ToProcessIdle"))
|
||||
{
|
||||
if (IsService)
|
||||
{
|
||||
DialogBox.ShowError("Unable to enter ProcessIdle in Service Mode.");
|
||||
return;
|
||||
}
|
||||
|
||||
//如果加热Enable未打开则返回
|
||||
if (!AllHeatEnable)
|
||||
{
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue