1 修改SC配置中压力单位

2 Load腔中添加机械手取托盘Tray防呆
3 修改创建和删除tray Wafer对应的逻辑问题修改
This commit is contained in:
hanqiangqiang 2024-07-25 15:59:44 +08:00
parent 429b402a35
commit 08753d5bae
5 changed files with 27 additions and 6 deletions

View File

@ -16,6 +16,7 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.PMs;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TMs;
using SicModules.Devices;
using IoInterLock = SicModules.Devices.IoInterLock;
namespace SicModules.TMs.Routines.Base
@ -44,6 +45,8 @@ namespace SicModules.TMs.Routines.Base
get { return _trayClaw; }
}
protected bool IsTrayLoad => _ioLoadRotation.IsMoveDone;
protected IoLift4 UnLoadLift
{
get { return _unLoadLift; }
@ -67,6 +70,7 @@ namespace SicModules.TMs.Routines.Base
private IoLift4 _loadLift;
private IoLift4 _unLoadLift;
private IoClaw _trayClaw;
private IoLoadRotation _ioLoadRotation;
protected SicMultipleServo _sicServo;
@ -87,6 +91,8 @@ namespace SicModules.TMs.Routines.Base
_unLoadLift = DEVICE.GetDevice<IoLift4>($"{ModuleName.UnLoad}.UnLoadLift");
_trayClaw = DEVICE.GetDevice<IoClaw>("LoadLock.LLTrayClaw");
_ioLoadRotation = DEVICE.GetDevice<IoLoadRotation>("Load.Rotation");
_reactorSuspectorCheckPM1 = DEVICE.GetDevice<IoSensor>($"PM1.SensorReactorSuspectorCheck");
_reactorSuspectorCheckPM2 = DEVICE.GetDevice<IoSensor>($"PM2.SensorReactorSuspectorCheck");
}

View File

