添加load腔顶升和闸板阀代码
This commit is contained in:
parent
4f3e308d3d
commit
f763c30701
@ -110,11 +110,8 @@
|
||||
<IoSlitValve id="LoadLockDoor" module="TM" display="LLDoor" Type="" unit="" schematicId="LLDoor" scTimeout="System.SlitValveMotionTimeout" diOpen="DI_LoadDoorOpened" diClose="DI_LoadDoorClosed" doOpen="DO_LoadDoorOpen" doClose="DO_LoadDoorClose" />
|
||||
<IoSlitValve id="PM1Door" module="TM" display="PM1Door" Type="" unit="" schematicId="PM1Door" scTimeout="System.SlitValveMotionTimeout" diOpen="DI_ReactorADoorOpened" diClose="DI_ReactorADoorClosed" doOpen="DO_RectorADoorOpen" doClose="DO_RectorADoorClose" />
|
||||
<IoSlitValve id="PM2Door" module="TM" display="PM2Door" Type="" unit="" schematicId="PM2Door" scTimeout="System.SlitValveMotionTimeout" diOpen="DI_ReactorBDoorOpened" diClose="DI_ReactorBDoorClosed" doOpen="DO_RectorBDoorOpen" doClose="DO_RectorBDoorClose" />
|
||||
<IoSlitValve id="UnLoadDoor" module="TM" display="UnLoadDoor" Type="" unit="" schematicId="UnLoadDoor" scTimeout="System.SlitValveMotionTimeout" diOpen="DI_UnloadStationDoorOpened" diClose="DI_UnloadStationDoorClosed" doOpen="DO_UnloadStationDoorOpen" doClose="DO_UnloadStationDoorClose" />
|
||||
<IoSlitValve id="BufferDoor" module="TM" display="BufferDoor" Type="" unit="" schematicId="BufferDoor" scTimeout="System.SlitValveMotionTimeout" diOpen="DI_BufferStationDoorOpened" diClose="DI_BufferStationDoorClosed" doOpen="DO_BufferStationDoorOpen" doClose="DO_BufferStationDoorClose" />
|
||||
<IoSlitValve id="UnLoadSubDoor" module="EFEM" display="UnLoadSubDoor" Type="" unit="" schematicId="UnLoadSubDoor" scTimeout="System.SlitValveotMionTimeout" diOpen="DI_UnloadSubStationDoorOpened" diClose="DI_UnloadSubStationDoorClosed" doOpen="DO_UnloadSubStationDoorOpen" doClose="DO_UnloadSubStationDoorClose" />
|
||||
<IoSlitValve id="LoadLockLSideDoor" module="EFEM" display="LLLSideDoor" Type="" unit="" schematicId="LLLSideDoor" scTimeout="System.SlitValveMotionTimeout" diOpen="DI_LoadLSideDoorOpened" diClose="DI_LoadLSideDoorClosed" doOpen="DO_LoadLSideDoorOpen" doClose="DO_LoadLSideDoorClose" />
|
||||
<IoSlitValve id="LoadLockRSideDoor" module="EFEM" display="LLRSideDoor" Type="" unit="" schematicId="LLRSideDoor" scTimeout="System.SlitValveMotionTimeout" diOpen="DI_LoadRSideDoorOpened" diClose="DI_LoadRSideDoorClosed" doOpen="DO_LoadRSideDoorOpen" doClose="DO_LoadRSideDoorClose" />
|
||||
<IoSlitValve id="LoadLockLSideDoor" module="LoadLock" display="LLLSideDoor" Type="" unit="" schematicId="LLLSideDoor" scTimeout="System.SlitValveMotionTimeout" diOpen="DI_LoadLSideDoorOpened" diClose="DI_LoadLSideDoorClosed" doOpen="DO_LoadLSideDoorOpen" doClose="DO_LoadLSideDoorClose" />
|
||||
</IoSlitValves>
|
||||
<IoPressureMeter3s classType="Aitex.Core.RT.Device.Unit.IoPressureMeter3" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<IoPressureMeter3 id="LLPressure" module="TM" display="LLPressure" schematicId="LLPressure" unit="mbar" aioType="float" aiValue="AI_LoadPressure" formatString="F1" MaxValue="1500" />
|
||||
@ -128,14 +125,9 @@
|
||||
<IoTempMeter module="Buffer" id="BufferTemp" display="" schematicId="" aioType="float" aiFeedback="AI_BufferTemp" />
|
||||
</IoTempMeters>
|
||||
<IoLift4s classType="Aitex.Core.RT.Device.Unit.IoLift4" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<IoLift4 id="LLLift" module="LoadLock" display="LLLift" schematicId="LLLift" unit="" aioType="" diUp="DI_LoadLockWaferCYUPFB" diDown="DI_LoadLockWaferCYDownFB" doUp="DO_LoadLockWaferCYUP" doDown="DO_LoadLockWaferCYDown" scTimeout="10"/>
|
||||
<IoLift4 id="LoadLidLock" module="LoadLock" display="LoadLidLock" schematicId="LoadLidLock" unit="" aioType="" diUp="DI_LoadLidLocked" diDown="DI_LoadLidUnlocked" doUp="DO_LoadLidLock" doDown="DO_LoadLidUnlock" scTimeout="10" />
|
||||
<IoLift4 id="UnLoadLift" module="UnLoad" display="UnLoadLift" schematicId="UnLoadLift" unit="" aioType="" diUp="DI_UnloadStationLifterCYUp" diDown="DI_UnloadStationLifterCYDown" doUp="DO_UnloadStationLifterCYUp" doDown="DO_UnloadStationLifterCYDown" scTimeout="10" />
|
||||
</IoLift4s>
|
||||
<IoClaws classType="Aitex.Core.RT.Device.Unit.IoClaw" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<IoClaw id="LLWaferClaw" module="LoadLock" display="LLWaferClaw" schematicId="LLWaferClaw" unit="" aioType="" diUp="DI_LoadWaferCYClamped" diDown="DI_LoadWafeCYOpened" doUp="DO_LoadWaferCYClamp" doDown="DO_LoadWaferCYOpen" scTimeout="10" />
|
||||
<IoClaw id="LLTrayClaw" module="LoadLock" display="LLTrayClaw" schematicId="LLTrayClaw" unit="" aioType="" diUp="DI_LoadTrayCYClamped" diDown="DI_LoadTrayCYOpend" doUp="DO_LoadTrayCYClamp" doDown="DO_LoadTrayCYOpen" scTimeout="10" />
|
||||
<IoClaw id="UnLoadWaferClaw" module="UnLoad" display="UnLoadWaferClaw" schematicId="UnLoadWaferClaw" unit="" aioType="" diUp="DI_UnloadStationWaferCYClamped" diDown="DI_UnloadStationWaferCYOpened" doUp="DO_UnloadStationWaferCYClamp" doDown="DO_UnloadStationWaferCYOpen" scTimeout="10" />
|
||||
</IoClaws>
|
||||
<TMRobots assembly="SicModules" classType="SicModules.TMs.SicTMRobot">
|
||||
<TMRobot id="TMRobot" module="TMRobot" display="" schematicId="" unit="" />
|
||||
</TMRobots>
|
||||
@ -152,10 +144,11 @@
|
||||
<LLs assembly="SicModules" classType="SicModules.LLs.SicLoadLock">
|
||||
<TM id="LoadLock" module="LoadLock" display="" schematicId="" unit="" />
|
||||
</LLs>
|
||||
<Unloads assembly="SicModules" classType="SicModules.UnLoads.SicUnLoad">
|
||||
<Unload id="UnLoad" module="UnLoad" display="" schematicId="" unit="" />
|
||||
</Unloads>
|
||||
<Buffers assembly="SicModules" classType="SicModules.Buffers.SicBuffer">
|
||||
<Buffer id="Buffer" module="Buffer" display="" schematicId="" unit="" />
|
||||
</Buffers>
|
||||
|
||||
<EFEMs assembly="SicModules" classType="SicModules.EFEMs.SicEFEM">
|
||||
<Efem id="EFEM" module="EFEM" display="" schematicId="" unit="" />
|
||||
</EFEMs>
|
||||
</DeviceModelDefine>
|
||||
@ -288,14 +288,14 @@
|
||||
<DO_ITEM Index="154" Name="DO_LdRotationMoveCCD2Pos" BufferOffset="154" Addr="154" Description="" Visible="false"/>
|
||||
|
||||
<!--垃圾IO数据-->
|
||||
<DO_ITEM Index="158" Name="DO_LoadLidLock" BufferOffset="158" Addr="158" Description="" Visible="false"/>
|
||||
<!--<DO_ITEM Index="158" Name="DO_LoadLidLock" BufferOffset="158" Addr="158" Description="" Visible="false"/>
|
||||
<DO_ITEM Index="158" Name="DO_LoadLidUnlock" BufferOffset="158" Addr="158" Description="" Visible="false"/>
|
||||
<DO_ITEM Index="158" Name="DO_LoadWaferCYClamp" BufferOffset="158" Addr="158" Description="" Visible="false"/>
|
||||
<DO_ITEM Index="158" Name="DO_LoadWaferCYOpen" BufferOffset="158" Addr="158" Description="" Visible="false"/>
|
||||
<DO_ITEM Index="158" Name="DO_LoadTrayCYClamp" BufferOffset="158" Addr="158" Description="" Visible="false"/>
|
||||
<DO_ITEM Index="158" Name="DO_LoadTrayCYOpen" BufferOffset="158" Addr="158" Description="" Visible="false"/>
|
||||
<DO_ITEM Index="158" Name="DO_LoadRSideDoorClose" BufferOffset="158" Addr="158" Description="" Visible="false"/>
|
||||
<DO_ITEM Index="158" Name="DO_LoadRSideDoorOpen" BufferOffset="158" Addr="158" Description="" Visible="false"/>
|
||||
<DO_ITEM Index="158" Name="DO_LoadRSideDoorOpen" BufferOffset="158" Addr="158" Description="" Visible="false"/>-->
|
||||
<!--垃圾IO数据-->
|
||||
</Block>
|
||||
</Dig_Out>
|
||||
|
||||
@ -1,7 +1,4 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Aitex.Core.RT.DataCenter;
|
||||
using Aitex.Core.RT.DataCenter;
|
||||
using Aitex.Core.RT.Device;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.Fsm;
|
||||
@ -13,7 +10,12 @@ using Aitex.Core.Utilities;
|
||||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using SicModules.EFEMs.Routines;
|
||||
using SicModules.LLs.Routines;
|
||||
using SicModules.TMs.Routines;
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SicModules.LLs
|
||||
{
|
||||
@ -39,6 +41,8 @@ namespace SicModules.LLs
|
||||
Separating,
|
||||
Grouping,
|
||||
RotationHomeOffset,
|
||||
OpenSlitValve,
|
||||
CloseSlitValve,
|
||||
}
|
||||
|
||||
public enum MSG
|
||||
@ -63,6 +67,8 @@ namespace SicModules.LLs
|
||||
Separate,
|
||||
Group,
|
||||
RelativeHomeOffset,
|
||||
OpenSlitValve,
|
||||
CloseSlitValve,
|
||||
}
|
||||
|
||||
|
||||
@ -167,6 +173,7 @@ namespace SicModules.LLs
|
||||
private LoadSeparateRoutine _loadSeparateRoutine;
|
||||
|
||||
private LoadRotationHomeOffsetRoutine _loadRotationHomeOffsetRoutine;
|
||||
private LoadLockSlitValveRoutine _slitValveRoutine;
|
||||
|
||||
|
||||
public LoadLockModule(ModuleName module) : base(1)
|
||||
@ -217,6 +224,7 @@ namespace SicModules.LLs
|
||||
_loadLockGroupRoutine = new LoadLockGroupRoutine(module);
|
||||
_loadSeparateRoutine = new LoadSeparateRoutine(module);
|
||||
_loadRotationHomeOffsetRoutine = new LoadRotationHomeOffsetRoutine();
|
||||
_slitValveRoutine = new LoadLockSlitValveRoutine();
|
||||
}
|
||||
|
||||
private void InitDevice()
|
||||
@ -243,7 +251,6 @@ namespace SicModules.LLs
|
||||
|
||||
Transition(STATE.Error, MSG.Reset, FsmReset, STATE.Idle);
|
||||
|
||||
|
||||
//PrepareTransfer
|
||||
Transition(STATE.Idle, MSG.PrepareTransfer, FsmStartPrepareTransfer, STATE.PrepareTransfer);
|
||||
Transition(STATE.PrepareTransfer, FSM_MSG.TIMER, FsmMonitorTask, STATE.Idle);
|
||||
@ -273,6 +280,15 @@ namespace SicModules.LLs
|
||||
Transition(STATE.LeakCheck, FSM_MSG.TIMER, FsmMonitorTask, STATE.Idle);
|
||||
Transition(STATE.LeakCheck, MSG.Abort, FsmAbortTask, STATE.Idle);
|
||||
|
||||
//open SlitValve
|
||||
Transition(STATE.Idle, MSG.OpenSlitValve, FsmStartOpenSlitValve, STATE.OpenSlitValve);
|
||||
Transition(STATE.OpenSlitValve, FSM_MSG.TIMER, FsmMonitorTask, STATE.Idle);
|
||||
Transition(STATE.OpenSlitValve, MSG.Abort, FsmAbortTask, STATE.Idle);
|
||||
|
||||
//close SlitValve
|
||||
Transition(STATE.Idle, MSG.CloseSlitValve, FsmStartCloseSlitValve, STATE.CloseSlitValve);
|
||||
Transition(STATE.CloseSlitValve, FSM_MSG.TIMER, FsmMonitorTask, STATE.Idle);
|
||||
Transition(STATE.CloseSlitValve, MSG.Abort, FsmAbortTask, STATE.Idle);
|
||||
|
||||
//Separate
|
||||
Transition(STATE.Idle, MSG.Separate, FsmStartSeparate, STATE.Separating);
|
||||
@ -331,6 +347,16 @@ namespace SicModules.LLs
|
||||
return CheckToPostMessage((int)MSG.CloseDoor);
|
||||
});
|
||||
|
||||
OP.Subscribe($"{Name}.OpenSlitValve", (string cmd, object[] args) =>
|
||||
{
|
||||
return CheckToPostMessage((int)MSG.OpenSlitValve);
|
||||
});
|
||||
|
||||
OP.Subscribe($"{Name}.CloseSlitValve", (string cmd, object[] args) =>
|
||||
{
|
||||
return CheckToPostMessage((int)MSG.CloseSlitValve);
|
||||
});
|
||||
|
||||
OP.Subscribe($"{Name}.Reset", (string cmd, object[] args) =>
|
||||
{
|
||||
return CheckToPostMessage((int)MSG.Reset);
|
||||
@ -693,6 +719,26 @@ namespace SicModules.LLs
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool FsmStartOpenSlitValve(object[] param)
|
||||
{
|
||||
_slitValveRoutine.Init(true);
|
||||
|
||||
Result ret = StartRoutine(_slitValveRoutine);
|
||||
if (ret == Result.FAIL || ret == Result.DONE)
|
||||
return false;
|
||||
return ret == Result.RUN;
|
||||
}
|
||||
|
||||
private bool FsmStartCloseSlitValve(object[] param)
|
||||
{
|
||||
_slitValveRoutine.Init(false);
|
||||
|
||||
Result ret = StartRoutine(_slitValveRoutine);
|
||||
if (ret == Result.FAIL || ret == Result.DONE)
|
||||
return false;
|
||||
return ret == Result.RUN;
|
||||
}
|
||||
|
||||
public override bool TransferHandoff(ModuleName robot, Hand blade, int targetSlot, EnumTransferType transferType, out string reason)
|
||||
{
|
||||
reason = string.Empty;
|
||||
|
||||
145
App/Modules/SicModules/LLs/Routines/LoadLockSlitValveRoutine.cs
Normal file
145
App/Modules/SicModules/LLs/Routines/LoadLockSlitValveRoutine.cs
Normal file
@ -0,0 +1,145 @@
|
||||
using Aitex.Core.RT.Device;
|
||||
using Aitex.Core.RT.Device.Unit;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadLocks;
|
||||
using SicModules.EFEMs.Routines;
|
||||
using SicModules.TMs;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadLockSlitValveRoutine : LoadLockBaseRoutine
|
||||
{
|
||||
enum RoutineStep
|
||||
{
|
||||
ServoRoutine,
|
||||
LiftRoutine,
|
||||
CheckPressureCondition,
|
||||
CheckPressure,
|
||||
SetSlitValve,
|
||||
CheckPressureCondition2,
|
||||
TimeDlay1
|
||||
}
|
||||
|
||||
private int _motionTimeout = 30;
|
||||
private bool _paramIsOpen; //是否开门
|
||||
private SicTM _tm;
|
||||
private IoSlitValve _slitvalveLoadLockLeft;
|
||||
private LoadLockServoToRoutine _llServoToRoutine;
|
||||
private LoadLockLiftRoutine _llLiftRoutine;
|
||||
|
||||
public void Init(bool isOpen)
|
||||
{
|
||||
_paramIsOpen = isOpen;
|
||||
Name = isOpen ? "Open Slit Valve" : "Close Slit Valve";
|
||||
}
|
||||
|
||||
public LoadLockSlitValveRoutine()
|
||||
{
|
||||
Module = ModuleName.LoadLock.ToString();
|
||||
Name = "LoadLockSlitValue";
|
||||
_tm = DEVICE.GetDevice<SicTM>($"{ModuleName.System.ToString()}.{ModuleName.TM.ToString()}");
|
||||
_llServoToRoutine = new LoadLockServoToRoutine(ModuleName.LoadLock);
|
||||
|
||||
_llLiftRoutine = new LoadLockLiftRoutine();
|
||||
_slitvalveLoadLockLeft = DEVICE.GetDevice<IoSlitValve>("LoadLock.LoadLockLSideDoor");
|
||||
|
||||
}
|
||||
|
||||
public override Result Start(params object[] objs)
|
||||
{
|
||||
Reset();
|
||||
if (_paramIsOpen)
|
||||
{
|
||||
//判断TM到LoadLock或者UnLoad的门是否关上
|
||||
if (!_tm.CheckSlitValveClose(ModuleName.LoadLock))
|
||||
{
|
||||
EV.PostWarningLog(Module, $"can not open left slit valve,TM slit valve not closed, can not open at same time");
|
||||
return Result.FAIL;
|
||||
}
|
||||
|
||||
_motionTimeout = SC.GetValue<int>("System.SlitValveMotionTimeout");
|
||||
|
||||
_llServoToRoutine.Init(SC.GetValue<double>("LoadLock.AtmPressureBase"));
|
||||
_llLiftRoutine.Init(false);
|
||||
}
|
||||
Notify("Start");
|
||||
return Result.RUN;
|
||||
}
|
||||
|
||||
public override Result Monitor()
|
||||
{
|
||||
try
|
||||
{
|
||||
//开门之前需要对两边腔体进行气压调节,降Lift
|
||||
if (_paramIsOpen)
|
||||
{
|
||||
ExecuteRoutine((int)RoutineStep.ServoRoutine, _llServoToRoutine);
|
||||
ExecuteRoutine((int)RoutineStep.LiftRoutine, _llLiftRoutine);
|
||||
}
|
||||
|
||||
SetSlitValve((int)RoutineStep.SetSlitValve, _paramIsOpen, _motionTimeout);
|
||||
|
||||
TimeDelay((int)RoutineStep.TimeDlay1, 1);
|
||||
|
||||
}
|
||||
catch (RoutineBreakException)
|
||||
{
|
||||
return Result.RUN;
|
||||
}
|
||||
catch (RoutineFaildException)
|
||||
{
|
||||
return Result.FAIL;
|
||||
}
|
||||
|
||||
Notify("Finished");
|
||||
return Result.DONE;
|
||||
|
||||
}
|
||||
|
||||
public void SetSlitValve(int id, bool isOpen, int timeout)
|
||||
{
|
||||
Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
|
||||
{
|
||||
Notify($"set left slit valve " + (isOpen ? "Open" : "Close"));
|
||||
|
||||
if (!_slitvalveLoadLockLeft.SetSlitValve(isOpen, out string reason))
|
||||
{
|
||||
Stop(reason);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}, () =>
|
||||
{
|
||||
return isOpen ? _slitvalveLoadLockLeft.IsOpen : _slitvalveLoadLockLeft.IsClose;
|
||||
|
||||
}, timeout * 1000);
|
||||
|
||||
if (ret.Item1)
|
||||
{
|
||||
if (ret.Item2 == Result.FAIL)
|
||||
{
|
||||
throw (new RoutineFaildException());
|
||||
}
|
||||
else if (ret.Item2 == Result.TIMEOUT) //timeout
|
||||
{
|
||||
Stop($"can not complete in {timeout} seconds");
|
||||
throw (new RoutineFaildException());
|
||||
}
|
||||
else
|
||||
throw (new RoutineBreakException());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -98,6 +98,7 @@
|
||||
<Compile Include="LLs\Routines\LoadLockPumpRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockPurgeRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockServoToRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockSlitValveRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockTrayAlignerRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockTrayClawRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockVentRoutine.cs" />
|
||||
|
||||
@ -736,35 +736,24 @@ namespace SicSimulator.Instances
|
||||
IO.DI["DI_ReactorBDoorClosed"].Value = IO.DO["DO_RectorBDoorClose"].Value;
|
||||
}
|
||||
|
||||
if (IO.DO["DO_UnloadStationDoorOpen"].Value != IO.DO["DO_UnloadStationDoorClose"].Value)
|
||||
{
|
||||
IO.DI["DI_UnloadStationDoorOpened"].Value = IO.DO["DO_UnloadStationDoorOpen"].Value;
|
||||
IO.DI["DI_UnloadStationDoorClosed"].Value = IO.DO["DO_UnloadStationDoorClose"].Value;
|
||||
}
|
||||
|
||||
if (IO.DO["DO_BufferStationDoorOpen"].Value != IO.DO["DO_BufferStationDoorClose"].Value)
|
||||
{
|
||||
IO.DI["DI_BufferStationDoorOpened"].Value = IO.DO["DO_BufferStationDoorOpen"].Value;
|
||||
IO.DI["DI_BufferStationDoorClosed"].Value = IO.DO["DO_BufferStationDoorClose"].Value;
|
||||
}
|
||||
|
||||
if (IO.DO["DO_UnloadSubStationDoorOpen"].Value != IO.DO["DO_UnloadSubStationDoorClose"].Value)
|
||||
{
|
||||
IO.DI["DI_UnloadSubStationDoorOpened"].Value = IO.DO["DO_UnloadSubStationDoorOpen"].Value;
|
||||
IO.DI["DI_UnloadSubStationDoorClosed"].Value = IO.DO["DO_UnloadSubStationDoorClose"].Value;
|
||||
}
|
||||
|
||||
if (IO.DO["DO_LoadLSideDoorOpen"].Value != IO.DO["DO_LoadLSideDoorClose"].Value)
|
||||
{
|
||||
IO.DI["DI_LoadLSideDoorOpened"].Value = IO.DO["DO_LoadLSideDoorOpen"].Value;
|
||||
IO.DI["DI_LoadLSideDoorClosed"].Value = IO.DO["DO_LoadLSideDoorClose"].Value;
|
||||
}
|
||||
|
||||
if (IO.DO["DO_LoadRSideDoorOpen"].Value != IO.DO["DO_LoadRSideDoorClose"].Value)
|
||||
if (IO.DO["DO_LoadLidLock"].Value != IO.DO["DO_LoadLidUnlock"].Value)
|
||||
{
|
||||
IO.DI["DI_LoadRSideDoorOpened"].Value = IO.DO["DO_LoadRSideDoorOpen"].Value;
|
||||
IO.DI["DI_LoadRSideDoorClosed"].Value = IO.DO["DO_LoadRSideDoorClose"].Value;
|
||||
IO.DI["DI_LoadLidLocked"].Value = IO.DO["DO_LoadLidLock"].Value;
|
||||
IO.DI["DI_LoadLidUnlocked"].Value = IO.DO["DO_LoadLidUnlock"].Value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private int time1 = 0;
|
||||
@ -801,6 +790,16 @@ namespace SicSimulator.Instances
|
||||
|
||||
IO.AI["AI_M60FlowRead"].Value = IO.AO[$"AO_M60FlowSetpoint"].Value;
|
||||
|
||||
if (IO.DO["DO_LoadLockWaferCYUP"].Value != IO.DO["DO_LoadLockWaferCYDown"].Value)
|
||||
{
|
||||
time1++;
|
||||
if (time1 > 10)
|
||||
{
|
||||
time1 = 0;
|
||||
IO.DI["DI_LoadLockWaferCYUPFB"].Value = IO.DO["DO_LoadLockWaferCYUP"].Value;
|
||||
IO.DI["DI_LoadLockWaferCYDownFB"].Value = IO.DO["DO_LoadLockWaferCYDown"].Value;
|
||||
}
|
||||
}
|
||||
//if (IO.DO["DO_LoadLidLock"].Value != IO.DO["DO_LoadLidUnlock"].Value)
|
||||
//{
|
||||
// time1++;
|
||||
|
||||
@ -1321,6 +1321,7 @@
|
||||
<RowDefinition Height="32" />
|
||||
<RowDefinition Height="32" />
|
||||
<RowDefinition Height="32" />
|
||||
<RowDefinition Height="32" />
|
||||
<RowDefinition />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
@ -1729,46 +1730,162 @@
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Padding="5,1,0,1"
|
||||
Background="{DynamicResource Table_BG_Title}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="1,0,1,1">
|
||||
Grid.Row="6"
|
||||
Padding="5,1,0,1"
|
||||
Background="{DynamicResource Table_BG_Title}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock
|
||||
lex:ResxLocalizationProvider.DefaultDictionary="lang_tmview"
|
||||
VerticalAlignment="Center"
|
||||
FontFamily="Arial"
|
||||
FontSize="12"
|
||||
Foreground="{DynamicResource FG_Black}"
|
||||
Text="{lex:Loc ID_TXT_CoolingTime}"
|
||||
TextWrapping="Wrap" />
|
||||
VerticalAlignment="Center"
|
||||
lex:ResxLocalizationProvider.DefaultDictionary="lang_efemview"
|
||||
FontFamily="Arial"
|
||||
FontSize="12"
|
||||
Foreground="{DynamicResource FG_Black}"
|
||||
Text="{lex:Loc ID_TXT_Door}"
|
||||
TextWrapping="Wrap" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Grid.Column="1"
|
||||
Padding="5,1,0,1"
|
||||
Background="{DynamicResource Table_BG_Content}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="0,0,0,1">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
FontFamily="Arial"
|
||||
FontSize="12"
|
||||
Foreground="{DynamicResource FG_Black}"
|
||||
Text="{Binding LoadCoolingTime, StringFormat=0.0}"
|
||||
TextAlignment="Center"
|
||||
TextWrapping="Wrap" />
|
||||
Grid.Row="6"
|
||||
Grid.Column="1"
|
||||
Padding="5,1,0,1"
|
||||
Background="{DynamicResource Table_BG_Content}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="0,0,0,1">
|
||||
<TextBlock Margin="0,7,0,0"
|
||||
VerticalAlignment="Top"
|
||||
FontFamily="Arial"
|
||||
FontSize="12"
|
||||
Foreground="{DynamicResource FG_Black}"
|
||||
Text="LeftSide"
|
||||
TextAlignment="Center"
|
||||
TextWrapping="Wrap" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Grid.Column="2"
|
||||
Padding="5,1"
|
||||
Background="{DynamicResource Table_BG_Content}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="1,0,1,1">
|
||||
<StackPanel Orientation="Horizontal" />
|
||||
Grid.Row="6"
|
||||
Grid.Column="2"
|
||||
Padding="5,1"
|
||||
Background="{DynamicResource Table_BG_Content}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="1,0,1,1">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Button
|
||||
Width="80"
|
||||
Height="25"
|
||||
Margin="10,0"
|
||||
HorizontalAlignment="Left"
|
||||
Content="{lex:Loc ID_BTN_Open_Content}"
|
||||
IsEnabled="{Binding IsLLEnableManualOperation}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="LoadOpenSlitValve" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</Button>
|
||||
<deviceControl:AITSensor
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
GreenColor="True"
|
||||
LightOnValue="{Binding LoadLockLSideDoorOpenSensor}" />
|
||||
<Button
|
||||
Width="80"
|
||||
Height="25"
|
||||
Margin="10,0"
|
||||
HorizontalAlignment="Left"
|
||||
Content="{lex:Loc ID_BTN_Close_Content}"
|
||||
IsEnabled="{Binding IsLLEnableManualOperation}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="LoadCloseSlitValve" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</Button>
|
||||
<deviceControl:AITSensor
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
GreenColor="True"
|
||||
LightOnValue="{Binding LoadLockLSideDoorCloseSensor}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="7"
|
||||
Padding="5,1,0,1"
|
||||
Background="{DynamicResource Table_BG_Title}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
lex:ResxLocalizationProvider.DefaultDictionary="lang_efemview"
|
||||
FontFamily="Arial"
|
||||
FontSize="12"
|
||||
Foreground="{DynamicResource FG_Black}"
|
||||
Text="{lex:Loc ID_TXT_Lift}"
|
||||
TextWrapping="Wrap" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="7"
|
||||
Grid.Column="1"
|
||||
Padding="5,1,0,1"
|
||||
Background="{DynamicResource Table_BG_Content}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="0,0,0,1">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
FontFamily="Arial"
|
||||
FontSize="12"
|
||||
Foreground="{DynamicResource FG_Black}"
|
||||
Text=""
|
||||
TextAlignment="Center"
|
||||
TextWrapping="Wrap" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="7"
|
||||
Grid.Column="2"
|
||||
Padding="5,1"
|
||||
Background="{DynamicResource Table_BG_Content}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="1,0,1,1">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<deviceControl:AITSensor
|
||||
Margin="10,0,0,0"
|
||||
HorizontalAlignment="Center"
|
||||
GreenColor="True"
|
||||
LightOnValue="{Binding LoadLiftUpSensor}" />
|
||||
<Button
|
||||
Width="80"
|
||||
Height="24"
|
||||
Margin="10,0"
|
||||
HorizontalAlignment="Left"
|
||||
lex:ResxLocalizationProvider.DefaultDictionary="lang_efemview"
|
||||
Content="{lex:Loc ID_BTN_Up_Content}"
|
||||
IsEnabled="{Binding IsLLEnableManualOperation}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="LLLiftUp" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</Button>
|
||||
<deviceControl:AITSensor
|
||||
Margin="60,0,0,0"
|
||||
HorizontalAlignment="Center"
|
||||
GreenColor="True"
|
||||
LightOnValue="{Binding LoadLiftDownSensor}" />
|
||||
<Button
|
||||
Width="80"
|
||||
Height="24"
|
||||
Margin="10,0"
|
||||
HorizontalAlignment="Left"
|
||||
lex:ResxLocalizationProvider.DefaultDictionary="lang_efemview"
|
||||
Content="{lex:Loc ID_BTN_Down_Content}"
|
||||
IsEnabled="{Binding IsLLEnableManualOperation}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="LLLiftDown" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
|
||||
|
||||
@ -701,6 +701,18 @@ namespace SicUI.Client.Models.Platform.TM
|
||||
[Subscription("LoadLock.Status")]
|
||||
public string LLStatus { get; set; }
|
||||
|
||||
[Subscription("LoadLock.LLLift.UpSensor")]
|
||||
public bool LoadLiftUpSensor { get; set; }
|
||||
|
||||
[Subscription("LoadLock.LLLift.DownSensor")]
|
||||
public bool LoadLiftDownSensor { get; set; }
|
||||
|
||||
[Subscription("LoadLock.LoadLockLSideDoor.OpenFeedback")]
|
||||
public bool LoadLockLSideDoorOpenSensor { get; set; }
|
||||
|
||||
[Subscription("LoadLock.LoadLockLSideDoor.CloseFeedback")]
|
||||
public bool LoadLockLSideDoorCloseSensor { get; set; }
|
||||
|
||||
[Subscription("LoadLock.LidState")]
|
||||
public string LLLidState { get; set; }
|
||||
|
||||
@ -1028,14 +1040,17 @@ namespace SicUI.Client.Models.Platform.TM
|
||||
|
||||
TMProvider.Instance.Purge(module);
|
||||
}
|
||||
public void LiftUp(string module)
|
||||
|
||||
public void LLLiftUp()
|
||||
{
|
||||
TMProvider.Instance.LiftUp(module);
|
||||
InvokeClient.Instance.Service.DoOperation($"LoadLock.LLLift.MoveUp");
|
||||
}
|
||||
public void LiftDown(string module)
|
||||
|
||||
public void LLLiftDown()
|
||||
{
|
||||
TMProvider.Instance.LiftDown(module);
|
||||
InvokeClient.Instance.Service.DoOperation($"LoadLock.LLLift.MoveDown");
|
||||
}
|
||||
|
||||
public void OpenDoor(string module)
|
||||
{
|
||||
TMProvider.Instance.OpenDoor(module);
|
||||
@ -1126,7 +1141,14 @@ namespace SicUI.Client.Models.Platform.TM
|
||||
InvokeClient.Instance.Service.DoOperation($"LoadLock.LoadLidLock.MoveDown");
|
||||
}
|
||||
|
||||
|
||||
public void LoadOpenSlitValve()
|
||||
{
|
||||
InvokeClient.Instance.Service.DoOperation($"LoadLock.OpenSlitValve");
|
||||
}
|
||||
public void LoadCloseSlitValve()
|
||||
{
|
||||
InvokeClient.Instance.Service.DoOperation($"LoadLock.CloseSlitValve");
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ConfinementRing
|
||||
@ -1153,34 +1175,5 @@ namespace SicUI.Client.Models.Platform.TM
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region EFEM
|
||||
[Subscription("EFEM.Status")]
|
||||
public string EFEMStatus { get; set; }
|
||||
|
||||
|
||||
[Subscription("EFEM.IsOnline")]
|
||||
public bool EFEMIsOnline { get; set; }
|
||||
public bool EFEMIsOffline => !EFEMIsOnline;
|
||||
|
||||
public bool IsEFEMEnableManualOperation => !EFEMIsOnline && EFEMStatus == "Idle";
|
||||
|
||||
public void EFEMHomeRoutine(string module)
|
||||
{
|
||||
InvokeClient.Instance.Service.DoOperation($"{module}.Home");
|
||||
}
|
||||
public void EFEMAbortRoutine(string module)
|
||||
{
|
||||
InvokeClient.Instance.Service.DoOperation($"{module}.Abort");
|
||||
}
|
||||
public void SetModuleOnline(string module)
|
||||
{
|
||||
InvokeClient.Instance.Service.DoOperation($"{module}.SetOnline");
|
||||
}
|
||||
public void SetModuleOffline(string module)
|
||||
{
|
||||
InvokeClient.Instance.Service.DoOperation($"{module}.SetOffline");
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user