添加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="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="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="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="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="LoadLock" display="LLLSideDoor" Type="" unit="" schematicId="LLLSideDoor" scTimeout="System.SlitValveMotionTimeout" diOpen="DI_LoadLSideDoorOpened" diClose="DI_LoadLSideDoorClosed" doOpen="DO_LoadLSideDoorOpen" doClose="DO_LoadLSideDoorClose" />
|
||||||
<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" />
|
|
||||||
</IoSlitValves>
|
</IoSlitValves>
|
||||||
<IoPressureMeter3s classType="Aitex.Core.RT.Device.Unit.IoPressureMeter3" assembly="MECF.Framework.RT.EquipmentLibrary">
|
<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" />
|
<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" />
|
<IoTempMeter module="Buffer" id="BufferTemp" display="" schematicId="" aioType="float" aiFeedback="AI_BufferTemp" />
|
||||||
</IoTempMeters>
|
</IoTempMeters>
|
||||||
<IoLift4s classType="Aitex.Core.RT.Device.Unit.IoLift4" assembly="MECF.Framework.RT.EquipmentLibrary">
|
<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="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>
|
</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">
|
<TMRobots assembly="SicModules" classType="SicModules.TMs.SicTMRobot">
|
||||||
<TMRobot id="TMRobot" module="TMRobot" display="" schematicId="" unit="" />
|
<TMRobot id="TMRobot" module="TMRobot" display="" schematicId="" unit="" />
|
||||||
</TMRobots>
|
</TMRobots>
|
||||||
@ -152,10 +144,11 @@
|
|||||||
<LLs assembly="SicModules" classType="SicModules.LLs.SicLoadLock">
|
<LLs assembly="SicModules" classType="SicModules.LLs.SicLoadLock">
|
||||||
<TM id="LoadLock" module="LoadLock" display="" schematicId="" unit="" />
|
<TM id="LoadLock" module="LoadLock" display="" schematicId="" unit="" />
|
||||||
</LLs>
|
</LLs>
|
||||||
<Unloads assembly="SicModules" classType="SicModules.UnLoads.SicUnLoad">
|
|
||||||
<Unload id="UnLoad" module="UnLoad" display="" schematicId="" unit="" />
|
|
||||||
</Unloads>
|
|
||||||
<Buffers assembly="SicModules" classType="SicModules.Buffers.SicBuffer">
|
<Buffers assembly="SicModules" classType="SicModules.Buffers.SicBuffer">
|
||||||
<Buffer id="Buffer" module="Buffer" display="" schematicId="" unit="" />
|
<Buffer id="Buffer" module="Buffer" display="" schematicId="" unit="" />
|
||||||
</Buffers>
|
</Buffers>
|
||||||
|
|
||||||
|
<EFEMs assembly="SicModules" classType="SicModules.EFEMs.SicEFEM">
|
||||||
|
<Efem id="EFEM" module="EFEM" display="" schematicId="" unit="" />
|
||||||
|
</EFEMs>
|
||||||
</DeviceModelDefine>
|
</DeviceModelDefine>
|
||||||
@ -288,14 +288,14 @@
|
|||||||
<DO_ITEM Index="154" Name="DO_LdRotationMoveCCD2Pos" BufferOffset="154" Addr="154" Description="" Visible="false"/>
|
<DO_ITEM Index="154" Name="DO_LdRotationMoveCCD2Pos" BufferOffset="154" Addr="154" Description="" Visible="false"/>
|
||||||
|
|
||||||
<!--垃圾IO数据-->
|
<!--垃圾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_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_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_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_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_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_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数据-->
|
<!--垃圾IO数据-->
|
||||||
</Block>
|
</Block>
|
||||||
</Dig_Out>
|
</Dig_Out>
|
||||||
|
|||||||
@ -1,7 +1,4 @@
|
|||||||
using System;
|
using Aitex.Core.RT.DataCenter;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Aitex.Core.RT.DataCenter;
|
|
||||||
using Aitex.Core.RT.Device;
|
using Aitex.Core.RT.Device;
|
||||||
using Aitex.Core.RT.Event;
|
using Aitex.Core.RT.Event;
|
||||||
using Aitex.Core.RT.Fsm;
|
using Aitex.Core.RT.Fsm;
|
||||||
@ -13,7 +10,12 @@ using Aitex.Core.Utilities;
|
|||||||
using Aitex.Sorter.Common;
|
using Aitex.Sorter.Common;
|
||||||
using MECF.Framework.Common.Equipment;
|
using MECF.Framework.Common.Equipment;
|
||||||
using MECF.Framework.Common.Schedulers;
|
using MECF.Framework.Common.Schedulers;
|
||||||
|
using SicModules.EFEMs.Routines;
|
||||||
using SicModules.LLs.Routines;
|
using SicModules.LLs.Routines;
|
||||||
|
using SicModules.TMs.Routines;
|
||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace SicModules.LLs
|
namespace SicModules.LLs
|
||||||
{
|
{
|
||||||
@ -39,6 +41,8 @@ namespace SicModules.LLs
|
|||||||
Separating,
|
Separating,
|
||||||
Grouping,
|
Grouping,
|
||||||
RotationHomeOffset,
|
RotationHomeOffset,
|
||||||
|
OpenSlitValve,
|
||||||
|
CloseSlitValve,
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum MSG
|
public enum MSG
|
||||||
@ -63,6 +67,8 @@ namespace SicModules.LLs
|
|||||||
Separate,
|
Separate,
|
||||||
Group,
|
Group,
|
||||||
RelativeHomeOffset,
|
RelativeHomeOffset,
|
||||||
|
OpenSlitValve,
|
||||||
|
CloseSlitValve,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -167,6 +173,7 @@ namespace SicModules.LLs
|
|||||||
private LoadSeparateRoutine _loadSeparateRoutine;
|
private LoadSeparateRoutine _loadSeparateRoutine;
|
||||||
|
|
||||||
private LoadRotationHomeOffsetRoutine _loadRotationHomeOffsetRoutine;
|
private LoadRotationHomeOffsetRoutine _loadRotationHomeOffsetRoutine;
|
||||||
|
private LoadLockSlitValveRoutine _slitValveRoutine;
|
||||||
|
|
||||||
|
|
||||||
public LoadLockModule(ModuleName module) : base(1)
|
public LoadLockModule(ModuleName module) : base(1)
|
||||||
@ -217,6 +224,7 @@ namespace SicModules.LLs
|
|||||||
_loadLockGroupRoutine = new LoadLockGroupRoutine(module);
|
_loadLockGroupRoutine = new LoadLockGroupRoutine(module);
|
||||||
_loadSeparateRoutine = new LoadSeparateRoutine(module);
|
_loadSeparateRoutine = new LoadSeparateRoutine(module);
|
||||||
_loadRotationHomeOffsetRoutine = new LoadRotationHomeOffsetRoutine();
|
_loadRotationHomeOffsetRoutine = new LoadRotationHomeOffsetRoutine();
|
||||||
|
_slitValveRoutine = new LoadLockSlitValveRoutine();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitDevice()
|
private void InitDevice()
|
||||||
@ -243,7 +251,6 @@ namespace SicModules.LLs
|
|||||||
|
|
||||||
Transition(STATE.Error, MSG.Reset, FsmReset, STATE.Idle);
|
Transition(STATE.Error, MSG.Reset, FsmReset, STATE.Idle);
|
||||||
|
|
||||||
|
|
||||||
//PrepareTransfer
|
//PrepareTransfer
|
||||||
Transition(STATE.Idle, MSG.PrepareTransfer, FsmStartPrepareTransfer, STATE.PrepareTransfer);
|
Transition(STATE.Idle, MSG.PrepareTransfer, FsmStartPrepareTransfer, STATE.PrepareTransfer);
|
||||||
Transition(STATE.PrepareTransfer, FSM_MSG.TIMER, FsmMonitorTask, STATE.Idle);
|
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, FSM_MSG.TIMER, FsmMonitorTask, STATE.Idle);
|
||||||
Transition(STATE.LeakCheck, MSG.Abort, FsmAbortTask, 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
|
//Separate
|
||||||
Transition(STATE.Idle, MSG.Separate, FsmStartSeparate, STATE.Separating);
|
Transition(STATE.Idle, MSG.Separate, FsmStartSeparate, STATE.Separating);
|
||||||
@ -331,6 +347,16 @@ namespace SicModules.LLs
|
|||||||
return CheckToPostMessage((int)MSG.CloseDoor);
|
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) =>
|
OP.Subscribe($"{Name}.Reset", (string cmd, object[] args) =>
|
||||||
{
|
{
|
||||||
return CheckToPostMessage((int)MSG.Reset);
|
return CheckToPostMessage((int)MSG.Reset);
|
||||||
@ -693,6 +719,26 @@ namespace SicModules.LLs
|
|||||||
return false;
|
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)
|
public override bool TransferHandoff(ModuleName robot, Hand blade, int targetSlot, EnumTransferType transferType, out string reason)
|
||||||
{
|
{
|
||||||
reason = string.Empty;
|
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\LoadLockPumpRoutine.cs" />
|
||||||
<Compile Include="LLs\Routines\LoadLockPurgeRoutine.cs" />
|
<Compile Include="LLs\Routines\LoadLockPurgeRoutine.cs" />
|
||||||
<Compile Include="LLs\Routines\LoadLockServoToRoutine.cs" />
|
<Compile Include="LLs\Routines\LoadLockServoToRoutine.cs" />
|
||||||
|
<Compile Include="LLs\Routines\LoadLockSlitValveRoutine.cs" />
|
||||||
<Compile Include="LLs\Routines\LoadLockTrayAlignerRoutine.cs" />
|
<Compile Include="LLs\Routines\LoadLockTrayAlignerRoutine.cs" />
|
||||||
<Compile Include="LLs\Routines\LoadLockTrayClawRoutine.cs" />
|
<Compile Include="LLs\Routines\LoadLockTrayClawRoutine.cs" />
|
||||||
<Compile Include="LLs\Routines\LoadLockVentRoutine.cs" />
|
<Compile Include="LLs\Routines\LoadLockVentRoutine.cs" />
|
||||||
|
|||||||
@ -736,35 +736,24 @@ namespace SicSimulator.Instances
|
|||||||
IO.DI["DI_ReactorBDoorClosed"].Value = IO.DO["DO_RectorBDoorClose"].Value;
|
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)
|
if (IO.DO["DO_BufferStationDoorOpen"].Value != IO.DO["DO_BufferStationDoorClose"].Value)
|
||||||
{
|
{
|
||||||
IO.DI["DI_BufferStationDoorOpened"].Value = IO.DO["DO_BufferStationDoorOpen"].Value;
|
IO.DI["DI_BufferStationDoorOpened"].Value = IO.DO["DO_BufferStationDoorOpen"].Value;
|
||||||
IO.DI["DI_BufferStationDoorClosed"].Value = IO.DO["DO_BufferStationDoorClose"].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)
|
if (IO.DO["DO_LoadLSideDoorOpen"].Value != IO.DO["DO_LoadLSideDoorClose"].Value)
|
||||||
{
|
{
|
||||||
IO.DI["DI_LoadLSideDoorOpened"].Value = IO.DO["DO_LoadLSideDoorOpen"].Value;
|
IO.DI["DI_LoadLSideDoorOpened"].Value = IO.DO["DO_LoadLSideDoorOpen"].Value;
|
||||||
IO.DI["DI_LoadLSideDoorClosed"].Value = IO.DO["DO_LoadLSideDoorClose"].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_LoadLidLocked"].Value = IO.DO["DO_LoadLidLock"].Value;
|
||||||
IO.DI["DI_LoadRSideDoorClosed"].Value = IO.DO["DO_LoadRSideDoorClose"].Value;
|
IO.DI["DI_LoadLidUnlocked"].Value = IO.DO["DO_LoadLidUnlock"].Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int time1 = 0;
|
private int time1 = 0;
|
||||||
@ -801,6 +790,16 @@ namespace SicSimulator.Instances
|
|||||||
|
|
||||||
IO.AI["AI_M60FlowRead"].Value = IO.AO[$"AO_M60FlowSetpoint"].Value;
|
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)
|
//if (IO.DO["DO_LoadLidLock"].Value != IO.DO["DO_LoadLidUnlock"].Value)
|
||||||
//{
|
//{
|
||||||
// time1++;
|
// time1++;
|
||||||
|
|||||||
@ -1321,6 +1321,7 @@
|
|||||||
<RowDefinition Height="32" />
|
<RowDefinition Height="32" />
|
||||||
<RowDefinition Height="32" />
|
<RowDefinition Height="32" />
|
||||||
<RowDefinition Height="32" />
|
<RowDefinition Height="32" />
|
||||||
|
<RowDefinition Height="32" />
|
||||||
<RowDefinition />
|
<RowDefinition />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
@ -1729,46 +1730,162 @@
|
|||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
<Border
|
<Border
|
||||||
Grid.Row="6"
|
Grid.Row="6"
|
||||||
Padding="5,1,0,1"
|
Padding="5,1,0,1"
|
||||||
Background="{DynamicResource Table_BG_Title}"
|
Background="{DynamicResource Table_BG_Title}"
|
||||||
BorderBrush="{DynamicResource Table_BD}"
|
BorderBrush="{DynamicResource Table_BD}"
|
||||||
BorderThickness="1,0,1,1">
|
BorderThickness="1,0,1,1">
|
||||||
<TextBlock
|
<TextBlock
|
||||||
lex:ResxLocalizationProvider.DefaultDictionary="lang_tmview"
|
VerticalAlignment="Center"
|
||||||
VerticalAlignment="Center"
|
lex:ResxLocalizationProvider.DefaultDictionary="lang_efemview"
|
||||||
FontFamily="Arial"
|
FontFamily="Arial"
|
||||||
FontSize="12"
|
FontSize="12"
|
||||||
Foreground="{DynamicResource FG_Black}"
|
Foreground="{DynamicResource FG_Black}"
|
||||||
Text="{lex:Loc ID_TXT_CoolingTime}"
|
Text="{lex:Loc ID_TXT_Door}"
|
||||||
TextWrapping="Wrap" />
|
TextWrapping="Wrap" />
|
||||||
</Border>
|
</Border>
|
||||||
<Border
|
<Border
|
||||||
Grid.Row="6"
|
Grid.Row="6"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
Padding="5,1,0,1"
|
Padding="5,1,0,1"
|
||||||
Background="{DynamicResource Table_BG_Content}"
|
Background="{DynamicResource Table_BG_Content}"
|
||||||
BorderBrush="{DynamicResource Table_BD}"
|
BorderBrush="{DynamicResource Table_BD}"
|
||||||
BorderThickness="0,0,0,1">
|
BorderThickness="0,0,0,1">
|
||||||
<TextBlock
|
<TextBlock Margin="0,7,0,0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Top"
|
||||||
FontFamily="Arial"
|
FontFamily="Arial"
|
||||||
FontSize="12"
|
FontSize="12"
|
||||||
Foreground="{DynamicResource FG_Black}"
|
Foreground="{DynamicResource FG_Black}"
|
||||||
Text="{Binding LoadCoolingTime, StringFormat=0.0}"
|
Text="LeftSide"
|
||||||
TextAlignment="Center"
|
TextAlignment="Center"
|
||||||
TextWrapping="Wrap" />
|
TextWrapping="Wrap" />
|
||||||
</Border>
|
</Border>
|
||||||
<Border
|
<Border
|
||||||
Grid.Row="6"
|
Grid.Row="6"
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
Padding="5,1"
|
Padding="5,1"
|
||||||
Background="{DynamicResource Table_BG_Content}"
|
Background="{DynamicResource Table_BG_Content}"
|
||||||
BorderBrush="{DynamicResource Table_BD}"
|
BorderBrush="{DynamicResource Table_BD}"
|
||||||
BorderThickness="1,0,1,1">
|
BorderThickness="1,0,1,1">
|
||||||
<StackPanel Orientation="Horizontal" />
|
<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>
|
||||||
|
|
||||||
|
<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>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
|
|||||||
@ -701,6 +701,18 @@ namespace SicUI.Client.Models.Platform.TM
|
|||||||
[Subscription("LoadLock.Status")]
|
[Subscription("LoadLock.Status")]
|
||||||
public string LLStatus { get; set; }
|
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")]
|
[Subscription("LoadLock.LidState")]
|
||||||
public string LLLidState { get; set; }
|
public string LLLidState { get; set; }
|
||||||
|
|
||||||
@ -1028,14 +1040,17 @@ namespace SicUI.Client.Models.Platform.TM
|
|||||||
|
|
||||||
TMProvider.Instance.Purge(module);
|
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)
|
public void OpenDoor(string module)
|
||||||
{
|
{
|
||||||
TMProvider.Instance.OpenDoor(module);
|
TMProvider.Instance.OpenDoor(module);
|
||||||
@ -1126,7 +1141,14 @@ namespace SicUI.Client.Models.Platform.TM
|
|||||||
InvokeClient.Instance.Service.DoOperation($"LoadLock.LoadLidLock.MoveDown");
|
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
|
#endregion
|
||||||
|
|
||||||
#region ConfinementRing
|
#region ConfinementRing
|
||||||
@ -1153,34 +1175,5 @@ namespace SicUI.Client.Models.Platform.TM
|
|||||||
|
|
||||||
#endregion
|
#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