@ -205,6 +205,12 @@ namespace SicModules.TMs.Routines
EV.PostWarningLog(Module, $"Can not place, Load is clamp!");
return Result.FAIL;
}
if (!IsTrayLoad)
{
EV.PostWarningLog(Module, $"Can not place, tray is not at load angle !");
return Result.FAIL;
}
}
else if (_target == ModuleName.UnLoad)
{
@ -302,11 +308,11 @@ namespace SicModules.TMs.Routines
WaitSicServoLoadAngleRun((int)RoutineStep.SicServoLoadAngleRun, _sicServoLoadAngle, 90);
RobotMoveSingleStepAndWait((int)RoutineStep.RobotGotoPmLowAndWait, RobotDevice, _target, _targetSlot, _blade, RobotAction.Picking, false,true,60);//先进去,停在高位
TimeDelay((int)RoutineStep.TimeDelay3, 3);
TimeDelay((int)RoutineStep.TimeDelay3, 10);
//等磁流体开始旋转释放Tray盘
WaitSicServoUnloadAngleRun((int)RoutineStep.SicServoUnloadAngleRun, _sicServoUnloadAngle, 90);//开始旋转释放Tray盘
TimeDelay((int)RoutineStep.TimeDelay4, 10);
TimeDelay((int)RoutineStep.TimeDelay4, 3);
RobotMoveSingleStepAndWait((int)RoutineStep.RobotGotoPmHighAndWait, RobotDevice, _target, _targetSlot, _blade, RobotAction.Picking, true,false,60);//从高位退出去

View File

@ -195,7 +195,7 @@ namespace SicModules.TMs.Routines
//Place之前先,根据Sensor检测是否有盘
if (!SC.GetValue<bool>("System.IsSimulatorMode"))
{
if (_target ==ModuleName.LoadLock&& SensorLLTrayPresence.Value)
if ((_target ==ModuleName.LoadLock || _target == ModuleName.Load) && SensorLLTrayPresence.Value)
{
EV.PostWarningLog(Module, $"Can not place, LLTrayPresence sensor has tray");
return Result.FAIL;
@ -284,7 +284,7 @@ namespace SicModules.TMs.Routines
RobotMoveSingleStepAndWait((int)RoutineStep.RobotGotoPmLowAndWait, RobotDevice, _target, _targetSlot, _blade, RobotAction.Placing,false, true,60);//先进去,停在高位
TimeDelay((int)RoutineStep.TimeDelay4, 0);
TimeDelay((int)RoutineStep.TimeDelay4, 20);
WaitSicServoLoadAngleRun((int)RoutineStep.WaitSicServoLoadAngleRun, _sicServoLoadAngleRun, 90);//机械手到高位磁流体旋转锁紧Tray盘
TimeDelay((int)RoutineStep.TimeDelay5, 3);

View File

@ -543,7 +543,7 @@
<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 AddressDefault IP192.168.1.105:102" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="S1500" name="SiemensType" visible="false" description="Siemens Type" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="30" name="PT1PT2PressureDifferenceUpperLimit" description="PT1和PT2最大压差上限" max="1100" min="0" paramter="" tag="" unit="s" type="Double" />
<config default="30" name="PT1PT2PressureDifferenceUpperLimit" description="PT1和PT2最大压差上限" max="1100" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="Warning" name="PT1PT2PressureDifferenceMaxAlarmLevel" description="工艺过程中PT1和PT2最大压差超限时产生报警的等级" max="" min="" paramter="Alarm;Warning" tag="ReadOnlySelection" unit="" type="String" />
<config default="5" name="ThrottlePressureMaxDiff" description="蝶阀调节值与实际压力的差值小于此数值则表示到位" max="1000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="120" name="ThrottlePressureTimeout" description="蝶阀调节值超时时间" max="2000" min="0" paramter="" tag="" unit="s" type="Integer" />
@ -1144,7 +1144,7 @@
<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 AddressDefault IP192.168.1.205:102" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="S1500" name="SiemensType" visible="false" description="Siemens Type" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="30" name="PT1PT2PressureDifferenceUpperLimit" description="PT1和PT2最大压差上限" max="1100" min="0" paramter="" tag="" unit="s" type="Double" />
<config default="30" name="PT1PT2PressureDifferenceUpperLimit" description="PT1和PT2最大压差上限" max="1100" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="Warning" name="PT1PT2PressureDifferenceMaxAlarmLevel" description="工艺过程中PT1和PT2最大压差超限时产生报警的等级" max="" min="" paramter="Alarm;Warning" tag="ReadOnlySelection" unit="" type="String" />
<config default="5" name="ThrottlePressureMaxDiff" description="蝶阀调节值与实际压力的差值小于此数值则表示到位" max="1000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="120" name="ThrottlePressureTimeout" description="蝶阀调节值超时时间" max="2000" min="0" paramter="" tag="" unit="s" type="Integer" />

View File

@ -1183,6 +1183,10 @@ namespace SicRT.Equipments.Systems
if (WaferManager.Instance.IsWaferSlotLocationValid(chamber, slot))
{
if (!WaferManager.Instance.CheckHasTray(chamber, slot))
{
WaferManager.Instance.CreateTray(chamber, slot);
}
if (WaferManager.Instance.CheckHasWafer(chamber, slot))
{
EV.PostInfoLog("System", string.Format("{0} slot {1} already has wafer.create wafer is not valid", chamber, slot));
@ -1266,6 +1270,11 @@ namespace SicRT.Equipments.Systems
}
else
{
if (WaferManager.Instance.CheckHasWafer(chamber, slot))
{
WaferManager.Instance.DeleteWafer(chamber, slot);
EV.PostMessage(ModuleName.System.ToString(), EventEnum.WaferDelete, chamber.ToString(), slot);
}
WaferManager.Instance.DeleteTray(chamber, slot);
//EV.PostMessage(ModuleName.System.ToString(), EventEnum.WaferDelete, chamber.ToString(), slot);
}