Update from Svn。

This commit is contained in:
DESKTOP-GPE37UV\THINKAPD 2023-02-11 10:52:08 +08:00
parent b268f20a0e
commit 094210f65b
58 changed files with 1610 additions and 1677 deletions

View File

@ -34,6 +34,14 @@ namespace Aitex.Core.RT.Device.Devices
}
}
public double Resistance
{
get
{
return OutputArmsFeedBack == 0 ? 0 : ((int)(OutputVoltageFeedBack / OutputArmsFeedBack * 1000)) / 1000.0;
}
}
public float OutputPowerFeedBack
{
get
@ -102,8 +110,6 @@ namespace Aitex.Core.RT.Device.Devices
}
}
private bool _isFloatAioType = false;
private AIAccessor _aiOutputVoltage = null;
private AIAccessor _aiOutputArms = null;
@ -135,13 +141,14 @@ namespace Aitex.Core.RT.Device.Devices
private R_TRIG _trigVoltage = new R_TRIG();
private R_TRIG _trigCurrent = new R_TRIG();
private R_TRIG _trigResistance = new R_TRIG();
private DeviceTimer _timer = new DeviceTimer();
private SCConfigItem _AETempEnable;
public Func<bool, bool> FuncCheckInterLock;
private DeviceTimer _timerResistance = new DeviceTimer();
public Func<bool, bool> FuncCheckInterLock;
public IoPSU(string module, XmlElement node, string ioModule = "")
{
@ -181,6 +188,7 @@ namespace Aitex.Core.RT.Device.Devices
DATA.Subscribe($"{Module}.{Name}.OutputVoltageFeedBack", () => OutputVoltageFeedBack);
DATA.Subscribe($"{Module}.{Name}.OutputArmsFeedBack", () => OutputArmsFeedBack);
DATA.Subscribe($"{Module}.{Name}.OutputPowerFeedBack", () => OutputPowerFeedBack);
DATA.Subscribe($"{Module}.{Name}.Resistance", () => Resistance);
DATA.Subscribe($"{Module}.{Name}.StatusFeedBack", () => StatusFeedBack);
DATA.Subscribe($"{Module}.{Name}.SimVoltageFeedBack", () => SimVoltageFeedBack);
DATA.Subscribe($"{Module}.{Name}.SimArmsFeedBack", () => SimArmsFeedBack);
@ -330,44 +338,24 @@ namespace Aitex.Core.RT.Device.Devices
private void MonitorAlarm()
{
object temp2 = DATA.Poll($"{Module}.Status");
if (temp2 == null) return;
if (temp2.ToString() == "ProcessIdle" || temp2.ToString() == "Process")
//检查电阻值是否在合理范围
double dbResistorMax = SC.GetValue<double>($"PM.{Module}.Heater.{Name}ResistanceMax");
if (Resistance > dbResistorMax && _timerResistance.IsIdle())
{
//_alarmTrig.CLK = _diAlarm != null && _diAlarm.Value && !String.IsNullOrEmpty(_infoText);
//if (_alarmTrig.Q)
//{
// EV.PostAlarmLog(Module, _infoText);
//}
//_commAlarmTrig.CLK = _diCommunicationError != null && _diCommunicationError.Value && !String.IsNullOrEmpty(_commInfoText);
//if (_commAlarmTrig.Q)
//{
// EV.PostWarningLog(Module, _commInfoText);
//}
#region
double dbVoltageHL = SC.ContainsItem("PM." + Module + ".Heater.PSUVoltageHighLimit") ? SC.GetValue<double>("PM." + Module + ".Heater.PSUVoltageHighLimit") : 2000;
double dbVoltageLL = SC.ContainsItem("PM." + Module + ".Heater.PSUVoltageLowLimit") ? SC.GetValue<double>("PM." + Module + ".Heater.PSUVoltageLowLimit") : 0;
double dbCurrentHL = SC.ContainsItem("PM." + Module + ".Heater.PSUCurrentHighLimit") ? SC.GetValue<double>("PM." + Module + ".Heater.PSUCurrentHighLimit") : 2000;
double dbCurrentLL = SC.ContainsItem("PM." + Module + ".Heater.PSUCurrentLowLimit") ? SC.GetValue<double>("PM." + Module + ".Heater.PSUCurrentLowLimit") : 0;
_trigVoltage.CLK = (this.OutputVoltageFeedBack > dbVoltageHL || this.OutputVoltageFeedBack < dbVoltageLL);
if (_trigVoltage.Q)
{
EV.PostAlarmLog(Module, "PSU Voltage is out of gauge. It should be in range " + dbVoltageLL.ToString() + " - " + dbVoltageHL.ToString() + " V.");
//LOG.Write("PSU Voltage is out of gauge. It should be in range " + dbVoltageLL.ToString() + " - " + dbVoltageHL.ToString() + " V.");
}
_trigCurrent.CLK = (this.OutputArmsFeedBack > dbCurrentHL || this.OutputArmsFeedBack < dbCurrentLL);
if (_trigCurrent.Q)
{
EV.PostAlarmLog(Module, "PSU Current is out of gauge. It should be in range " + dbCurrentLL.ToString() + " - " + dbCurrentHL.ToString() + " A.");
//LOG.Write("PSU Current is out of gauge. It should be in range " + dbCurrentLL.ToString() + " - " + dbCurrentHL.ToString() + " A.");
}
#endregion
_timerResistance.Start(3000);
}
if (Resistance <= dbResistorMax)
{
_timerResistance.Stop();
}
_trigResistance.CLK = _timerResistance.IsTimeout();
if (_trigResistance.Q)
{
EV.PostAlarmLog(Module, $"{Name} Resistance is out of range.Current Resistance is {Resistance}");
}
}
private bool isActiveRecord = false;
@ -375,7 +363,6 @@ namespace Aitex.Core.RT.Device.Devices
{
if (base.Name == "PSU2")
{
//_enableTrig.CLK = AETemp2 < 650 && !_diHeatEnable.Value;
_enableTrig.CLK = !_diHeatEnable.Value;
if (_enableTrig.Q)
{
@ -385,7 +372,6 @@ namespace Aitex.Core.RT.Device.Devices
}
}
//_enableTrig2.CLK = AETemp2 > 650 || _diHeatEnable.Value;
_enableTrig2.CLK = _diHeatEnable.Value;
if (_enableTrig2.Q)
{
@ -395,34 +381,15 @@ namespace Aitex.Core.RT.Device.Devices
}
}
public double AETemp2
public double AETemp
{
get
{
if (_AETempEnable.BoolValue && base.Name == "PSU2")
{
try
{
object temp2;
if (Module == "PM1")
{
temp2 = DATA.Poll($"AETemp.PM1Middle");
}
else
{
temp2 = DATA.Poll($"AETemp.PM2Middle");
}
object temp = DATA.Poll($"AETemp.{Module}Middle");
return temp2 == null ? 0 : (double)temp2;
}
catch (Exception ex)
{
return 0;
}
}
return 0;
return temp == null ? 0 : (double)temp;
}
}
}
}

View File

@ -13,7 +13,6 @@ namespace Aitex.Core.RT.Device.Devices
{
public class IoSCR : BaseDevice, IDevice
{
public float VoltageFeedBack
{
get
@ -30,6 +29,14 @@ namespace Aitex.Core.RT.Device.Devices
}
}
public double Resistance
{
get
{
return ArmsFeedBack == 0 ? 0 : ((int)(VoltageFeedBack / ArmsFeedBack * 1000)) / 1000.0;
}
}
public float PowerFeedBack
{
get
@ -65,7 +72,10 @@ namespace Aitex.Core.RT.Device.Devices
private R_TRIG _trigVoltage = new R_TRIG();
private R_TRIG _trigCurrent = new R_TRIG();
private R_TRIG _trigResistance = new R_TRIG();
private DeviceTimer _timerResistance = new DeviceTimer();
public IoSCR(string module, XmlElement node, string ioModule = "")
{
var attrModule = node.GetAttribute("module");
@ -93,6 +103,7 @@ namespace Aitex.Core.RT.Device.Devices
{
DATA.Subscribe($"{Module}.{Name}.VoltageFeedBack", () => VoltageFeedBack);
DATA.Subscribe($"{Module}.{Name}.ArmsFeedBack", () => ArmsFeedBack);
DATA.Subscribe($"{Module}.{Name}.Resistance", () => Resistance);
DATA.Subscribe($"{Module}.{Name}.PowerFeedBack", () => PowerFeedBack);
DATA.Subscribe($"{Module}.{Name}.StatusFeedBack", () => StatusFeedBack);
@ -185,34 +196,34 @@ namespace Aitex.Core.RT.Device.Devices
private void MonitorAlarm()
{
//检查电阻值是否在合理范围
double dbResistorMax = SC.GetValue<double>($"PM.{Module}.Heater.{Name}ResistanceMax");
object temp2 = DATA.Poll($"{Module}.Status");
if (temp2 == null) return;
if (temp2.ToString() == "ProcessIdle" || temp2.ToString() == "Process")
if (Resistance > dbResistorMax && _timerResistance.IsIdle())
{
#region
double dbVoltageHL = SC.ContainsItem("PM." + Module + ".Heater.SCRVoltageHighLimit") ? SC.GetValue<double>("PM." + Module + ".Heater.SCRVoltageHighLimit") : 2000;
double dbVoltageLL = SC.ContainsItem("PM." + Module + ".Heater.SCRVoltageLowLimit") ? SC.GetValue<double>("PM." + Module + ".Heater.SCRVoltageLowLimit") : 0;
double dbCurrentHL = SC.ContainsItem("PM." + Module + ".Heater.SCRCurrentHighLimit") ? SC.GetValue<double>("PM." + Module + ".Heater.SCRCurrentHighLimit") : 2000;
double dbCurrentLL = SC.ContainsItem("PM." + Module + ".Heater.SCRCurrentLowLimit") ? SC.GetValue<double>("PM." + Module + ".Heater.SCRCurrentLowLimit") : 0;
_trigVoltage.CLK = (this.VoltageFeedBack > dbVoltageHL || this.VoltageFeedBack < dbVoltageLL);
if (_trigVoltage.Q)
{
EV.PostAlarmLog(Module, "SCR Voltage is out of gauge. It should be in range " + dbVoltageLL.ToString() + " - " + dbVoltageHL.ToString() + " V.");
//LOG.Write("SCR Voltage is out of gauge. It should be in range " + dbVoltageLL.ToString() + " - " + dbVoltageHL.ToString() + " V.");
}
_trigCurrent.CLK = (this.ArmsFeedBack > dbCurrentHL || this.ArmsFeedBack < dbCurrentLL);
if (_trigCurrent.Q)
{
EV.PostAlarmLog(Module, "SCR Current is out of gauge. It should be in range " + dbCurrentLL.ToString() + " - " + dbCurrentHL.ToString() + " A.");
//LOG.Write("SCR Current is out of gauge. It should be in range " + dbCurrentLL.ToString() + " - " + dbCurrentHL.ToString() + " A.");
}
#endregion
_timerResistance.Start(3000);
}
if (Resistance <= dbResistorMax)
{
_timerResistance.Stop();
}
_trigResistance.CLK = _timerResistance.IsTimeout();
if (_trigResistance.Q)
{
EV.PostAlarmLog(Module, $"{Name} Resistance is out of range.Current Resistance is {Resistance}");
}
}
public double AETemp
{
get
{
object temp = DATA.Poll($"AETemp.{Module}Middle");
return temp == null ? 0 : (double)temp;
}
}
}
}

View File

@ -15,6 +15,7 @@ using Aitex.Core.RT.OperationCenter;
using Aitex.Core.RT.SCCore;
using Aitex.Core.Util;
using Hardcodet.Wpf.TaskbarNotification.Interop;
using static Aitex.Core.RT.Device.PmDevices.DicMode;
namespace Aitex.Core.RT.Device.Devices
{
@ -622,6 +623,58 @@ namespace Aitex.Core.RT.Device.Devices
TCPyroModeSetPoint = 1;
break;
case 3:
strHeaterMode = "PyroAuto";
if (L1LoopModeSetPoint == 1)
{
_rampTimerL1.Stop();
//L2TargetSPSetPoint = L1InputTempSetPoint;
}
if (L2LoopModeSetPoint == 1)
{
_rampTimerL2.Stop();
//L2TargetSPSetPoint = L2InputTempSetPoint;
}
if (L3LoopModeSetPoint == 1)
{
_rampTimerL3.Stop();
L3TargetSPSetPoint = L3InputTempSetPoint;
}
L1LoopModeSetPoint = 1;
L2LoopModeSetPoint = 0;
//L3LoopModeSetPoint = 1;
L3LoopModeSetPoint = 0;
TCPyroModeSetPoint = 1;
break;
case 4:
strHeaterMode = "PyroFollow";
if (L1LoopModeSetPoint == 1)
{
_rampTimerL1.Stop();
//L2TargetSPSetPoint = L1InputTempSetPoint;
}
if (L2LoopModeSetPoint == 1)
{
_rampTimerL2.Stop();
//L2TargetSPSetPoint = L2InputTempSetPoint;
}
if (L3LoopModeSetPoint == 1)
{
_rampTimerL3.Stop();
L3TargetSPSetPoint = L3InputTempSetPoint;
}
L1LoopModeSetPoint = 1;
L2LoopModeSetPoint = 0;
//L3LoopModeSetPoint = 1;
L3LoopModeSetPoint = 1;
TCPyroModeSetPoint = 1;
break;
}
//TC1切换模式时,需要把PV的值设置到设定值
@ -911,7 +964,8 @@ namespace Aitex.Core.RT.Device.Devices
{
if (Name == "TC1")
{
if (HeaterModeSetPoint == 1 || HeaterModeSetPoint == 2) //Pyro和TC
//if (HeaterModeSetPoint == 1 || HeaterModeSetPoint == 2)
if (HeaterModeSetPoint == (float)HeaterControlMode.PyroFollow)
{
L2TargetOPSetPoint = L2WorkingOPFeedBack;
float l1 = L2RatioSetPoint > 0 ? (float)(L2WorkingOPFeedBack * L1RatioSetPoint / L2RatioSetPoint) : 0;

View File

@ -24,9 +24,11 @@ namespace Aitex.Core.RT.Device.PmDevices
public enum HeaterControlMode
{
Power,
Power = 0,
Pyro,
Hold
Hold,
PyroAuto,
PyroFollow
}
}
}

View File

@ -750,7 +750,7 @@ namespace MECF.Framework.UI.Client.CenterViews.Editors.Sequence
var bret = wm.ShowDialog(dialog);
if ((bool)bret)
{
param.Value = $"Sic\\{param.PrefixPath}\\" + dialog.DialogResult;
param.Value = dialog.DialogResult;
var path = param.Value;
var index = path.LastIndexOf("\\");

View File

@ -12,6 +12,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Mainframe.Buffers
@ -204,8 +205,8 @@ namespace Mainframe.Buffers
OP.Subscribe($"{Name}.Reset", (string cmd, object[] args) => CheckToPostMessage((int)MSG.Reset));
OP.Subscribe($"{Name}.Abort", (string cmd, object[] args) => CheckToPostMessage((int)MSG.Abort));
OP.Subscribe($"{Module}.SetOnline", (string cmd, object[] args) => CheckToPostMessage((int)MSG.SetOnline));
OP.Subscribe($"{Module}.SetOffline", (string cmd, object[] args) => CheckToPostMessage((int)MSG.SetOffline));
OP.Subscribe($"{Module}.SetOnline", (string cmd, object[] args) => PutOnline());
OP.Subscribe($"{Module}.SetOffline", (string cmd, object[] args) => PutOffline());
OP.Subscribe($"{Name}.Cooling", (string cmd, object[] args) =>{ return CheckToPostMessage((int)MSG.Cooling, args); });
@ -406,16 +407,41 @@ namespace Mainframe.Buffers
return true;
}
private bool PutOnline()
{
IsOnline = true;
//NotifyModuleOfflineCancellation.Cancel();
return true;
}
private bool PutOffline()
{
IsOnline = false;
//NotifyModuleOfflineCancellation?.Dispose();
//NotifyModuleOfflineCancellation = new CancellationTokenSource();
//NotifyModuleOfflineTask(5 * 60 * 1000);//5min
return true;
}
public void InvokeOffline()
{
PostMsg((int)MSG.SetOffline);
PutOffline();
}
public void InvokeOnline()
{
PostMsg((int)MSG.SetOnline);
PutOnline();
}
private CancellationTokenSource NotifyModuleOfflineCancellation = new CancellationTokenSource();
private Task NotifyModuleOfflineTask(int delayTime)
{
var t1 = Task.Run(async () =>
{
await Task.Delay(delayTime, NotifyModuleOfflineCancellation.Token).ContinueWith(x => EV.PostWarningLog(Module, $"{Module} is still in offline"), NotifyModuleOfflineCancellation.Token);
});
return t1;
}
public override int InvokeCooling(bool coolingTypeIsTime, int time)

View File

@ -16,6 +16,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Mainframe.LLs
@ -358,8 +359,8 @@ namespace Mainframe.LLs
return CheckToPostMessage((int)MSG.Abort);
});
OP.Subscribe($"{Module}.SetOnline", (string cmd, object[] args) => CheckToPostMessage((int)MSG.SetOnline));
OP.Subscribe($"{Module}.SetOffline", (string cmd, object[] args) => CheckToPostMessage((int)MSG.SetOffline));
OP.Subscribe($"{Module}.SetOnline", (string cmd, object[] args) => PutOnline());
OP.Subscribe($"{Module}.SetOffline", (string cmd, object[] args) => PutOffline());
}
private void InitData()
@ -785,14 +786,36 @@ namespace Mainframe.LLs
throw new NotImplementedException();
}
private bool PutOnline()
{
IsOnline = true;
return true;
}
private bool PutOffline()
{
IsOnline = false;
return true;
}
public void InvokeOffline()
{
PostMsg((int)MSG.SetOffline);
PutOffline();
}
public void InvokeOnline()
{
PostMsg((int)MSG.SetOnline);
PutOnline();
}
private CancellationTokenSource NotifyModuleOfflineCancellation = new CancellationTokenSource();
private Task NotifyModuleOfflineTask(int delayTime)
{
var t1 = Task.Run(async () =>
{
await Task.Delay(delayTime, NotifyModuleOfflineCancellation.Token).ContinueWith(x => EV.PostWarningLog(Module, $"{Module} is still in offline"), NotifyModuleOfflineCancellation.Token);
});
return t1;
}
public override int InvokeGroupWaferTray()

View File

@ -147,11 +147,6 @@ namespace Mainframe.TMs
_leakSpec = SC.GetValue<double>("TM.LeakCheck.LeakSpec");
_purgeCount = SC.GetValue<int>("TM.LeakCheck.CyclePurgeCount");
if (!_ll.SetFastPumpValve(false, out reason))
{
EV.PostAlarmLog(Module, $"Can not leakCheck,LL fastPump can not close");
return Result.FAIL;
}
if (!_bufferLid.Value)
{
EV.PostAlarmLog(Module, $"Can not leakCheck,Buffer lid is not open");

View File

@ -21,6 +21,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using SicAds = Mainframe.Devices.SicAds;
@ -543,15 +544,8 @@ namespace Mainframe.TMs
return CheckToPostMessage((int)MSG.RobotRetract, args[0], args[1], args[2]);
});
OP.Subscribe($"{Module}.SetOnline", (string cmd, object[] args) =>
{
return CheckToPostMessage((int)MSG.SetOnline);
});
OP.Subscribe($"{Module}.SetOffline", (string cmd, object[] args) =>
{
return CheckToPostMessage((int)MSG.SetOffline);
});
OP.Subscribe($"{Module}.SetOnline", (string cmd, object[] args) => PutOnline());
OP.Subscribe($"{Module}.SetOffline", (string cmd, object[] args) => PutOffline());
}
private void InitData()
@ -1064,14 +1058,40 @@ namespace Mainframe.TMs
}
}
private bool PutOnline()
{
IsOnline = true;
//NotifyModuleOfflineCancellation.Cancel();
return true;
}
private bool PutOffline()
{
IsOnline = false;
//NotifyModuleOfflineCancellation?.Dispose();
//NotifyModuleOfflineCancellation = new CancellationTokenSource();
//NotifyModuleOfflineTask(5 * 60 * 1000);//5min
return true;
}
public void InvokeOffline()
{
PostMsg((int)MSG.SetOffline);
PutOffline();
}
public void InvokeOnline()
{
PostMsg((int)MSG.SetOnline);
PutOnline();
}
private CancellationTokenSource NotifyModuleOfflineCancellation = new CancellationTokenSource();
private Task NotifyModuleOfflineTask(int delayTime)
{
var t1 = Task.Run(async () =>
{
await Task.Delay(delayTime, NotifyModuleOfflineCancellation.Token).ContinueWith(x => EV.PostWarningLog(Module, $"{Module} is still in offline"), NotifyModuleOfflineCancellation.Token);
});
return t1;
}
public int InvokeError()

View File

@ -129,11 +129,6 @@ namespace Mainframe.TMs
}
}
if (!_ll.SetFastPumpValve(false, out reason))
{
EV.PostAlarmLog(Module, $"Can not pump,LL fastPump can not close");
return Result.FAIL;
}
if (!_bufferLid.Value)
{
EV.PostAlarmLog(Module, $"Can not pump,Buffer lid is not closed");

View File

@ -123,11 +123,6 @@ namespace Mainframe.TMs
}
}
if (!_ll.SetFastPumpValve(false, out string reason))
{
EV.PostAlarmLog(Module, $"Can not Purge,LL fastPump can not close");
return Result.FAIL;
}
if (!_bufferLid.Value)
{
EV.PostAlarmLog(Module, $"Can not Purge,Buffer lid is not open");
@ -148,7 +143,7 @@ namespace Mainframe.TMs
EV.PostAlarmLog(Module, $"can not Purge,TM pump is not running");
return Result.FAIL;
}
if (!_tmIoInterLock.SetTMPurgeRoutineRunning(true, out reason))
if (!_tmIoInterLock.SetTMPurgeRoutineRunning(true, out string reason))
{
EV.PostAlarmLog(Module, $"can not Purge,{reason}");
return Result.FAIL;

View File

@ -67,22 +67,12 @@ namespace Mainframe.TMs
{
try
{
//RobotSetCommunication((int)RoutineStep.SetCommunication, RobotDevice, _homeTimeout);
//RobotSetLoad((int)RoutineStep.SetLoadArm1, RobotDevice, RobotArmEnum.Blade1, _isPriArmWaferPresent, _homeTimeout);
//RobotSetLoad((int)RoutineStep.SetLoadArm2, RobotDevice, RobotArmEnum.Blade2, _isSecArmWaferPresent, _homeTimeout);
RobotHome((int)RoutineStep.Home, RobotDevice, _homeTimeout);
RobotCheckLoad((int)RoutineStep.CheckLoad1, RobotDevice, RobotArmEnum.Blade1, _homeTimeout);
//RobotCheckLoad((int)RoutineStep.CheckLoad2, RobotDevice, RobotArmEnum.Blade2, _homeTimeout);
RobotRequestWaferPresent((int)RoutineStep.RequestWaferPresent1, RobotDevice, RobotArmEnum.Blade1, _homeTimeout);
//RobotRequestWaferPresent((int)RoutineStep.RequestWaferPresent2, RobotDevice, RobotArmEnum.Blade2, _homeTimeout);
UpdateWaferInfoByRobotSensor((int)RoutineStep.UpdateWaferInfoByRobotSensor, RobotDevice);
}
catch (RoutineBreakException)

View File

@ -147,11 +147,7 @@ namespace Mainframe.TMs
_ventBasePressure = SC.GetValue<double>("TM.Vent.VentBasePressure");
_ventDelayTime = SC.GetValue<int>("TM.Vent.VentDelayTime");
}
if (!_ll.SetFastPumpValve(false, out reason))
{
EV.PostAlarmLog(Module, $"Can not vent,LL fastPump can not close");
return Result.FAIL;
}
if (!_bufferLid.Value)
{
EV.PostAlarmLog(Module, $"Can not vent,Buffer lid is not open");

View File

@ -193,7 +193,7 @@
<IoSensor id="SensorUPS1LowBattery" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_UPS1LowBattery" infoText="" warningText="" alarmText="Alarm43 UPS1.LowBattery [DI-84]" />
<IoSensor id="SensorUPS2LowBattery" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_UPS2LowBattery" infoText="" warningText="" alarmText="Alarm44 UPS2.LowBattery [DI-85]" />
<IoSensor id="SensorGBWaterLeakSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_GBWaterLeakSW" infoText="" warningText="Warning7 Gas Box Water Leak [DI-60]" alarmText="" />
<IoSensor id="SensorDryPump1Warning" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPump1Warning" infoText="" warningText="Warning10 PM1DryPump1 Warning [DI-67]" alarmText="" />
<IoSensor id="SensorDryPump1Warning" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPump1Warning" infoText="" warningText="Warning10 DryPump1 Warning [DI-67]" alarmText="" />
<IoSensor id="SensorEMOStatusSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_EMOStatusSW" infoText="" warningText="" alarmText="Alarm37 EMOStatus [DI-70]" />
<IoSensor id="SensorPRWaterLeakSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PowerRackWaterLeakSW" infoText="" warningText="Warning11 Power Rack Water Leak [DI-77]" alarmText="" />
<IoSensor id="SensorSHLidClosed" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_SHLidClosed" infoText="" warningText="Warning13 SH Lid Opened [DI-106]" alarmText="" />
@ -243,7 +243,7 @@
<IoSensor id="SensorGBHCLDetectorSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_GBHCLDetectorSW" infoText="" warningText="" alarmText="Alarm20 Gasbox HCL Leak Detect [DI-31]" />
<IoSensor id="SensorGBExhaustDPSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_GBExhaustDPSW" infoText="" warningText="" alarmText="Alarm21 Gasbox Exhaust DP Error [DI-32]" />
<IoSensor id="SensorGasPipeTempCtrlAlarm" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_GasPipeTempCtrlAlarm" infoText="" warningText="Warning4 GasPipeTempCtrl.Alarm [DI-35]" alarmText="" />
<IoSensor id="SensorDryPumpAlarm" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPumpAlarm" infoText="" warningText="" alarmText="Alarm22 PM1DryPump.Alarm [DI-36]" />
<IoSensor id="SensorDryPumpAlarm" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPumpAlarm" infoText="" warningText="" alarmText="Alarm22 DryPump.Alarm [DI-36]" />
<IoSensor id="SensorPumpExhaustPressSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PumpExhaustPressSW" infoText="" warningText="" alarmText="Alarm23 Pump Exhaust Pressure Abnormal [DI-38]" />
<IoSensor id="SensorPMAExhaustDPSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PMAExhaustDPSW" infoText="" warningText="" alarmText="Alarm24 PM Exhaust DP Error [DI-39]" />
<IoSensor id="SensorPumpExhaustDPSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PumpExhaustDPSW" infoText="" warningText="" alarmText="Alarm25 Pump Exhaust DP Error [DI-40]" />
@ -254,7 +254,7 @@
<IoSensor id="SensorArInletPressSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_ArInletPressSW" infoText="" warningText="" alarmText="Alarm33 Gasbox Ar Pressure Low [DI-56]" />
<IoSensor id="SensorH2PressureSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_H2PressureSW" infoText="" warningText="" alarmText="Alarm34 Gasbox H2 Pressure Low [DI-57]" />
<IoSensor id="SensorGBH2DetectorSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_GBH2DetectorSW" infoText="" warningText="" alarmText="Alarm35 Gasbox H2 Leak Detect [DI-59]" />
<IoSensor id="SensorDryPump1Running" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPump1Running" infoText="" warningText="" alarmText="Alarm36 PM1DryPump1 Not Running [DI-65]" />
<IoSensor id="SensorDryPump1Running" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPump1Running" infoText="" warningText="" alarmText="Alarm36 DryPump1 Not Running [DI-65]" />
<IoSensor id="SensorFacilityWarningSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_FacilityWarningSW" infoText="" warningText="" alarmText="Alarm38 Facility Equipment Alarm [DI-72]" />
<IoSensor id="SensorMainCBStatusSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_MainCBStatusSW" infoText="" warningText="" alarmText="Alarm39 Main CB Status Off [DI-76]" />
<IoSensor id="SensorProcessStopSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_ProcessStopSW" infoText="" warningText="" alarmText="Alarm42 Process Stop [DI-81]" />

View File

@ -37,8 +37,9 @@
<Catalog DisplayName="StepInfo">
<Group DisplayName="Temperature -> Control Mode">
<Step ModuleName="" DeviceType="" InputType="ReadOnlySelection" DisplayName="8. PSU Control Mode" UnitName="" ControlName="TC1.SetHeaterMode" Description="">
<Item DisplayName="PyroAuto" ControlName="PyroAuto" />
<Item DisplayName="PyroFollow" ControlName="PyroFollow" />
<Item DisplayName="Power" ControlName="Power" />
<Item DisplayName="Pyro" ControlName="Pyro" />
</Step>
<Step ModuleName="" DeviceType="" InputType="ReadOnlySelection" DisplayName="9. PSU Set Mode" UnitName="" ControlName="SusHeaterSetMode" Description="">
<Item DisplayName="Ramp" ControlName="Ramp" />

View File

@ -58,6 +58,7 @@
<DI_ITEM Index="65" Name="DI_DryPump1Running" BufferOffset="65" Addr="65" Description="" />
<DI_ITEM Index="67" Name="DI_DryPump1Warning" BufferOffset="67" Addr="67" Description="" />
<DI_ITEM Index="70" Name="DI_EMOStatusSW" BufferOffset="70" Addr="70" Description="" />
<DI_ITEM Index="71" Name="DI_PumpCabDoorClosed" BufferOffset="71" Addr="71" Description="" />
<DI_ITEM Index="72" Name="DI_FacilityWarningSW" BufferOffset="72" Addr="72" Description="" />
<DI_ITEM Index="76" Name="DI_MainCBStatusSW" BufferOffset="76" Addr="76" Description="" />
<DI_ITEM Index="77" Name="DI_PowerRackWaterLeakSW" BufferOffset="77" Addr="77" Description="" />
@ -164,11 +165,11 @@
<DI_ITEM Index="265" Name="DI_TowerRedFB" BufferOffset="265" Addr="265" Description="" Visible ="false"/>
<DI_ITEM Index="266" Name="DI_BuzzerFB" BufferOffset="266" Addr="266" Description="" Visible ="false"/>
<DI_ITEM Index="271" Name="DI_ConfinementRingDrvRstFB" BufferOffset="271" Addr="271" Description="" Visible ="false"/>
<DI_ITEM Index="272" Name="DI_InnerGasFinalFB(V89)" BufferOffset="272" Addr="272" Description="" Visible ="false"/>
<DI_ITEM Index="273" Name="DI_MiddleGasFinalFB(V90)" BufferOffset="273" Addr="273" Description="" Visible ="false"/>
<DI_ITEM Index="274" Name="DI_OpticPurgeFinalFB(V91)" BufferOffset="274" Addr="274" Description="" Visible ="false"/>
<DI_ITEM Index="275" Name="DI_GasRingPurgeFinalFB(V92)" BufferOffset="275" Addr="275" Description="" Visible ="false"/>
<DI_ITEM Index="276" Name="DI_ChamberPurgeFinalFB(V93)" BufferOffset="276" Addr="276" Description="" Visible ="false"/>
<DI_ITEM Index="272" Name="DI_InnerGasFinalFB(V89)" BufferOffset="272" Addr="272" Description="" Visible ="true"/>
<DI_ITEM Index="273" Name="DI_MiddleGasFinalFB(V90)" BufferOffset="273" Addr="273" Description="" Visible ="true"/>
<DI_ITEM Index="274" Name="DI_OpticPurgeFinalFB(V91)" BufferOffset="274" Addr="274" Description="" Visible ="true"/>
<DI_ITEM Index="275" Name="DI_GasRingPurgeFinalFB(V92)" BufferOffset="275" Addr="275" Description="" Visible ="true"/>
<DI_ITEM Index="276" Name="DI_ChamberPurgeFinalFB(V93)" BufferOffset="276" Addr="276" Description="" Visible ="true"/>
<DI_ITEM Index="277" Name="DI_RotationUpPurgeFinalFB(V94)" BufferOffset="277" Addr="277" Description="" Visible ="false"/>
<DI_ITEM Index="278" Name="DI_ConfinementRingFinalFB(V95)" BufferOffset="278" Addr="278" Description="" Visible ="false"/>
<DI_ITEM Index="279" Name="DI_HeaterWFFinalFB(V96)" BufferOffset="279" Addr="279" Description="" Visible ="false"/>

View File

@ -1139,6 +1139,7 @@
<Limit do="PM1.DO_TMPump1FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-205"/>
<Limit do="PM1.DO_TransformerFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-206"/>
</Action>
<Action do="PM1.DO_InnerHeaterEnable" value="true" tip="" tip.zh-CN="" tip.en-US="DO-57">
<Limit di="PM1.DI_ChamLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-0"/>
<Limit di="PM1.DI_ChamPressAboveATMSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-4"/>
@ -2320,4 +2321,177 @@
<Limit di="PM1.DI_UPS1LowBattery" value="false" tip="" tip.zh-CN="" tip.en-US="DI-84"/>
<Limit di="PM1.DI_UPS2LowBattery" value="false" tip="" tip.zh-CN="" tip.en-US="DI-85"/>
</Action>
<Action do="PM1.DO_SCR1Enable" value="true" tip="DO_SCR1Enable" tip.zh-CN="" tip.en-US="DO-134">
<Limit di="PM1.DI_ChamLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-0" />
<Limit di="PM1.DI_ChamMiddleFlow2SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-8" />
<Limit di="PM1.DI_ChamPressAboveATMSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-9" />
<Limit di="PM1.DI_HeaterTempUpLimitSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-10" />
<Limit di="PM1.DI_SHFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-15" />
<Limit di="PM1.DI_ChamTopFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-16" />
<Limit di="PM1.DI_ChamMiddleFlow1SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-17" />
<Limit di="PM1.DI_ChamBottomFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-18" />
<Limit di="PM1.DI_PowerRod1FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-20" />
<Limit di="PM1.DI_PowerRod2FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-21" />
<Limit di="PM1.DI_ForelineFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-22" />
<Limit di="PM1.DI_ElectrodeWFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-23" />
<Limit di="PM1.DI_TransformerFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-25" />
<Limit di="PM1.DI_InletTotalFlowLowSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-27" />
<Limit di="PM1.DI_PMH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-30" />
<Limit di="PM1.DI_GBHCLDetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-31" />
<Limit di="PM1.DI_GBExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-32" />
<Limit di="PM1.DI_DryPumpAlarm" value="true" tip="" tip.zh-CN="" tip.en-US="DI-36" />
<Limit di="PM1.DI_PumpExhaustPressSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-38" />
<Limit di="PM1.DI_PMAExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-39" />
<Limit di="PM1.DI_PumpExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-40" />
<Limit di="PM1.DI_ScrubberIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-41" />
<Limit di="PM1.DI_FacilityIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-42" />
<Limit di="PM1.DI_ServoDriverFaultSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-45" />
<Limit di="PM1.DI_GN2InletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-55" />
<Limit di="PM1.DI_ArInletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-56" />
<Limit di="PM1.DI_H2PressureSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-57" />
<Limit di="PM1.DI_GBH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-59" />
<Limit di="PM1.DI_DryPump1Running" value="true" tip="" tip.zh-CN="" tip.en-US="DI-65" />
<Limit di="PM1.DI_FacilityWarningSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-72" />
<Limit di="PM1.DI_ProcessStopSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-81" />
<Limit di="PM1.DI_PSU1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-320" />
<Limit di="PM1.DI_PSU2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-321" />
<Limit di="PM1.DI_PSU3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-322" />
<Limit di="PM1.DI_SCR1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-323" />
<Limit di="PM1.DI_SCR2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-324" />
<Limit di="PM1.DI_SCR3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-325"/>
<Limit do="PM1.DO_ReactorPressRisingRateFast" value="true" tip="" tip.zh-CN="" tip.en-US="DO-192" />
<Limit di="PM1.DI_UPS1Enable" value="false" tip="" tip.zh-CN="" tip.en-US="DI-78" />
<Limit di="PM1.DI_UPS1LowBattery" value="false" tip="" tip.zh-CN="" tip.en-US="DI-84" />
<Limit do="PM1.DO_ChamMiddleFlow2Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-195" />
<Limit do="PM1.DO_SHFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-196" />
<Limit do="PM1.DO_ChamTopFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-197" />
<Limit do="PM1.DO_ChamMiddleFlow1Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-198" />
<Limit do="PM1.DO_ChamBottomFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-199" />
<Limit do="PM1.DO_SpareFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-200" />
<Limit do="PM1.DO_PowerRod1FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-201" />
<Limit do="PM1.DO_PowerRod2FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-202" />
<Limit do="PM1.DO_ForelineFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-203" />
<Limit do="PM1.DO_ElectrodeWFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-204" />
<Limit do="PM1.DO_TransformerFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-206" />
<Limit do="PM1.DO_PyroCommunicationError" value="false" tip="" tip.zh-CN="" tip.en-US="DO-220" />
<Limit do="PM1.DO_TC1PyroWarmMaxDiff" value="false" tip="" tip.zh-CN="" tip.en-US="DO-230" />
<Limit do="PM1.DO_TC1AETempRasisingFast" value="false" tip="" tip.zh-CN="" tip.en-US="DO-231" />
</Action>
<Action do="PM1.DO_SCR2Enable" value="true" tip="DO_SCR2Enable" tip.zh-CN="" tip.en-US="DO-135">
<Limit di="PM1.DI_ChamLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-0" />
<Limit di="PM1.DI_ChamMiddleFlow2SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-8" />
<Limit di="PM1.DI_ChamPressAboveATMSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-9" />
<Limit di="PM1.DI_HeaterTempUpLimitSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-10" />
<Limit di="PM1.DI_SHFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-15" />
<Limit di="PM1.DI_ChamTopFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-16" />
<Limit di="PM1.DI_ChamMiddleFlow1SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-17" />
<Limit di="PM1.DI_ChamBottomFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-18" />
<Limit di="PM1.DI_PowerRod1FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-20" />
<Limit di="PM1.DI_PowerRod2FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-21" />
<Limit di="PM1.DI_ForelineFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-22" />
<Limit di="PM1.DI_ElectrodeWFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-23" />
<Limit di="PM1.DI_TransformerFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-25" />
<Limit di="PM1.DI_InletTotalFlowLowSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-27" />
<Limit di="PM1.DI_PMH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-30" />
<Limit di="PM1.DI_GBHCLDetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-31" />
<Limit di="PM1.DI_GBExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-32" />
<Limit di="PM1.DI_DryPumpAlarm" value="true" tip="" tip.zh-CN="" tip.en-US="DI-36" />
<Limit di="PM1.DI_PumpExhaustPressSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-38" />
<Limit di="PM1.DI_PMAExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-39" />
<Limit di="PM1.DI_PumpExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-40" />
<Limit di="PM1.DI_ScrubberIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-41" />
<Limit di="PM1.DI_FacilityIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-42" />
<Limit di="PM1.DI_ServoDriverFaultSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-45" />
<Limit di="PM1.DI_GN2InletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-55" />
<Limit di="PM1.DI_ArInletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-56" />
<Limit di="PM1.DI_H2PressureSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-57" />
<Limit di="PM1.DI_GBH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-59" />
<Limit di="PM1.DI_DryPump1Running" value="true" tip="" tip.zh-CN="" tip.en-US="DI-65" />
<Limit di="PM1.DI_FacilityWarningSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-72" />
<Limit di="PM1.DI_ProcessStopSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-81" />
<Limit di="PM1.DI_PSU1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-320" />
<Limit di="PM1.DI_PSU2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-321" />
<Limit di="PM1.DI_PSU3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-322" />
<Limit di="PM1.DI_SCR1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-323" />
<Limit di="PM1.DI_SCR2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-324" />
<Limit di="PM1.DI_SCR3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-325"/>
<Limit do="PM1.DO_ReactorPressRisingRateFast" value="true" tip="" tip.zh-CN="" tip.en-US="DO-192" />
<Limit di="PM1.DI_UPS1Enable" value="false" tip="" tip.zh-CN="" tip.en-US="DI-78" />
<Limit di="PM1.DI_UPS1LowBattery" value="false" tip="" tip.zh-CN="" tip.en-US="DI-84" />
<Limit do="PM1.DO_ChamMiddleFlow2Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-195" />
<Limit do="PM1.DO_SHFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-196" />
<Limit do="PM1.DO_ChamTopFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-197" />
<Limit do="PM1.DO_ChamMiddleFlow1Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-198" />
<Limit do="PM1.DO_ChamBottomFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-199" />
<Limit do="PM1.DO_SpareFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-200" />
<Limit do="PM1.DO_PowerRod1FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-201" />
<Limit do="PM1.DO_PowerRod2FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-202" />
<Limit do="PM1.DO_ForelineFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-203" />
<Limit do="PM1.DO_ElectrodeWFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-204" />
<Limit do="PM1.DO_TransformerFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-206" />
<Limit do="PM1.DO_PyroCommunicationError" value="false" tip="" tip.zh-CN="" tip.en-US="DO-220" />
<Limit do="PM1.DO_TC1PyroWarmMaxDiff" value="false" tip="" tip.zh-CN="" tip.en-US="DO-230" />
<Limit do="PM1.DO_TC1AETempRasisingFast" value="false" tip="" tip.zh-CN="" tip.en-US="DO-231" />
</Action>
<Action do="PM1.DO_SCR3Enable" value="true" tip="DO_SCR3Enable" tip.zh-CN="" tip.en-US="DO-136">
<Limit di="PM1.DI_ChamLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-0" />
<Limit di="PM1.DI_ChamMiddleFlow2SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-8" />
<Limit di="PM1.DI_ChamPressAboveATMSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-9" />
<Limit di="PM1.DI_HeaterTempUpLimitSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-10" />
<Limit di="PM1.DI_SHFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-15" />
<Limit di="PM1.DI_ChamTopFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-16" />
<Limit di="PM1.DI_ChamMiddleFlow1SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-17" />
<Limit di="PM1.DI_ChamBottomFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-18" />
<Limit di="PM1.DI_PowerRod1FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-20" />
<Limit di="PM1.DI_PowerRod2FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-21" />
<Limit di="PM1.DI_ForelineFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-22" />
<Limit di="PM1.DI_ElectrodeWFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-23" />
<Limit di="PM1.DI_TransformerFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-25" />
<Limit di="PM1.DI_InletTotalFlowLowSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-27" />
<Limit di="PM1.DI_PMH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-30" />
<Limit di="PM1.DI_GBHCLDetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-31" />
<Limit di="PM1.DI_GBExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-32" />
<Limit di="PM1.DI_DryPumpAlarm" value="true" tip="" tip.zh-CN="" tip.en-US="DI-36" />
<Limit di="PM1.DI_PumpExhaustPressSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-38" />
<Limit di="PM1.DI_PMAExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-39" />
<Limit di="PM1.DI_PumpExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-40" />
<Limit di="PM1.DI_ScrubberIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-41" />
<Limit di="PM1.DI_FacilityIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-42" />
<Limit di="PM1.DI_ServoDriverFaultSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-45" />
<Limit di="PM1.DI_GN2InletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-55" />
<Limit di="PM1.DI_ArInletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-56" />
<Limit di="PM1.DI_H2PressureSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-57" />
<Limit di="PM1.DI_GBH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-59" />
<Limit di="PM1.DI_DryPump1Running" value="true" tip="" tip.zh-CN="" tip.en-US="DI-65" />
<Limit di="PM1.DI_FacilityWarningSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-72" />
<Limit di="PM1.DI_ProcessStopSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-81" />
<Limit di="PM1.DI_PSU1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-320" />
<Limit di="PM1.DI_PSU2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-321" />
<Limit di="PM1.DI_PSU3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-322" />
<Limit di="PM1.DI_SCR1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-323" />
<Limit di="PM1.DI_SCR2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-324" />
<Limit di="PM1.DI_SCR3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-325"/>
<Limit do="PM1.DO_ReactorPressRisingRateFast" value="true" tip="" tip.zh-CN="" tip.en-US="DO-192" />
<Limit di="PM1.DI_UPS1Enable" value="false" tip="" tip.zh-CN="" tip.en-US="DI-78" />
<Limit di="PM1.DI_UPS1LowBattery" value="false" tip="" tip.zh-CN="" tip.en-US="DI-84" />
<Limit do="PM1.DO_ChamMiddleFlow2Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-195" />
<Limit do="PM1.DO_SHFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-196" />
<Limit do="PM1.DO_ChamTopFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-197" />
<Limit do="PM1.DO_ChamMiddleFlow1Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-198" />
<Limit do="PM1.DO_ChamBottomFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-199" />
<Limit do="PM1.DO_SpareFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-200" />
<Limit do="PM1.DO_PowerRod1FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-201" />
<Limit do="PM1.DO_PowerRod2FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-202" />
<Limit do="PM1.DO_ForelineFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-203" />
<Limit do="PM1.DO_ElectrodeWFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-204" />
<Limit do="PM1.DO_TransformerFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-206" />
<Limit do="PM1.DO_PyroCommunicationError" value="false" tip="" tip.zh-CN="" tip.en-US="DO-220" />
<Limit do="PM1.DO_TC1PyroWarmMaxDiff" value="false" tip="" tip.zh-CN="" tip.en-US="DO-230" />
<Limit do="PM1.DO_TC1AETempRasisingFast" value="false" tip="" tip.zh-CN="" tip.en-US="DO-231" />
</Action>
</Interlock>

View File

@ -541,6 +541,12 @@ namespace SicPM1
private bool PutOnline()
{
if(IsService)
{
EV.PostWarningLog(Module, $"{Module} is Service State,do not Online");
return false;
}
IsOnline = true;
NotifyModuleOfflineCancellation.Cancel();
return true;
@ -1554,13 +1560,11 @@ namespace SicPM1
public void InvokeOffline()
{
PutOffline();
//PostMsg((int)MSG.SetOffline);
}
public void InvokeOnline()
{
PutOnline();
//PostMsg((int)MSG.SetOnline);
}
private CancellationTokenSource NotifyModuleOfflineCancellation = new CancellationTokenSource();

View File

@ -58,6 +58,7 @@ namespace SicPM1.RecipeExecutions
SetTC2Ratio,
SetTC2Ratio1,
CloseTC2,
WaitRotation1,
TimeDelay1,
TimeDelay2,
@ -233,7 +234,7 @@ namespace SicPM1.RecipeExecutions
SetSCREnable((int)RoutineStep.CloseTC2, false, 5);
}
WaitRotationValve((int)RoutineStep.SetRotation2, _rotationSpeed, true, _rotationSpeed / 2);
WaitRotationValve((int)RoutineStep.WaitRotation1, _rotationSpeed, true, _rotationSpeed / 2);
}
catch (RoutineBreakException)

View File

@ -376,12 +376,12 @@ namespace SicPM1.RecipeExecutions
if (IsCmdSkip(recipeCmd)) // 不是注册的方法,需要跳过
continue;
if (!OP.CanDoOperation($"{Module}.{recipeCmd}", out reason, PmDevice.RecipeRunningInfo.RecipeStepList[_currentStepNumber].RecipeCommands[recipeCmd]))
{
EV.PostAlarmLog(Module, $"Can not execute {recipeCmd}, {reason}");
return Result.FAIL;
}
else
//if (!OP.CanDoOperation($"{Module}.{recipeCmd}", out reason, PmDevice.RecipeRunningInfo.RecipeStepList[_currentStepNumber].RecipeCommands[recipeCmd]))
//{
// EV.PostAlarmLog(Module, $"Can not execute {recipeCmd}, {reason}");
// return Result.FAIL;
//}
//else
{
int time = (int)(PmDevice.RecipeRunningInfo.RecipeStepList[_currentStepNumber].StepTime * 1000 - _curStepElpasedTimeBeforePaused);// (int)PMDevice.RecipeRunningInfo.RecipeStepList[_currentStepNumber].StepTime * 1000;

View File

@ -1574,7 +1574,7 @@ namespace SicPM1.Routines
},
() =>
{
return Math.Abs(_IoThrottle.PressureSetpoint - pressure) <= 0.1;
return Math.Abs(_IoThrottle.PressureSetpoint - pressure) <= 1;
},
timeout * 1000);

View File

@ -25,7 +25,8 @@ namespace SicPM1.Routines
SetBlockOff,
EnableRotation,
EnableHeater,
SetRotation1,
SetRotation1,
WaitRotation1,
SetTC1Mode,
SetTC1Ratio,
SetTC1Ref,
@ -138,13 +139,16 @@ namespace SicPM1.Routines
{
try
{
EnableRotation((int)RoutineStep.EnableRotation, 5);
SetRotationValveAndNoWait((int)RoutineStep.SetRotation1, _rotationSpeed);
TimeDelay((int)RoutineStep.TimeDelay1, 5);
if (!hasWafer)
{
SetConfinementRingUpAndWait((int)RoutineStep.SetServoUp, 30);
}
EnableRotation((int)RoutineStep.EnableRotation, 5);
SetRotationValveAndNoWait((int)RoutineStep.SetRotation1, _rotationSpeed);
ExecuteRoutine((int)RoutineStep.SetChamberPressure, _pmServoToPressure);
TimeDelay((int)RoutineStep.TimeDelay8, 1);
@ -169,7 +173,7 @@ namespace SicPM1.Routines
SetSCRHeatRatio((int)RoutineStep.SetTC2Ratio, _scrL1Ratio, _scrL2Ratio, _scrL3Ratio);
}
//SetRotationValve((int)RoutineStep.SetRotation1, _rotationSpeed, true, _rotationSpeed/2);
WaitRotationValve((int)RoutineStep.WaitRotation1, _rotationSpeed, true, _rotationSpeed / 2);
}
catch (RoutineBreakException)
{

View File

@ -31,6 +31,10 @@ namespace SicPM1.Routines
SetGroupK,
SetGroupD,
SetGroupG,
VentPumpClose,
SetGroupV25,
TimeDelay1,
}
private int _heatTimeOut = 5;
@ -87,6 +91,9 @@ namespace SicPM1.Routines
//所有PC设定为默认值
SetPcToDefault((int)RoutineStep.SetPC, _lstPcList);
//等待MFC等流量
TimeDelay((int)RoutineStep.TimeDelay1, Math.Max(_mfc2to40RampTime, _mfc1to16RampTime));
//打开V32
SetIoValueByGroup((int)RoutineStep.SetV32, IoGroupName.V32, true, _IoValueOpenCloseTimeout);
@ -105,11 +112,12 @@ namespace SicPM1.Routines
SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout);
SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout);
////打开V65
//SetIoValueByGroup((int)RoutineStep.SetV65, IoGroupName.V65, true, _IoValueOpenCloseTimeout);
//打开V68
SetIoValueByGroup((int)RoutineStep.SetV68, IoGroupName.GasIn1, true, _IoValueOpenCloseTimeout);
//关闭V72,打开V25
SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false, _IoValueOpenCloseTimeout);
SetIoValueByGroup((int)RoutineStep.SetGroupV25, IoGroupName.V25, true, _IoValueOpenCloseTimeout);
}
catch (RoutineBreakException)

View File

@ -100,6 +100,7 @@ namespace SicPM1.Routines
EnableRotation,
EnableHeater,
SetRotation1,
WaitRotation1,
SetTC1Mode,
SetTC1Ratio,
SetTC1RatioTo0,
@ -408,7 +409,7 @@ namespace SicPM1.Routines
SetSCREnable((int)RoutineStep.CloseTC2, false, 5);
}
WaitRotationValve((int)RoutineStep.SetRotation2, _rotationSpeed, true, _rotationSpeed / 2);
WaitRotationValve((int)RoutineStep.WaitRotation1, _rotationSpeed, true, _rotationSpeed / 2);
}
catch (RoutineBreakException)

View File

@ -138,8 +138,8 @@ namespace SicPM1.Routines
_pmPressureMaxDiff = SC.GetValue<double>($"PM.{Module}.ThrottlePressureMaxDiff");
_throttleTimeout = SC.GetValue<int>($"PM.{Module}.ThrottlePressureTimeout");
_vacPumpBasePressure = SC.GetValue<double>($"PM.{Module}.VacIdle.PumpPressure");
_routineTimeOut = SC.GetValue<int>($"PM.{Module}.VacIdle.RoutineTimeOut");
_vacPumpBasePressure = SC.GetValue<double>($"PM.{Module}.Pump.PumpPressure");
_routineTimeOut = SC.GetValue<int>($"PM.{Module}.Pump.RoutineTimeOut");
if (!_pmIoInterLock.SetPMVacIdleRountingRunning(true, out var reason))
{

View File

@ -32,8 +32,9 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="MECF.Framework.Common">
<HintPath>..\..\FrameworkLocal\MECF.Framework.Common.dll</HintPath>
<Reference Include="MECF.Framework.Common, Version=1.0.8361.29945, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\ThirdParty\dlls\MECF.Framework.Common.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />

View File

@ -189,7 +189,7 @@
<IoSensor id="SensorUPS1LowBattery" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_UPS1LowBattery" infoText="" warningText="" alarmText="Alarm43 UPS1.LowBattery [DI-84]" />
<IoSensor id="SensorUPS2LowBattery" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_UPS2LowBattery" infoText="" warningText="" alarmText="Alarm44 UPS2.LowBattery [DI-85]" />
<IoSensor id="SensorGBWaterLeakSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_GBWaterLeakSW" infoText="" warningText="Warning7 Gas Box Water Leak [DI-60]" alarmText="" />
<IoSensor id="SensorDryPump1Warning" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPump1Warning" infoText="" warningText="Warning10 PM1DryPump1 Warning [DI-67]" alarmText="" />
<IoSensor id="SensorDryPump1Warning" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPump1Warning" infoText="" warningText="Warning10 DryPump1 Warning [DI-67]" alarmText="" />
<IoSensor id="SensorEMOStatusSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_EMOStatusSW" infoText="" warningText="" alarmText="Alarm37 EMOStatus [DI-70]" />
<IoSensor id="SensorPRWaterLeakSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PowerRackWaterLeakSW" infoText="" warningText="Warning11 Power Rack Water Leak [DI-77]" alarmText="" />
<IoSensor id="SensorSHLidClosed" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_SHLidClosed" infoText="" warningText="Warning13 SH Lid Opened [DI-106]" alarmText="" />
@ -239,7 +239,7 @@
<IoSensor id="SensorGBHCLDetectorSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_GBHCLDetectorSW" infoText="" warningText="" alarmText="Alarm20 Gasbox HCL Leak Detect [DI-31]" />
<IoSensor id="SensorGBExhaustDPSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_GBExhaustDPSW" infoText="" warningText="" alarmText="Alarm21 Gasbox Exhaust DP Error [DI-32]" />
<IoSensor id="SensorGasPipeTempCtrlAlarm" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_GasPipeTempCtrlAlarm" infoText="" warningText="Warning4 GasPipeTempCtrl.Alarm [DI-35]" alarmText="" />
<IoSensor id="SensorDryPumpAlarm" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPumpAlarm" infoText="" warningText="" alarmText="Alarm22 PM1DryPump.Alarm [DI-36]" />
<IoSensor id="SensorDryPumpAlarm" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPumpAlarm" infoText="" warningText="" alarmText="Alarm22 DryPump.Alarm [DI-36]" />
<IoSensor id="SensorPumpExhaustPressSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PumpExhaustPressSW" infoText="" warningText="" alarmText="Alarm23 Pump Exhaust Pressure Abnormal [DI-38]" />
<IoSensor id="SensorPMAExhaustDPSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PMAExhaustDPSW" infoText="" warningText="" alarmText="Alarm24 PM Exhaust DP Error [DI-39]" />
<IoSensor id="SensorPumpExhaustDPSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PumpExhaustDPSW" infoText="" warningText="" alarmText="Alarm25 Pump Exhaust DP Error [DI-40]" />
@ -250,7 +250,7 @@
<IoSensor id="SensorArInletPressSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_ArInletPressSW" infoText="" warningText="" alarmText="Alarm33 Gasbox Ar Pressure Low [DI-56]" />
<IoSensor id="SensorH2PressureSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_H2PressureSW" infoText="" warningText="" alarmText="Alarm34 Gasbox H2 Pressure Low [DI-57]" />
<IoSensor id="SensorGBH2DetectorSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_GBH2DetectorSW" infoText="" warningText="" alarmText="Alarm35 Gasbox H2 Leak Detect [DI-59]" />
<IoSensor id="SensorDryPump1Running" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPump1Running" infoText="" warningText="" alarmText="Alarm36 PM1DryPump1 Not Running [DI-65]" />
<IoSensor id="SensorDryPump1Running" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_DryPump1Running" infoText="" warningText="" alarmText="Alarm36 DryPump1 Not Running [DI-65]" />
<IoSensor id="SensorFacilityWarningSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_FacilityWarningSW" infoText="" warningText="" alarmText="Alarm38 Facility Equipment Alarm [DI-72]" />
<IoSensor id="SensorMainCBStatusSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_MainCBStatusSW" infoText="" warningText="" alarmText="Alarm39 Main CB Status Off [DI-76]" />
<IoSensor id="SensorProcessStopSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_ProcessStopSW" infoText="" warningText="" alarmText="Alarm42 Process Stop [DI-81]" />

View File

@ -37,8 +37,9 @@
<Catalog DisplayName="StepInfo">
<Group DisplayName="Temperature -> Control Mode">
<Step ModuleName="" DeviceType="" InputType="ReadOnlySelection" DisplayName="8. PSU Control Mode" UnitName="" ControlName="TC1.SetHeaterMode" Description="">
<Item DisplayName="PyroAuto" ControlName="PyroAuto" />
<Item DisplayName="PyroFollow" ControlName="PyroFollow" />
<Item DisplayName="Power" ControlName="Power" />
<Item DisplayName="Pyro" ControlName="Pyro" />
</Step>
<Step ModuleName="" DeviceType="" InputType="ReadOnlySelection" DisplayName="9. PSU Set Mode" UnitName="" ControlName="SusHeaterSetMode" Description="">
<Item DisplayName="Ramp" ControlName="Ramp" />

View File

@ -58,6 +58,7 @@
<DI_ITEM Index="65" Name="DI_DryPump1Running" BufferOffset="65" Addr="65" Description="" />
<DI_ITEM Index="67" Name="DI_DryPump1Warning" BufferOffset="67" Addr="67" Description="" />
<DI_ITEM Index="70" Name="DI_EMOStatusSW" BufferOffset="70" Addr="70" Description="" />
<DI_ITEM Index="71" Name="DI_PumpCabDoorClosed" BufferOffset="71" Addr="71" Description="" />
<DI_ITEM Index="72" Name="DI_FacilityWarningSW" BufferOffset="72" Addr="72" Description="" />
<DI_ITEM Index="76" Name="DI_MainCBStatusSW" BufferOffset="76" Addr="76" Description="" />
<DI_ITEM Index="77" Name="DI_PowerRackWaterLeakSW" BufferOffset="77" Addr="77" Description="" />
@ -164,11 +165,11 @@
<DI_ITEM Index="265" Name="DI_TowerRedFB" BufferOffset="265" Addr="265" Description="" Visible ="false"/>
<DI_ITEM Index="266" Name="DI_BuzzerFB" BufferOffset="266" Addr="266" Description="" Visible ="false"/>
<DI_ITEM Index="271" Name="DI_ConfinementRingDrvRstFB" BufferOffset="271" Addr="271" Description="" Visible ="false"/>
<DI_ITEM Index="272" Name="DI_InnerGasFinalFB(V89)" BufferOffset="272" Addr="272" Description="" Visible ="false"/>
<DI_ITEM Index="273" Name="DI_MiddleGasFinalFB(V90)" BufferOffset="273" Addr="273" Description="" Visible ="false"/>
<DI_ITEM Index="274" Name="DI_OpticPurgeFinalFB(V91)" BufferOffset="274" Addr="274" Description="" Visible ="false"/>
<DI_ITEM Index="275" Name="DI_GasRingPurgeFinalFB(V92)" BufferOffset="275" Addr="275" Description="" Visible ="false"/>
<DI_ITEM Index="276" Name="DI_ChamberPurgeFinalFB(V93)" BufferOffset="276" Addr="276" Description="" Visible ="false"/>
<DI_ITEM Index="272" Name="DI_InnerGasFinalFB(V89)" BufferOffset="272" Addr="272" Description="" Visible ="true"/>
<DI_ITEM Index="273" Name="DI_MiddleGasFinalFB(V90)" BufferOffset="273" Addr="273" Description="" Visible ="true"/>
<DI_ITEM Index="274" Name="DI_OpticPurgeFinalFB(V91)" BufferOffset="274" Addr="274" Description="" Visible ="true"/>
<DI_ITEM Index="275" Name="DI_GasRingPurgeFinalFB(V92)" BufferOffset="275" Addr="275" Description="" Visible ="true"/>
<DI_ITEM Index="276" Name="DI_ChamberPurgeFinalFB(V93)" BufferOffset="276" Addr="276" Description="" Visible ="true"/>
<DI_ITEM Index="277" Name="DI_RotationUpPurgeFinalFB(V94)" BufferOffset="277" Addr="277" Description="" Visible ="false"/>
<DI_ITEM Index="278" Name="DI_ConfinementRingFinalFB(V95)" BufferOffset="278" Addr="278" Description="" Visible ="false"/>
<DI_ITEM Index="279" Name="DI_HeaterWFFinalFB(V96)" BufferOffset="279" Addr="279" Description="" Visible ="false"/>

View File

@ -2376,4 +2376,176 @@
<Limit di="PM2.DI_UPS1LowBattery" value="false" tip="" tip.zh-CN="" tip.en-US="DI-84"/>
<Limit di="PM2.DI_UPS2LowBattery" value="false" tip="" tip.zh-CN="" tip.en-US="DI-85"/>
</Action>
<Action do="PM2.DO_SCR1Enable" value="true" tip="DO_SCR1Enable" tip.zh-CN="" tip.en-US="DO-134">
<Limit di="PM2.DI_ChamLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-0" />
<Limit di="PM2.DI_ChamMiddleFlow2SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-8" />
<Limit di="PM2.DI_ChamPressAboveATMSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-9" />
<Limit di="PM2.DI_HeaterTempUpLimitSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-10" />
<Limit di="PM2.DI_SHFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-15" />
<Limit di="PM2.DI_ChamTopFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-16" />
<Limit di="PM2.DI_ChamMiddleFlow1SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-17" />
<Limit di="PM2.DI_ChamBottomFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-18" />
<Limit di="PM2.DI_PowerRod1FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-20" />
<Limit di="PM2.DI_PowerRod2FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-21" />
<Limit di="PM2.DI_ForelineFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-22" />
<Limit di="PM2.DI_ElectrodeWFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-23" />
<Limit di="PM2.DI_TransformerFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-25" />
<Limit di="PM2.DI_InletTotalFlowLowSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-27" />
<Limit di="PM2.DI_PMH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-30" />
<Limit di="PM2.DI_GBHCLDetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-31" />
<Limit di="PM2.DI_GBExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-32" />
<Limit di="PM2.DI_DryPumpAlarm" value="true" tip="" tip.zh-CN="" tip.en-US="DI-36" />
<Limit di="PM2.DI_PumpExhaustPressSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-38" />
<Limit di="PM2.DI_PMAExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-39" />
<Limit di="PM2.DI_PumpExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-40" />
<Limit di="PM2.DI_ScrubberIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-41" />
<Limit di="PM2.DI_FacilityIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-42" />
<Limit di="PM2.DI_ServoDriverFaultSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-45" />
<Limit di="PM2.DI_GN2InletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-55" />
<Limit di="PM2.DI_ArInletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-56" />
<Limit di="PM2.DI_H2PressureSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-57" />
<Limit di="PM2.DI_GBH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-59" />
<Limit di="PM2.DI_DryPump1Running" value="true" tip="" tip.zh-CN="" tip.en-US="DI-65" />
<Limit di="PM2.DI_FacilityWarningSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-72" />
<Limit di="PM2.DI_ProcessStopSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-81" />
<Limit di="PM2.DI_PSU1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-320" />
<Limit di="PM2.DI_PSU2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-321" />
<Limit di="PM2.DI_PSU3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-322" />
<Limit di="PM2.DI_SCR1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-323" />
<Limit di="PM2.DI_SCR2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-324" />
<Limit di="PM2.DI_SCR3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-325"/>
<Limit do="PM2.DO_ReactorPressRisingRateFast" value="true" tip="" tip.zh-CN="" tip.en-US="DO-192" />
<Limit di="PM2.DI_UPS2Enable" value="false" tip="" tip.zh-CN="" tip.en-US="DI-79" />
<Limit di="PM2.DI_UPS2LowBattery" value="false" tip="" tip.zh-CN="" tip.en-US="DI-85" />
<Limit do="PM2.DO_ChamMiddleFlow2Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-195" />
<Limit do="PM2.DO_SHFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-196" />
<Limit do="PM2.DO_ChamTopFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-197" />
<Limit do="PM2.DO_ChamMiddleFlow1Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-198" />
<Limit do="PM2.DO_ChamBottomFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-199" />
<Limit do="PM2.DO_SpareFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-200" />
<Limit do="PM2.DO_PowerRod1FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-201" />
<Limit do="PM2.DO_PowerRod2FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-202" />
<Limit do="PM2.DO_ForelineFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-203" />
<Limit do="PM2.DO_ElectrodeWFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-204" />
<Limit do="PM2.DO_TransformerFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-206" />
<Limit do="PM2.DO_PyroCommunicationError" value="false" tip="" tip.zh-CN="" tip.en-US="DO-220" />
<Limit do="PM2.DO_TC1PyroWarmMaxDiff" value="false" tip="" tip.zh-CN="" tip.en-US="DO-230" />
<Limit do="PM2.DO_TC1AETempRasisingFast" value="false" tip="" tip.zh-CN="" tip.en-US="DO-231" />
</Action>
<Action do="PM2.DO_SCR2Enable" value="true" tip="DO_SCR2Enable" tip.zh-CN="" tip.en-US="DO-135">
<Limit di="PM2.DI_ChamLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-0" />
<Limit di="PM2.DI_ChamMiddleFlow2SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-8" />
<Limit di="PM2.DI_ChamPressAboveATMSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-9" />
<Limit di="PM2.DI_HeaterTempUpLimitSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-10" />
<Limit di="PM2.DI_SHFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-15" />
<Limit di="PM2.DI_ChamTopFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-16" />
<Limit di="PM2.DI_ChamMiddleFlow1SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-17" />
<Limit di="PM2.DI_ChamBottomFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-18" />
<Limit di="PM2.DI_PowerRod1FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-20" />
<Limit di="PM2.DI_PowerRod2FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-21" />
<Limit di="PM2.DI_ForelineFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-22" />
<Limit di="PM2.DI_ElectrodeWFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-23" />
<Limit di="PM2.DI_TransformerFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-25" />
<Limit di="PM2.DI_InletTotalFlowLowSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-27" />
<Limit di="PM2.DI_PMH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-30" />
<Limit di="PM2.DI_GBHCLDetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-31" />
<Limit di="PM2.DI_GBExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-32" />
<Limit di="PM2.DI_DryPumpAlarm" value="true" tip="" tip.zh-CN="" tip.en-US="DI-36" />
<Limit di="PM2.DI_PumpExhaustPressSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-38" />
<Limit di="PM2.DI_PMAExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-39" />
<Limit di="PM2.DI_PumpExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-40" />
<Limit di="PM2.DI_ScrubberIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-41" />
<Limit di="PM2.DI_FacilityIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-42" />
<Limit di="PM2.DI_ServoDriverFaultSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-45" />
<Limit di="PM2.DI_GN2InletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-55" />
<Limit di="PM2.DI_ArInletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-56" />
<Limit di="PM2.DI_H2PressureSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-57" />
<Limit di="PM2.DI_GBH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-59" />
<Limit di="PM2.DI_DryPump1Running" value="true" tip="" tip.zh-CN="" tip.en-US="DI-65" />
<Limit di="PM2.DI_FacilityWarningSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-72" />
<Limit di="PM2.DI_ProcessStopSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-81" />
<Limit di="PM2.DI_PSU1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-320" />
<Limit di="PM2.DI_PSU2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-321" />
<Limit di="PM2.DI_PSU3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-322" />
<Limit di="PM2.DI_SCR1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-323" />
<Limit di="PM2.DI_SCR2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-324" />
<Limit di="PM2.DI_SCR3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-325"/>
<Limit do="PM2.DO_ReactorPressRisingRateFast" value="true" tip="" tip.zh-CN="" tip.en-US="DO-192" />
<Limit di="PM2.DI_UPS2Enable" value="false" tip="" tip.zh-CN="" tip.en-US="DI-79" />
<Limit di="PM2.DI_UPS2LowBattery" value="false" tip="" tip.zh-CN="" tip.en-US="DI-85" />
<Limit do="PM2.DO_ChamMiddleFlow2Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-195" />
<Limit do="PM2.DO_SHFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-196" />
<Limit do="PM2.DO_ChamTopFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-197" />
<Limit do="PM2.DO_ChamMiddleFlow1Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-198" />
<Limit do="PM2.DO_ChamBottomFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-199" />
<Limit do="PM2.DO_SpareFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-200" />
<Limit do="PM2.DO_PowerRod1FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-201" />
<Limit do="PM2.DO_PowerRod2FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-202" />
<Limit do="PM2.DO_ForelineFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-203" />
<Limit do="PM2.DO_ElectrodeWFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-204" />
<Limit do="PM2.DO_TransformerFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-206" />
<Limit do="PM2.DO_PyroCommunicationError" value="false" tip="" tip.zh-CN="" tip.en-US="DO-220" />
<Limit do="PM2.DO_TC1PyroWarmMaxDiff" value="false" tip="" tip.zh-CN="" tip.en-US="DO-230" />
<Limit do="PM2.DO_TC1AETempRasisingFast" value="false" tip="" tip.zh-CN="" tip.en-US="DO-231" />
</Action>
<Action do="PM2.DO_SCR3Enable" value="true" tip="DO_SCR3Enable" tip.zh-CN="" tip.en-US="DO-136">
<Limit di="PM2.DI_ChamLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-0" />
<Limit di="PM2.DI_ChamMiddleFlow2SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-8" />
<Limit di="PM2.DI_ChamPressAboveATMSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-9" />
<Limit di="PM2.DI_HeaterTempUpLimitSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-10" />
<Limit di="PM2.DI_SHFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-15" />
<Limit di="PM2.DI_ChamTopFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-16" />
<Limit di="PM2.DI_ChamMiddleFlow1SW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-17" />
<Limit di="PM2.DI_ChamBottomFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-18" />
<Limit di="PM2.DI_PowerRod1FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-20" />
<Limit di="PM2.DI_PowerRod2FlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-21" />
<Limit di="PM2.DI_ForelineFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-22" />
<Limit di="PM2.DI_ElectrodeWFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-23" />
<Limit di="PM2.DI_TransformerFlowSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-25" />
<Limit di="PM2.DI_InletTotalFlowLowSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-27" />
<Limit di="PM2.DI_PMH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-30" />
<Limit di="PM2.DI_GBHCLDetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-31" />
<Limit di="PM2.DI_GBExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-32" />
<Limit di="PM2.DI_DryPumpAlarm" value="true" tip="" tip.zh-CN="" tip.en-US="DI-36" />
<Limit di="PM2.DI_PumpExhaustPressSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-38" />
<Limit di="PM2.DI_PMAExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-39" />
<Limit di="PM2.DI_PumpExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-40" />
<Limit di="PM2.DI_ScrubberIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-41" />
<Limit di="PM2.DI_FacilityIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-42" />
<Limit di="PM2.DI_ServoDriverFaultSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-45" />
<Limit di="PM2.DI_GN2InletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-55" />
<Limit di="PM2.DI_ArInletPressSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-56" />
<Limit di="PM2.DI_H2PressureSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-57" />
<Limit di="PM2.DI_GBH2DetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-59" />
<Limit di="PM2.DI_DryPump1Running" value="true" tip="" tip.zh-CN="" tip.en-US="DI-65" />
<Limit di="PM2.DI_FacilityWarningSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-72" />
<Limit di="PM2.DI_ProcessStopSW" value="false" tip="" tip.zh-CN="" tip.en-US="DI-81" />
<Limit di="PM2.DI_PSU1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-320" />
<Limit di="PM2.DI_PSU2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-321" />
<Limit di="PM2.DI_PSU3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-322" />
<Limit di="PM2.DI_SCR1Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-323" />
<Limit di="PM2.DI_SCR2Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-324" />
<Limit di="PM2.DI_SCR3Alarm" value="false" tip="" tip.zh-CN="" tip.en-US="DI-325"/>
<Limit do="PM2.DO_ReactorPressRisingRateFast" value="true" tip="" tip.zh-CN="" tip.en-US="DO-192" />
<Limit di="PM2.DI_UPS2Enable" value="false" tip="" tip.zh-CN="" tip.en-US="DI-79" />
<Limit di="PM2.DI_UPS2LowBattery" value="false" tip="" tip.zh-CN="" tip.en-US="DI-85" />
<Limit do="PM2.DO_ChamMiddleFlow2Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-195" />
<Limit do="PM2.DO_SHFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-196" />
<Limit do="PM2.DO_ChamTopFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-197" />
<Limit do="PM2.DO_ChamMiddleFlow1Temp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-198" />
<Limit do="PM2.DO_ChamBottomFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-199" />
<Limit do="PM2.DO_SpareFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-200" />
<Limit do="PM2.DO_PowerRod1FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-201" />
<Limit do="PM2.DO_PowerRod2FlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-202" />
<Limit do="PM2.DO_ForelineFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-203" />
<Limit do="PM2.DO_ElectrodeWFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-204" />
<Limit do="PM2.DO_TransformerFlowTemp" value="true" tip="" tip.zh-CN="" tip.en-US="DO-206" />
<Limit do="PM2.DO_PyroCommunicationError" value="false" tip="" tip.zh-CN="" tip.en-US="DO-220" />
<Limit do="PM2.DO_TC1PyroWarmMaxDiff" value="false" tip="" tip.zh-CN="" tip.en-US="DO-230" />
<Limit do="PM2.DO_TC1AETempRasisingFast" value="false" tip="" tip.zh-CN="" tip.en-US="DO-231" />
</Action>
</Interlock>

View File

@ -541,6 +541,12 @@ namespace SicPM2
private bool PutOnline()
{
if (IsService)
{
EV.PostWarningLog(Module, $"{Module} is Service State,do not Online");
return false;
}
IsOnline = true;
NotifyModuleOfflineCancellation.Cancel();
return true;

View File

@ -47,6 +47,7 @@ namespace SicPM2.RecipeExecutions
EnableRotation,
SetRotation1,
SetRotation2,
WaitRotation1,
EnableTC1,
SetTC1Mode,
SetTC1Ratio,
@ -233,7 +234,7 @@ namespace SicPM2.RecipeExecutions
SetSCREnable((int)RoutineStep.CloseTC2, false, 5);
}
WaitRotationValve((int)RoutineStep.SetRotation2, _rotationSpeed, true, _rotationSpeed / 2);
WaitRotationValve((int)RoutineStep.WaitRotation1, _rotationSpeed, true, _rotationSpeed / 2);
}
catch (RoutineBreakException)

View File

@ -372,12 +372,12 @@ namespace SicPM2.RecipeExecutions
if (IsCmdSkip(recipeCmd)) // 不是注册的方法,需要跳过
continue;
if (!OP.CanDoOperation($"{Module}.{recipeCmd}", out reason, PmDevice.RecipeRunningInfo.RecipeStepList[_currentStepNumber].RecipeCommands[recipeCmd]))
{
EV.PostAlarmLog(Module, $"Can not execute {recipeCmd}, {reason}");
return Result.FAIL;
}
else
// if (!OP.CanDoOperation($"{Module}.{recipeCmd}", out reason, PmDevice.RecipeRunningInfo.RecipeStepList[_currentStepNumber].RecipeCommands[recipeCmd]))
// {
// EV.PostAlarmLog(Module, $"Can not execute {recipeCmd}, {reason}");
// return Result.FAIL;
// }
// else
{
int time = (int)(PmDevice.RecipeRunningInfo.RecipeStepList[_currentStepNumber].StepTime * 1000 - _curStepElpasedTimeBeforePaused);// (int)PMDevice.RecipeRunningInfo.RecipeStepList[_currentStepNumber].StepTime * 1000;

View File

@ -1573,7 +1573,7 @@ namespace SicPM2.Routines
},
() =>
{
return Math.Abs(_IoThrottle.PressureSetpoint - pressure) <= 0.1;
return Math.Abs(_IoThrottle.PressureSetpoint - pressure) <= 1;
},
timeout * 1000);

View File

@ -25,7 +25,8 @@ namespace SicPM2.Routines
SetBlockOff,
EnableRotation,
EnableHeater,
SetRotation1,
SetRotation1,
WaitRotation1,
SetTC1Mode,
SetTC1Ratio,
SetTC1Ref,
@ -138,14 +139,16 @@ namespace SicPM2.Routines
{
try
{
EnableRotation((int)RoutineStep.EnableRotation, 5);
SetRotationValveAndNoWait((int)RoutineStep.SetRotation1, _rotationSpeed);
TimeDelay((int)RoutineStep.TimeDelay1, 5);
if (!hasWafer)
{
SetConfinementRingUpAndWait((int)RoutineStep.SetServoUp, 30);
}
SetRotationValveAndNoWait((int)RoutineStep.SetRotation1, _rotationSpeed);
ExecuteRoutine((int)RoutineStep.SetChamberPressure, _pmServoToPressure);
TimeDelay((int)RoutineStep.TimeDelay8, 1);
if (_psuHeatEnable && _needEnableHeat)
@ -168,7 +171,7 @@ namespace SicPM2.Routines
SetSCRHeatRatio((int)RoutineStep.SetTC2Ratio, _scrL1Ratio, _scrL2Ratio, _scrL3Ratio);
}
//SetRotationValve((int)RoutineStep.SetRotation1, _rotationSpeed, true, _rotationSpeed/2);
WaitRotationValve((int)RoutineStep.WaitRotation1, _rotationSpeed, true, _rotationSpeed / 2);
}
catch (RoutineBreakException)
{

View File

@ -31,6 +31,10 @@ namespace SicPM2.Routines
SetGroupK,
SetGroupD,
SetGroupG,
VentPumpClose,
SetGroupV25,
TimeDelay1,
}
private int _heatTimeOut = 5;
@ -87,6 +91,9 @@ namespace SicPM2.Routines
//所有PC设定为默认值
SetPcToDefault((int)RoutineStep.SetPC, _lstPcList);
//等待MFC等流量
TimeDelay((int)RoutineStep.TimeDelay1, Math.Max(_mfc2to40RampTime, _mfc1to16RampTime));
//打开V32
SetIoValueByGroup((int)RoutineStep.SetV32, IoGroupName.V32, true, _IoValueOpenCloseTimeout);
@ -105,11 +112,12 @@ namespace SicPM2.Routines
SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout);
SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout);
////打开V65
//SetIoValueByGroup((int)RoutineStep.SetV65, IoGroupName.V65, true, _IoValueOpenCloseTimeout);
//打开V68
SetIoValueByGroup((int)RoutineStep.SetV68, IoGroupName.GasIn1, true, _IoValueOpenCloseTimeout);
//关闭V72,打开V25
SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false, _IoValueOpenCloseTimeout);
SetIoValueByGroup((int)RoutineStep.SetGroupV25, IoGroupName.V25, true, _IoValueOpenCloseTimeout);
}
catch (RoutineBreakException)

View File

@ -121,6 +121,7 @@ namespace SicPM2.Routines
CheckFinal2Open,
CheckTvOpen,
SetRotation2,
WaitRotation1,
SetGroupV25,
SetScrReset,
CheckEpv2Open,
@ -409,7 +410,7 @@ namespace SicPM2.Routines
SetSCREnable((int)RoutineStep.CloseTC2, false, 5);
}
WaitRotationValve((int)RoutineStep.SetRotation2, _rotationSpeed, true, 300);
WaitRotationValve((int)RoutineStep.WaitRotation1, _rotationSpeed, true, 300);
}
catch (RoutineBreakException)

View File

@ -138,8 +138,8 @@ namespace SicPM2.Routines
_pmPressureMaxDiff = SC.GetValue<double>($"PM.{Module}.ThrottlePressureMaxDiff");
_throttleTimeout = SC.GetValue<int>($"PM.{Module}.ThrottlePressureTimeout");
_vacPumpBasePressure = SC.GetValue<double>($"PM.{Module}.VacIdle.PumpPressure");
_routineTimeOut = SC.GetValue<int>($"PM.{Module}.VacIdle.RoutineTimeOut");
_vacPumpBasePressure = SC.GetValue<double>($"PM.{Module}.Pump.PumpPressure");
_routineTimeOut = SC.GetValue<int>($"PM.{Module}.Pump.RoutineTimeOut");
if (!_pmIoInterLock.SetPMVacIdleRountingRunning(true, out var reason))
{

View File

@ -3,109 +3,109 @@
<roles>
<!--2:read and write-->
<roleItem id="0" name="Manager" autologout="1" logouttime="20">
Header,3;Overview,3;TM,3;EFEM,3;Device,3;ioPlatform,3;LeakCheck,3;Sequence,3;Recipe,3;EventLog,3;
RealTimeCharting,3;WaferHistory,1;DataHistory,3;Charting,1;Config,3;Account,3;Role,3;Runtime,3;Alarm,3;mainPM1,3;processPM1,3;ioPM1,3;motionPM1,3;heaterPM1,3;
alarmPM1,3;MFCFlowPM1,3;mainPM2,3;processPM2,3;ioPM2,3;motionPM2,3;heaterPM2,3;alarmPM2,3;MFCFlowPM2,3;
Step,3;Name,3;Time,3;Growth Rate,3;1. Ar/H2 Switch,3;2. SH Total Flow,3;3. Carray Gas Flow (M40),3;4. SH Total Flow Split Ratio,3;5. Flow Set Mode,3;6. Pressure Set,3;7. Rotation Set,3;
8. PSU Control Mode,3;9. PSU Set Mode,3;10. SCR Control Mode,3;11. SCR Set Mode,3;12. PSU Inner Temp Set,3;13. PSU Middle Temp Set,3;14. PSU Outer Temp Set,3;
15. SCR Temp Set,3;16. PSU Inner Ratio Set,3;17. PSU Middle Ratio Set,3;18. PSU Outer Ratio Set,3;19. SCR Upper Ratio Set,3;20. SCR Middle Ratio Set,3;21. SCR Lower Ratio Set,3;
22. Si Source Total Flow,3;23. SiH4 Flow Mode,3;24. SiH4 Flow (M14),3;25. TCS Flow Mode,3;26. TCS Bubb Low Flow (M11),3;27. TCS Bubb High Flow (M10),3;
28. TCS Push Flow (M12),3;29. TCS Bubb Pressure (PC3),3;30. HCl Flow Mode,3;31. HCl Flow (M13),3;32. Si Source Split Ratio,3;33. Si Source Push Pressure (PC6),3;
34. Si Source Inner Flow (M23),3;35. Si Source Middle Flow (M22),3;36. Si Source Outer Flow (M9),3;37. C Source Total Flow,3;38. C2H4 Flow Mode,3;39. C2H4 Flow (M16),3;
42. C Source Split Ratio,3;43. C Source Push Pressure (PC7),3;44. C Source Inner Flow (M26),3;45. C Source Middle Flow (M25),3;46. C Source Outer Flow (M15),3;
47. Dope Total Flow,3;48. N2 Flow Mode,3;49. N2 Actual Flow,3;50. N2 Low Flow (M4),3;51. Dilut Flow For N2 (M3),3;52. Diluted N2 Flow (M6),3;
53. N2 Post Dilut Pressure (PC1),3;54. N2 High Flow Mode,3;55. N2 High Flow (M5),3;56. TMA Flow Mode,3;57. TMA Bubb Flow (M7),3;58. TMA Push Flow (M8),3;
59. TMA Bubb Pressure (PC2),3;60. Dope Split Ratio,3;61. Dope Push Pressure (PC5),3;62. Dope Inner Flow (M20),3;63. Dope Middle Flow (M19),3;64. Dope Outer Flow (M2),3;
65. SH Push Total Flow,3;66. SH Inner Flow,3;67. SH Middle Flow,3;68. SH Outer Flow,3;69. Inner Push Flow (M29),3;70. Middle Push Flow (M31),3;
71. Outer Push Flow (M28),3;72. SH Purge Flow (M27),3;73. Optic Purge Flow (M33),3;74. GasRing Purge Flow (M32),3;75. Chamber Purge Flow (M35),3;
76. Rotation-Up Purge Flow (M36),3;77. Shutter Purge Flow (M37),3;78. Heater-WF Purge Flow (M38),3;79. Total Vent Flow,3;80. Vent Push Flow (M1),3;
81. Vent Pre-Exhaust Pressure (PC4),3;
Operation.Overview.Operation,3;Operation.Overview.RunningMode,3;PM1.Main.ReactorStatus,3;PM1.Main.ReactorService,3;PM1.Process.Steps,3;Platform.Mainframe.PM1,3;
Platform.Mainframe.Buffer,3;Platform.Mainframe.LL,3;Platform.Mainframe.TM,3;Platform.Mainframe.PreHeat,3;
Recipe.Behaviour.AllowEditCellAccessPerm,3;Recipe.Behaviour.ShowValuesInRecipeEditor,3;Recipe.Behaviour.ShowValueInProcessView,3;Recipe.Behaviour.AllowSaveInProcessView,3;Recipe.Behaviour.AllowRipInProcessView,3;
Step1,3;Step2,3;Step3,3;Step4,3;Step5,3;Step6,3;Step7,3;Step8,3;
Step9,3;Step10,3;Step11,3;Step12,3;Step13,3;Step14,3;Step15,3;Step16,3;Step17,3;Step18,3;Step19,3;Step20,3;Step21,3;Step22,3;Step23,3;Step24,3;Step25,3;Step26,3;Step27,3;
Step28,3;Step29,3;Step30,3;Step31,3;Step32,3;Step33,3;Step34,3;Step35,3;Step36,3;Step37,3;Step38,3;Step39,3;Step40,3;Step41,3;Step42,3;Step43,3;Step44,3;Step45,3;Step46,3;
Step47,3;Step48,3;Step49,3;Step50,3;
</roleItem>
Header,3;Overview,3;TM,3;Device,3;ioPlatform,3;LeakCheck,3;Sequence,3;Recipe,3;EventLog,3;ProcessHistory,3;RealTimeCharting,3;DataHistory,3;JobList,3;
Charting,3;Config,3;Account,3;Role,3;Runtime,3;Alarm,3;mainPM1,3;processPM1,3;ioPM1,3;motionPM1,3;heaterPM1,3;alarmPM1,3;MFCFlowPM1,3;mainPM2,3;
processPM2,3;ioPM2,3;motionPM2,3;heaterPM2,3;alarmPM2,3;MFCFlowPM2,3;Uid,3;Step,3;Name,3;Time,3;Growth Rate,3;1. Ar/H2 Switch,3;2. SH Total Flow,3;
3. Carray Gas Flow (M40),3;4. SH Total Flow Split Ratio,3;5. Flow Set Mode,3;6. Pressure Set,3;7. Rotation Set,3;8. PSU Control Mode,3;9. PSU Set Mode,3;
10. SCR Control Mode,3;11. SCR Set Mode,3;12. PSU Inner Temp Set,3;13. PSU Middle Temp Set,3;14. PSU Outer Temp Set,3;15. SCR Temp Set,3;
16. PSU Inner Ratio Set,3;17. PSU Middle Ratio Set,3;18. PSU Outer Ratio Set,3;19. SCR Upper Ratio Set,3;20. SCR Middle Ratio Set,3;21. SCR Lower Ratio Set,3;
22. Si Source Total Flow,3;23. SiH4 Flow Mode,3;24. SiH4 Flow (M14),3;25. TCS Flow Mode,3;26. TCS Bubb Low Flow (M11),3;27. TCS Bubb High Flow (M10),3;
28. TCS Push Flow (M12),3;29. TCS Bubb Pressure (PC3),3;30. HCl Flow Mode,3;31. HCl Flow (M13),3;32. Si Source Split Ratio,3;33. Si Source Push Pressure (PC6),3;
34. Si Source Inner Flow (M23),3;35. Si Source Middle Flow (M22),3;36. Si Source Outer Flow (M9),3;37. C Source Total Flow,3;38. C2H4 Flow Mode,3;
39. C2H4 Flow (M16),3;42. C Source Split Ratio,3;43. C Source Push Pressure (PC7),3;44. C Source Inner Flow (M26),3;45. C Source Middle Flow (M25),3;
46. C Source Outer Flow (M15),3;47. Dope Total Flow,3;48. N2 Flow Mode,3;49. N2 Actual Flow,3;50. N2 Low Flow (M4),3;51. Dilut Flow For N2 (M3),3;
52. Diluted N2 Flow (M6),3;53. N2 Post Dilut Pressure (PC1),3;54. N2 High Flow Mode,3;55. N2 High Flow (M5),3;56. TMA Flow Mode,3;57. TMA Bubb Flow (M7),3;
58. TMA Push Flow (M8),3;59. TMA Bubb Pressure (PC2),3;60. Dope Split Ratio,3;61. Dope Push Pressure (PC5),3;62. Dope Inner Flow (M20),3;
63. Dope Middle Flow (M19),3;64. Dope Outer Flow (M2),3;65. SH Push Total Flow,3;66. SH Inner Flow,3;67. SH Middle Flow,3;68. SH Outer Flow,3;
69. Inner Push Flow (M29),3;70. Middle Push Flow (M31),3;71. Outer Push Flow (M28),3;72. SH Purge Flow (M27),3;73. Optic Purge Flow (M33),3;
74. GasRing Purge Flow (M32),3;75. Chamber Purge Flow (M35),3;76. Rotation-Up Purge Flow (M36),3;77. Shutter Purge Flow (M37),3;
78. Heater-WF Purge Flow (M38),3;79. Total Vent Flow,3;80. Vent Push Flow (M1),3;81. Vent Pre-Exhaust Pressure (PC4),3;Operation.Overview.Operation,3;
Operation.Overview.RunningMode,3;PM1.Main.ReactorStatus,3;PM1.Main.ReactorService,3;PM1.Process.Steps,3;Platform.Mainframe.PM1,3;
Platform.Mainframe.Buffer,3;Platform.Mainframe.LL,3;Platform.Mainframe.TM,3;Platform.Mainframe.PreHeat,3;Recipe.Behaviour.AllowEditCellAccessPerm,3;
Recipe.Behaviour.ShowValuesInRecipeEditor,3;Recipe.Behaviour.ShowValueInProcessView,3;Recipe.Behaviour.AllowSaveInProcessView,3;
Recipe.Behaviour.AllowRipInProcessView,3;Step1,3;Step2,3;Step3,3;Step4,3;Step5,3;Step6,3;Step7,3;Step8,3;Step9,3;Step10,3;Step11,3;Step12,3;Step13,3;Step14,3;
Step15,3;Step16,3;Step17,3;Step18,3;Step19,3;Step20,3;Step21,3;Step22,3;Step23,3;Step24,3;Step25,3;Step26,3;Step27,3;Step28,3;Step29,3;Step30,3;Step31,3;
Step32,3;Step33,3;Step34,3;Step35,3;Step36,3;Step37,3;Step38,3;Step39,3;Step40,3;Step41,3;Step42,3;Step43,3;Step44,3;Step45,3;Step46,3;Step47,3;Step48,3;
Step49,3;Step50,3;
</roleItem>
<roleItem id="1" name="Engineer" autologout="1" logouttime="20">
Header,3;Overview,3;TM,3;EFEM,3;Device,3;ioPlatform,3;LeakCheck,3;Sequence,3;Recipe,3;EventLog,3;
RealTimeCharting,3;WaferHistory,1;DataHistory,3;Charting,1;Config,3;Account,3;Role,3;Runtime,3;Alarm,3;mainPM1,3;processPM1,3;ioPM1,3;motionPM1,3;heaterPM1,3;
alarmPM1,3;MFCFlowPM1,3;mainPM2,3;processPM2,3;ioPM2,3;motionPM2,3;heaterPM2,3;alarmPM2,3;MFCFlowPM2,3;
Step,3;Name,3;Time,3;Growth Rate,3;1. Ar/H2 Switch,3;2. SH Total Flow,3;3. Carray Gas Flow (M40),3;4. SH Total Flow Split Ratio,3;5. Flow Set Mode,3;6. Pressure Set,3;7. Rotation Set,3;
8. PSU Control Mode,3;9. PSU Set Mode,3;10. SCR Control Mode,3;11. SCR Set Mode,3;12. PSU Inner Temp Set,3;13. PSU Middle Temp Set,3;14. PSU Outer Temp Set,3;
15. SCR Temp Set,3;16. PSU Inner Ratio Set,3;17. PSU Middle Ratio Set,3;18. PSU Outer Ratio Set,3;19. SCR Upper Ratio Set,3;20. SCR Middle Ratio Set,3;21. SCR Lower Ratio Set,3;
22. Si Source Total Flow,3;23. SiH4 Flow Mode,3;24. SiH4 Flow (M14),3;25. TCS Flow Mode,3;26. TCS Bubb Low Flow (M11),3;27. TCS Bubb High Flow (M10),3;
28. TCS Push Flow (M12),3;29. TCS Bubb Pressure (PC3),3;30. HCl Flow Mode,3;31. HCl Flow (M13),3;32. Si Source Split Ratio,3;33. Si Source Push Pressure (PC6),3;
34. Si Source Inner Flow (M23),3;35. Si Source Middle Flow (M22),3;36. Si Source Outer Flow (M9),3;37. C Source Total Flow,3;38. C2H4 Flow Mode,3;39. C2H4 Flow (M16),3;
42. C Source Split Ratio,3;43. C Source Push Pressure (PC7),3;44. C Source Inner Flow (M26),3;45. C Source Middle Flow (M25),3;46. C Source Outer Flow (M15),3;
47. Dope Total Flow,3;48. N2 Flow Mode,3;49. N2 Actual Flow,3;50. N2 Low Flow (M4),3;51. Dilut Flow For N2 (M3),3;52. Diluted N2 Flow (M6),3;
53. N2 Post Dilut Pressure (PC1),3;54. N2 High Flow Mode,3;55. N2 High Flow (M5),3;56. TMA Flow Mode,3;57. TMA Bubb Flow (M7),3;58. TMA Push Flow (M8),3;
59. TMA Bubb Pressure (PC2),3;60. Dope Split Ratio,3;61. Dope Push Pressure (PC5),3;62. Dope Inner Flow (M20),3;63. Dope Middle Flow (M19),3;64. Dope Outer Flow (M2),3;
65. SH Push Total Flow,3;66. SH Inner Flow,3;67. SH Middle Flow,3;68. SH Outer Flow,3;69. Inner Push Flow (M29),3;70. Middle Push Flow (M31),3;
71. Outer Push Flow (M28),3;72. SH Purge Flow (M27),3;73. Optic Purge Flow (M33),3;74. GasRing Purge Flow (M32),3;75. Chamber Purge Flow (M35),3;
76. Rotation-Up Purge Flow (M36),3;77. Shutter Purge Flow (M37),3;78. Heater-WF Purge Flow (M38),3;79. Total Vent Flow,3;80. Vent Push Flow (M1),3;
81. Vent Pre-Exhaust Pressure (PC4),3;
Operation.Overview.Operation,3;Operation.Overview.RunningMode,3;PM1.Main.ReactorStatus,3;PM1.Main.ReactorService,3;PM1.Process.Steps,3;Platform.Mainframe.PM1,3;
Platform.Mainframe.Buffer,3;Platform.Mainframe.LL,3;Platform.Mainframe.TM,3;Platform.Mainframe.PreHeat,3;
Recipe.Behaviour.AllowEditCellAccessPerm,3;Recipe.Behaviour.ShowValuesInRecipeEditor,3;Recipe.Behaviour.ShowValueInProcessView,3;Recipe.Behaviour.AllowSaveInProcessView,3;Recipe.Behaviour.AllowRipInProcessView,3;
Step1,3;Step2,3;Step3,3;Step4,3;Step5,3;Step6,3;Step7,3;Step8,3;
Step9,3;Step10,3;Step11,3;Step12,3;Step13,3;Step14,3;Step15,3;Step16,3;Step17,3;Step18,3;Step19,3;Step20,3;Step21,3;Step22,3;Step23,3;Step24,3;Step25,3;Step26,3;Step27,3;
Step28,3;Step29,3;Step30,3;Step31,3;Step32,3;Step33,3;Step34,3;Step35,3;Step36,3;Step37,3;Step38,3;Step39,3;Step40,3;Step41,3;Step42,3;Step43,3;Step44,3;Step45,3;Step46,3;
Step47,3;Step48,3;Step49,3;Step50,3;
</roleItem>
Header,3;Overview,3;TM,3;Device,3;ioPlatform,3;LeakCheck,3;Sequence,3;Recipe,3;EventLog,3;ProcessHistory,3;RealTimeCharting,3;DataHistory,3;JobList,3;
Charting,3;Config,3;Account,3;Role,3;Runtime,3;Alarm,3;mainPM1,3;processPM1,3;ioPM1,3;motionPM1,3;heaterPM1,3;alarmPM1,3;MFCFlowPM1,3;mainPM2,3;
processPM2,3;ioPM2,3;motionPM2,3;heaterPM2,3;alarmPM2,3;MFCFlowPM2,3;Uid,3;Step,3;Name,3;Time,3;Growth Rate,3;1. Ar/H2 Switch,3;2. SH Total Flow,3;
3. Carray Gas Flow (M40),3;4. SH Total Flow Split Ratio,3;5. Flow Set Mode,3;6. Pressure Set,3;7. Rotation Set,3;8. PSU Control Mode,3;9. PSU Set Mode,3;
10. SCR Control Mode,3;11. SCR Set Mode,3;12. PSU Inner Temp Set,3;13. PSU Middle Temp Set,3;14. PSU Outer Temp Set,3;15. SCR Temp Set,3;
16. PSU Inner Ratio Set,3;17. PSU Middle Ratio Set,3;18. PSU Outer Ratio Set,3;19. SCR Upper Ratio Set,3;20. SCR Middle Ratio Set,3;21. SCR Lower Ratio Set,3;
22. Si Source Total Flow,3;23. SiH4 Flow Mode,3;24. SiH4 Flow (M14),3;25. TCS Flow Mode,3;26. TCS Bubb Low Flow (M11),3;27. TCS Bubb High Flow (M10),3;
28. TCS Push Flow (M12),3;29. TCS Bubb Pressure (PC3),3;30. HCl Flow Mode,3;31. HCl Flow (M13),3;32. Si Source Split Ratio,3;33. Si Source Push Pressure (PC6),3;
34. Si Source Inner Flow (M23),3;35. Si Source Middle Flow (M22),3;36. Si Source Outer Flow (M9),3;37. C Source Total Flow,3;38. C2H4 Flow Mode,3;
39. C2H4 Flow (M16),3;42. C Source Split Ratio,3;43. C Source Push Pressure (PC7),3;44. C Source Inner Flow (M26),3;45. C Source Middle Flow (M25),3;
46. C Source Outer Flow (M15),3;47. Dope Total Flow,3;48. N2 Flow Mode,3;49. N2 Actual Flow,3;50. N2 Low Flow (M4),3;51. Dilut Flow For N2 (M3),3;
52. Diluted N2 Flow (M6),3;53. N2 Post Dilut Pressure (PC1),3;54. N2 High Flow Mode,3;55. N2 High Flow (M5),3;56. TMA Flow Mode,3;57. TMA Bubb Flow (M7),3;
58. TMA Push Flow (M8),3;59. TMA Bubb Pressure (PC2),3;60. Dope Split Ratio,3;61. Dope Push Pressure (PC5),3;62. Dope Inner Flow (M20),3;
63. Dope Middle Flow (M19),3;64. Dope Outer Flow (M2),3;65. SH Push Total Flow,3;66. SH Inner Flow,3;67. SH Middle Flow,3;68. SH Outer Flow,3;
69. Inner Push Flow (M29),3;70. Middle Push Flow (M31),3;71. Outer Push Flow (M28),3;72. SH Purge Flow (M27),3;73. Optic Purge Flow (M33),3;
74. GasRing Purge Flow (M32),3;75. Chamber Purge Flow (M35),3;76. Rotation-Up Purge Flow (M36),3;77. Shutter Purge Flow (M37),3;
78. Heater-WF Purge Flow (M38),3;79. Total Vent Flow,3;80. Vent Push Flow (M1),3;81. Vent Pre-Exhaust Pressure (PC4),3;Operation.Overview.Operation,3;
Operation.Overview.RunningMode,3;PM1.Main.ReactorStatus,3;PM1.Main.ReactorService,3;PM1.Process.Steps,3;Platform.Mainframe.PM1,3;
Platform.Mainframe.Buffer,3;Platform.Mainframe.LL,3;Platform.Mainframe.TM,3;Platform.Mainframe.PreHeat,3;Recipe.Behaviour.AllowEditCellAccessPerm,3;
Recipe.Behaviour.ShowValuesInRecipeEditor,3;Recipe.Behaviour.ShowValueInProcessView,3;Recipe.Behaviour.AllowSaveInProcessView,3;
Recipe.Behaviour.AllowRipInProcessView,3;Step1,3;Step2,3;Step3,3;Step4,3;Step5,3;Step6,3;Step7,3;Step8,3;Step9,3;Step10,3;Step11,3;Step12,3;Step13,3;Step14,3;
Step15,3;Step16,3;Step17,3;Step18,3;Step19,3;Step20,3;Step21,3;Step22,3;Step23,3;Step24,3;Step25,3;Step26,3;Step27,3;Step28,3;Step29,3;Step30,3;Step31,3;
Step32,3;Step33,3;Step34,3;Step35,3;Step36,3;Step37,3;Step38,3;Step39,3;Step40,3;Step41,3;Step42,3;Step43,3;Step44,3;Step45,3;Step46,3;Step47,3;Step48,3;
Step49,3;Step50,3;
</roleItem>
<roleItem id="2" name="Technician" autologout="1" logouttime="20">
Header,3;Overview,3;TM,3;EFEM,3;Device,3;ioPlatform,3;LeakCheck,3;Sequence,3;Recipe,3;EventLog,3;
RealTimeCharting,3;WaferHistory,1;DataHistory,3;Charting,1;Config,3;Account,3;Role,3;Runtime,3;Alarm,3;mainPM1,3;processPM1,3;ioPM1,3;motionPM1,3;heaterPM1,3;
alarmPM1,3;MFCFlowPM1,3;mainPM2,3;processPM2,3;ioPM2,3;motionPM2,3;heaterPM2,3;alarmPM2,3;MFCFlowPM2,3;
Step,3;Name,3;Time,3;Growth Rate,3;1. Ar/H2 Switch,3;2. SH Total Flow,3;3. Carray Gas Flow (M40),3;4. SH Total Flow Split Ratio,3;5. Flow Set Mode,3;6. Pressure Set,3;7. Rotation Set,3;
8. PSU Control Mode,3;9. PSU Set Mode,3;10. SCR Control Mode,3;11. SCR Set Mode,3;12. PSU Inner Temp Set,3;13. PSU Middle Temp Set,3;14. PSU Outer Temp Set,3;
15. SCR Temp Set,3;16. PSU Inner Ratio Set,3;17. PSU Middle Ratio Set,3;18. PSU Outer Ratio Set,3;19. SCR Upper Ratio Set,3;20. SCR Middle Ratio Set,3;21. SCR Lower Ratio Set,3;
22. Si Source Total Flow,3;23. SiH4 Flow Mode,3;24. SiH4 Flow (M14),3;25. TCS Flow Mode,3;26. TCS Bubb Low Flow (M11),3;27. TCS Bubb High Flow (M10),3;
28. TCS Push Flow (M12),3;29. TCS Bubb Pressure (PC3),3;30. HCl Flow Mode,3;31. HCl Flow (M13),3;32. Si Source Split Ratio,3;33. Si Source Push Pressure (PC6),3;
34. Si Source Inner Flow (M23),3;35. Si Source Middle Flow (M22),3;36. Si Source Outer Flow (M9),3;37. C Source Total Flow,3;38. C2H4 Flow Mode,3;39. C2H4 Flow (M16),3;
42. C Source Split Ratio,3;43. C Source Push Pressure (PC7),3;44. C Source Inner Flow (M26),3;45. C Source Middle Flow (M25),3;46. C Source Outer Flow (M15),3;
47. Dope Total Flow,3;48. N2 Flow Mode,3;49. N2 Actual Flow,3;50. N2 Low Flow (M4),3;51. Dilut Flow For N2 (M3),3;52. Diluted N2 Flow (M6),3;
53. N2 Post Dilut Pressure (PC1),3;54. N2 High Flow Mode,3;55. N2 High Flow (M5),3;56. TMA Flow Mode,3;57. TMA Bubb Flow (M7),3;58. TMA Push Flow (M8),3;
59. TMA Bubb Pressure (PC2),3;60. Dope Split Ratio,3;61. Dope Push Pressure (PC5),3;62. Dope Inner Flow (M20),3;63. Dope Middle Flow (M19),3;64. Dope Outer Flow (M2),3;
65. SH Push Total Flow,3;66. SH Inner Flow,3;67. SH Middle Flow,3;68. SH Outer Flow,3;69. Inner Push Flow (M29),3;70. Middle Push Flow (M31),3;
71. Outer Push Flow (M28),3;72. SH Purge Flow (M27),3;73. Optic Purge Flow (M33),3;74. GasRing Purge Flow (M32),3;75. Chamber Purge Flow (M35),3;
76. Rotation-Up Purge Flow (M36),3;77. Shutter Purge Flow (M37),3;78. Heater-WF Purge Flow (M38),3;79. Total Vent Flow,3;80. Vent Push Flow (M1),3;
81. Vent Pre-Exhaust Pressure (PC4),3;
Operation.Overview.Operation,3;Operation.Overview.RunningMode,3;PM1.Main.ReactorStatus,3;PM1.Main.ReactorService,3;PM1.Process.Steps,3;Platform.Mainframe.PM1,3;
Platform.Mainframe.Buffer,3;Platform.Mainframe.LL,3;Platform.Mainframe.TM,3;Platform.Mainframe.PreHeat,3;
Recipe.Behaviour.AllowEditCellAccessPerm,3;Recipe.Behaviour.ShowValuesInRecipeEditor,3;Recipe.Behaviour.ShowValueInProcessView,3;Recipe.Behaviour.AllowSaveInProcessView,3;Recipe.Behaviour.AllowRipInProcessView,3;
Step1,3;Step2,3;Step3,3;Step4,3;Step5,3;Step6,3;Step7,3;Step8,3;
Step9,3;Step10,3;Step11,3;Step12,3;Step13,3;Step14,3;Step15,3;Step16,3;Step17,3;Step18,3;Step19,3;Step20,3;Step21,3;Step22,3;Step23,3;Step24,3;Step25,3;Step26,3;Step27,3;
Step28,3;Step29,3;Step30,3;Step31,3;Step32,3;Step33,3;Step34,3;Step35,3;Step36,3;Step37,3;Step38,3;Step39,3;Step40,3;Step41,3;Step42,3;Step43,3;Step44,3;Step45,3;Step46,3;
Step47,3;Step48,3;Step49,3;Step50,3;
</roleItem>
Header,3;Overview,3;TM,3;Device,3;ioPlatform,3;LeakCheck,3;Sequence,3;Recipe,3;EventLog,3;ProcessHistory,3;RealTimeCharting,3;DataHistory,3;JobList,3;
Charting,3;Config,3;Account,3;Role,3;Runtime,3;Alarm,3;mainPM1,3;processPM1,3;ioPM1,3;motionPM1,3;heaterPM1,3;alarmPM1,3;MFCFlowPM1,3;mainPM2,3;
processPM2,3;ioPM2,3;motionPM2,3;heaterPM2,3;alarmPM2,3;MFCFlowPM2,3;Uid,3;Step,3;Name,3;Time,3;Growth Rate,3;1. Ar/H2 Switch,3;2. SH Total Flow,3;
3. Carray Gas Flow (M40),3;4. SH Total Flow Split Ratio,3;5. Flow Set Mode,3;6. Pressure Set,3;7. Rotation Set,3;8. PSU Control Mode,3;9. PSU Set Mode,3;
10. SCR Control Mode,3;11. SCR Set Mode,3;12. PSU Inner Temp Set,3;13. PSU Middle Temp Set,3;14. PSU Outer Temp Set,3;15. SCR Temp Set,3;
16. PSU Inner Ratio Set,3;17. PSU Middle Ratio Set,3;18. PSU Outer Ratio Set,3;19. SCR Upper Ratio Set,3;20. SCR Middle Ratio Set,3;21. SCR Lower Ratio Set,3;
22. Si Source Total Flow,3;23. SiH4 Flow Mode,3;24. SiH4 Flow (M14),3;25. TCS Flow Mode,3;26. TCS Bubb Low Flow (M11),3;27. TCS Bubb High Flow (M10),3;
28. TCS Push Flow (M12),3;29. TCS Bubb Pressure (PC3),3;30. HCl Flow Mode,3;31. HCl Flow (M13),3;32. Si Source Split Ratio,3;33. Si Source Push Pressure (PC6),3;
34. Si Source Inner Flow (M23),3;35. Si Source Middle Flow (M22),3;36. Si Source Outer Flow (M9),3;37. C Source Total Flow,3;38. C2H4 Flow Mode,3;
39. C2H4 Flow (M16),3;42. C Source Split Ratio,3;43. C Source Push Pressure (PC7),3;44. C Source Inner Flow (M26),3;45. C Source Middle Flow (M25),3;
46. C Source Outer Flow (M15),3;47. Dope Total Flow,3;48. N2 Flow Mode,3;49. N2 Actual Flow,3;50. N2 Low Flow (M4),3;51. Dilut Flow For N2 (M3),3;
52. Diluted N2 Flow (M6),3;53. N2 Post Dilut Pressure (PC1),3;54. N2 High Flow Mode,3;55. N2 High Flow (M5),3;56. TMA Flow Mode,3;57. TMA Bubb Flow (M7),3;
58. TMA Push Flow (M8),3;59. TMA Bubb Pressure (PC2),3;60. Dope Split Ratio,3;61. Dope Push Pressure (PC5),3;62. Dope Inner Flow (M20),3;
63. Dope Middle Flow (M19),3;64. Dope Outer Flow (M2),3;65. SH Push Total Flow,3;66. SH Inner Flow,3;67. SH Middle Flow,3;68. SH Outer Flow,3;
69. Inner Push Flow (M29),3;70. Middle Push Flow (M31),3;71. Outer Push Flow (M28),3;72. SH Purge Flow (M27),3;73. Optic Purge Flow (M33),3;
74. GasRing Purge Flow (M32),3;75. Chamber Purge Flow (M35),3;76. Rotation-Up Purge Flow (M36),3;77. Shutter Purge Flow (M37),3;
78. Heater-WF Purge Flow (M38),3;79. Total Vent Flow,3;80. Vent Push Flow (M1),3;81. Vent Pre-Exhaust Pressure (PC4),3;Operation.Overview.Operation,3;
Operation.Overview.RunningMode,3;PM1.Main.ReactorStatus,3;PM1.Main.ReactorService,3;PM1.Process.Steps,3;Platform.Mainframe.PM1,3;
Platform.Mainframe.Buffer,3;Platform.Mainframe.LL,3;Platform.Mainframe.TM,3;Platform.Mainframe.PreHeat,3;Recipe.Behaviour.AllowEditCellAccessPerm,3;
Recipe.Behaviour.ShowValuesInRecipeEditor,3;Recipe.Behaviour.ShowValueInProcessView,3;Recipe.Behaviour.AllowSaveInProcessView,3;
Recipe.Behaviour.AllowRipInProcessView,3;Step1,3;Step2,3;Step3,3;Step4,3;Step5,3;Step6,3;Step7,3;Step8,3;Step9,3;Step10,3;Step11,3;Step12,3;Step13,3;Step14,3;
Step15,3;Step16,3;Step17,3;Step18,3;Step19,3;Step20,3;Step21,3;Step22,3;Step23,3;Step24,3;Step25,3;Step26,3;Step27,3;Step28,3;Step29,3;Step30,3;Step31,3;
Step32,3;Step33,3;Step34,3;Step35,3;Step36,3;Step37,3;Step38,3;Step39,3;Step40,3;Step41,3;Step42,3;Step43,3;Step44,3;Step45,3;Step46,3;Step47,3;Step48,3;
Step49,3;Step50,3;
</roleItem>
<roleItem id="3" name="Operator" autologout="1" logouttime="20">
Header,3;Overview,3;TM,3;EFEM,3;Device,3;ioPlatform,3;LeakCheck,3;Sequence,3;Recipe,3;EventLog,3;
RealTimeCharting,3;WaferHistory,1;DataHistory,3;Charting,1;Config,3;Account,3;Role,3;Runtime,3;Alarm,3;mainPM1,3;processPM1,3;ioPM1,3;motionPM1,3;heaterPM1,3;
alarmPM1,3;MFCFlowPM1,3;mainPM2,3;processPM2,3;ioPM2,3;motionPM2,3;heaterPM2,3;alarmPM2,3;MFCFlowPM2,3;
Step,3;Name,3;Time,3;Growth Rate,3;1. Ar/H2 Switch,3;2. SH Total Flow,3;3. Carray Gas Flow (M40),3;4. SH Total Flow Split Ratio,3;5. Flow Set Mode,3;6. Pressure Set,3;7. Rotation Set,3;
8. PSU Control Mode,3;9. PSU Set Mode,3;10. SCR Control Mode,3;11. SCR Set Mode,3;12. PSU Inner Temp Set,3;13. PSU Middle Temp Set,3;14. PSU Outer Temp Set,3;
15. SCR Temp Set,3;16. PSU Inner Ratio Set,3;17. PSU Middle Ratio Set,3;18. PSU Outer Ratio Set,3;19. SCR Upper Ratio Set,3;20. SCR Middle Ratio Set,3;21. SCR Lower Ratio Set,3;
22. Si Source Total Flow,3;23. SiH4 Flow Mode,3;24. SiH4 Flow (M14),3;25. TCS Flow Mode,3;26. TCS Bubb Low Flow (M11),3;27. TCS Bubb High Flow (M10),3;
28. TCS Push Flow (M12),3;29. TCS Bubb Pressure (PC3),3;30. HCl Flow Mode,3;31. HCl Flow (M13),3;32. Si Source Split Ratio,3;33. Si Source Push Pressure (PC6),3;
34. Si Source Inner Flow (M23),3;35. Si Source Middle Flow (M22),3;36. Si Source Outer Flow (M9),3;37. C Source Total Flow,3;38. C2H4 Flow Mode,3;39. C2H4 Flow (M16),3;
42. C Source Split Ratio,3;43. C Source Push Pressure (PC7),3;44. C Source Inner Flow (M26),3;45. C Source Middle Flow (M25),3;46. C Source Outer Flow (M15),3;
47. Dope Total Flow,3;48. N2 Flow Mode,3;49. N2 Actual Flow,3;50. N2 Low Flow (M4),3;51. Dilut Flow For N2 (M3),3;52. Diluted N2 Flow (M6),3;
53. N2 Post Dilut Pressure (PC1),3;54. N2 High Flow Mode,3;55. N2 High Flow (M5),3;56. TMA Flow Mode,3;57. TMA Bubb Flow (M7),3;58. TMA Push Flow (M8),3;
59. TMA Bubb Pressure (PC2),3;60. Dope Split Ratio,3;61. Dope Push Pressure (PC5),3;62. Dope Inner Flow (M20),3;63. Dope Middle Flow (M19),3;64. Dope Outer Flow (M2),3;
65. SH Push Total Flow,3;66. SH Inner Flow,3;67. SH Middle Flow,3;68. SH Outer Flow,3;69. Inner Push Flow (M29),3;70. Middle Push Flow (M31),3;
71. Outer Push Flow (M28),3;72. SH Purge Flow (M27),3;73. Optic Purge Flow (M33),3;74. GasRing Purge Flow (M32),3;75. Chamber Purge Flow (M35),3;
76. Rotation-Up Purge Flow (M36),3;77. Shutter Purge Flow (M37),3;78. Heater-WF Purge Flow (M38),3;79. Total Vent Flow,3;80. Vent Push Flow (M1),3;
81. Vent Pre-Exhaust Pressure (PC4),3;
Operation.Overview.Operation,3;Operation.Overview.RunningMode,3;PM1.Main.ReactorStatus,3;PM1.Main.ReactorService,3;PM1.Process.Steps,3;Platform.Mainframe.PM1,3;
Platform.Mainframe.Buffer,3;Platform.Mainframe.LL,3;Platform.Mainframe.TM,3;Platform.Mainframe.PreHeat,3;
Recipe.Behaviour.AllowEditCellAccessPerm,3;Recipe.Behaviour.ShowValuesInRecipeEditor,3;Recipe.Behaviour.ShowValueInProcessView,3;Recipe.Behaviour.AllowSaveInProcessView,3;Recipe.Behaviour.AllowRipInProcessView,3;
Step1,3;Step2,3;Step3,3;Step4,3;Step5,3;Step6,3;Step7,3;Step8,3;
Step9,3;Step10,3;Step11,3;Step12,3;Step13,3;Step14,3;Step15,3;Step16,3;Step17,3;Step18,3;Step19,3;Step20,3;Step21,3;Step22,3;Step23,3;Step24,3;Step25,3;Step26,3;Step27,3;
Step28,3;Step29,3;Step30,3;Step31,3;Step32,3;Step33,3;Step34,3;Step35,3;Step36,3;Step37,3;Step38,3;Step39,3;Step40,3;Step41,3;Step42,3;Step43,3;Step44,3;Step45,3;Step46,3;
Step47,3;Step48,3;Step49,3;Step50,3;
</roleItem>
Header,3;Overview,3;TM,3;Device,3;ioPlatform,3;LeakCheck,3;Sequence,3;Recipe,3;EventLog,3;ProcessHistory,3;RealTimeCharting,3;DataHistory,3;JobList,3;
Charting,3;Config,3;Account,3;Role,3;Runtime,3;Alarm,3;mainPM1,3;processPM1,3;ioPM1,3;motionPM1,3;heaterPM1,3;alarmPM1,3;MFCFlowPM1,3;mainPM2,3;
processPM2,3;ioPM2,3;motionPM2,3;heaterPM2,3;alarmPM2,3;MFCFlowPM2,3;Uid,3;Step,3;Name,3;Time,3;Growth Rate,3;1. Ar/H2 Switch,3;2. SH Total Flow,3;
3. Carray Gas Flow (M40),3;4. SH Total Flow Split Ratio,3;5. Flow Set Mode,3;6. Pressure Set,3;7. Rotation Set,3;8. PSU Control Mode,3;9. PSU Set Mode,3;
10. SCR Control Mode,3;11. SCR Set Mode,3;12. PSU Inner Temp Set,3;13. PSU Middle Temp Set,3;14. PSU Outer Temp Set,3;15. SCR Temp Set,3;
16. PSU Inner Ratio Set,3;17. PSU Middle Ratio Set,3;18. PSU Outer Ratio Set,3;19. SCR Upper Ratio Set,3;20. SCR Middle Ratio Set,3;21. SCR Lower Ratio Set,3;
22. Si Source Total Flow,3;23. SiH4 Flow Mode,3;24. SiH4 Flow (M14),3;25. TCS Flow Mode,3;26. TCS Bubb Low Flow (M11),3;27. TCS Bubb High Flow (M10),3;
28. TCS Push Flow (M12),3;29. TCS Bubb Pressure (PC3),3;30. HCl Flow Mode,3;31. HCl Flow (M13),3;32. Si Source Split Ratio,3;33. Si Source Push Pressure (PC6),3;
34. Si Source Inner Flow (M23),3;35. Si Source Middle Flow (M22),3;36. Si Source Outer Flow (M9),3;37. C Source Total Flow,3;38. C2H4 Flow Mode,3;
39. C2H4 Flow (M16),3;42. C Source Split Ratio,3;43. C Source Push Pressure (PC7),3;44. C Source Inner Flow (M26),3;45. C Source Middle Flow (M25),3;
46. C Source Outer Flow (M15),3;47. Dope Total Flow,3;48. N2 Flow Mode,3;49. N2 Actual Flow,3;50. N2 Low Flow (M4),3;51. Dilut Flow For N2 (M3),3;
52. Diluted N2 Flow (M6),3;53. N2 Post Dilut Pressure (PC1),3;54. N2 High Flow Mode,3;55. N2 High Flow (M5),3;56. TMA Flow Mode,3;57. TMA Bubb Flow (M7),3;
58. TMA Push Flow (M8),3;59. TMA Bubb Pressure (PC2),3;60. Dope Split Ratio,3;61. Dope Push Pressure (PC5),3;62. Dope Inner Flow (M20),3;
63. Dope Middle Flow (M19),3;64. Dope Outer Flow (M2),3;65. SH Push Total Flow,3;66. SH Inner Flow,3;67. SH Middle Flow,3;68. SH Outer Flow,3;
69. Inner Push Flow (M29),3;70. Middle Push Flow (M31),3;71. Outer Push Flow (M28),3;72. SH Purge Flow (M27),3;73. Optic Purge Flow (M33),3;
74. GasRing Purge Flow (M32),3;75. Chamber Purge Flow (M35),3;76. Rotation-Up Purge Flow (M36),3;77. Shutter Purge Flow (M37),3;
78. Heater-WF Purge Flow (M38),3;79. Total Vent Flow,3;80. Vent Push Flow (M1),3;81. Vent Pre-Exhaust Pressure (PC4),3;Operation.Overview.Operation,3;
Operation.Overview.RunningMode,3;PM1.Main.ReactorStatus,3;PM1.Main.ReactorService,3;PM1.Process.Steps,3;Platform.Mainframe.PM1,3;
Platform.Mainframe.Buffer,3;Platform.Mainframe.LL,3;Platform.Mainframe.TM,3;Platform.Mainframe.PreHeat,3;Recipe.Behaviour.AllowEditCellAccessPerm,3;
Recipe.Behaviour.ShowValuesInRecipeEditor,3;Recipe.Behaviour.ShowValueInProcessView,3;Recipe.Behaviour.AllowSaveInProcessView,3;
Recipe.Behaviour.AllowRipInProcessView,3;Step1,3;Step2,3;Step3,3;Step4,3;Step5,3;Step6,3;Step7,3;Step8,3;Step9,3;Step10,3;Step11,3;Step12,3;Step13,3;Step14,3;
Step15,3;Step16,3;Step17,3;Step18,3;Step19,3;Step20,3;Step21,3;Step22,3;Step23,3;Step24,3;Step25,3;Step26,3;Step27,3;Step28,3;Step29,3;Step30,3;Step31,3;
Step32,3;Step33,3;Step34,3;Step35,3;Step36,3;Step37,3;Step38,3;Step39,3;Step40,3;Step41,3;Step42,3;Step43,3;Step44,3;Step45,3;Step46,3;Step47,3;Step48,3;
Step49,3;Step50,3;
</roleItem>
</roles>
<users>

View File

@ -138,7 +138,7 @@
<configs name="Temperature_ControlMode">
<configs name="PSUControlMode">
<config default="Pyro" name="Default" description="Default Value" max="" min="" paramter="Pyro;Power" tag="ReadOnlySelection" unit="" type="String" visible="true"/>
<config default="PyroAuto" name="Default" description="Default Value" max="" min="" paramter="PyroAuto;PyroFollow;Power" tag="ReadOnlySelection" unit="" type="String"/>
</configs>
<configs name="PSUSetMode">
@ -638,11 +638,11 @@
<config default="Sic\Routine\Isolation" name="IsolationFileName" description="Isolation Routine文件路径" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />
<config default="Sic\Routine\LeakCheck" name="LeakCheckFileName" description="LeakCheck Routine文件路径" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />
<config default="Sic\Routine\Abort" name="AbortFileName" description="Abort Routine文件路径" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />
<config default="" name="OpenLidCountDownTime" description="临时保存开腔倒计时开始时间" max="" min="" paramter="" tag="" visible="true" unit="" type="String" />
<config default="" name="OpenLidCountDownTime" description="临时保存开腔倒计时开始时间" max="" min="" paramter="" tag="" visible="true" unit="" type="String"/>
<config default="false" name="TMAEnable" description="TMA是否选装" max="" min="" paramter="" tag="" unit="" type="Bool" />
<configs name="Heater">
<config default="false" name="PSUOuterAutoEnable" description="PSU Outer是否为Auto控制" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
<config default="false" name="PSUOuterAutoEnable" description="PSU Outer是否为Auto控制" max="" min="" paramter="" tag="" unit="" type="Bool" visible="false"/>
<config default="10" name="TempRampRate" description="TC温度每秒调节速率(℃/每秒)" max="100" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="0.1" name="AmpereRampRate" description="TC1功率每秒调节速率(%/每秒)" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="0.1" name="KWRampRate" description="TC2功率每秒调节速率(%/每秒)" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
@ -658,17 +658,13 @@
<config default="1600" name="SCRTempHighLimit" description="SCR Temp High Limit(℃)" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="600" name="SCRTempLowLimit" description="SCR Temp Low Limit(℃)" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="1600" name="PSUVoltageHighLimit" description="PSU Voltage High Limit(V)" max="2000" min="0" paramter="" tag="" unit="V" type="Double" />
<config default="-100" name="PSUVoltageLowLimit" description="PSU Voltage Low Limit(V)" max="2000" min="-100" paramter="" tag="" unit="V" type="Double" />
<config default="1600" name="SCRVoltageHighLimit" description="SCR Voltage High Limit(V)" max="2000" min="0" paramter="" tag="" unit="V" type="Double" />
<config default="-100" name="SCRVoltageLowLimit" description="SCR Voltage Low Limit(V)" max="2000" min="-100" paramter="" tag="" unit="V" type="Double" />
<config default="1000" name="PSU1ResistanceMax" description="Max PSU Inner Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="1000" name="PSU2ResistanceMax" description="Max PSU Middle Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="1000" name="PSU3ResistanceMax" description="Max PSU Outer Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="1000" name="SCR1ResistanceMax" description="Max SCR Upper Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="1000" name="SCR2ResistanceMax" description="Max SCR Middle Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="1000" name="SCR3ResistanceMax" description="Max SCR Lower Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="1600" name="PSUCurrentHighLimit" description="PSU Current High Limit(A)" max="2000" min="0" paramter="" tag="" unit="A" type="Double" />
<config default="-100" name="PSUCurrentLowLimit" description="PSU Current Low Limit(A)" max="2000" min="-100" paramter="" tag="" unit="A" type="Double" />
<config default="1600" name="SCRCurrentHighLimit" description="SCR Current High Limit(A)" max="2000" min="0" paramter="" tag="" unit="A" type="Double" />
<config default="-100" name="SCRCurrentLowLimit" description="SCR Current Low Limit(A)" max="2000" min="-100" paramter="" tag="" unit="A" type="Double" />
<config default="false" name="AETempRasingFastIsAlarm" description="AETemp温度上升过快报警类型为Alarm" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
<config default="100" name="SCRTempRasingRate" description="SCRTemp每秒的上升速率,超过此范围报警" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="100" name="AETempMiddleRasingRate" description="AETemp Middle每秒的上升速率,超过此范围报警" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
@ -744,7 +740,7 @@
<config default="300" name="RoutineTimeOut" description="Routine超时时间" max="10000" min="0" paramter="" tag="" unit="s" type="Integer" />
</configs>
<configs name="VacIdle">
<configs name="VacIdle" visible="false">
<config default="0" name="PumpPressure" description="PumpPressure" max="1100" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="300" name="RoutineTimeOut" description="Routine超时时间" max="10000" min="0" paramter="" tag="" unit="s" type="Integer" />
</configs>
@ -1045,7 +1041,7 @@
<config default="10" name="AlarmRange" description="Alarm Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true"/>
<config default="10" name="WarningTime" description="Warning Time" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true"/>
<config default="5" name="WarningRange" description="Warning Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<config default="1000" name="DefaultSetPoint" description="DefaultSetPoint" max="20000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="1500" name="DefaultSetPoint" description="DefaultSetPoint" max="30000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="H2" name="GasName" description="Gas Name" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="10" name="StableTime" description="Stable Time" max="10000" min="0" paramter="" tag="" unit="s" type="Double" visible="true"/>
</configs>
@ -1056,7 +1052,7 @@
<config default="10" name="AlarmRange" description="Alarm Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true"/>
<config default="10" name="WarningTime" description="Warning Time" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true"/>
<config default="5" name="WarningRange" description="Warning Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<config default="2500" name="DefaultSetPoint" description="DefaultSetPoint" max="50000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="1500" name="DefaultSetPoint" description="DefaultSetPoint" max="30000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="H2" name="GasName" description="Gas Name" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="10" name="StableTime" description="Stable Time" max="10000" min="0" paramter="" tag="" unit="s" type="Double" visible="true"/>
</configs>
@ -1067,7 +1063,7 @@
<config default="10" name="AlarmRange" description="Alarm Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true"/>
<config default="10" name="WarningTime" description="Warning Time" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true"/>
<config default="5" name="WarningRange" description="Warning Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<config default="500" name="DefaultSetPoint" description="DefaultSetPoint" max="10000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="750" name="DefaultSetPoint" description="DefaultSetPoint" max="15000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="H2" name="GasName" description="Gas Name" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="10" name="StableTime" description="Stable Time" max="10000" min="0" paramter="" tag="" unit="s" type="Double" visible="true"/>
</configs>
@ -1078,7 +1074,7 @@
<config default="10" name="AlarmRange" description="Alarm Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true"/>
<config default="10" name="WarningTime" description="Warning Time" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true"/>
<config default="5" name="WarningRange" description="Warning Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<config default="1500" name="DefaultSetPoint" description="DefaultSetPoint" max="30000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="1000" name="DefaultSetPoint" description="DefaultSetPoint" max="20000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="H2" name="GasName" description="Gas Name" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="10" name="StableTime" description="Stable Time" max="10000" min="0" paramter="" tag="" unit="s" type="Double" visible="true"/>
</configs>
@ -1346,7 +1342,7 @@
<configs name="Heater">
<config default="false" name="PSUOuterAutoEnable" description="PSU Outer是否为Auto控制" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
<config default="false" name="PSUOuterAutoEnable" description="PSU Outer是否为Auto控制" max="" min="" paramter="" tag="" unit="" type="Bool" visible="false"/>
<config default="10" name="TempRampRate" description="TC温度每秒调节速率(℃/每秒)" max="100" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="0.1" name="AmpereRampRate" description="TC1功率每秒调节速率(%/每秒)" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="0.1" name="KWRampRate" description="TC2功率每秒调节速率(%/每秒)" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
@ -1362,16 +1358,13 @@
<config default="1600" name="SCRTempHighLimit" description="SCR Temp High Limit(℃)" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="600" name="SCRTempLowLimit" description="SCR Temp Low Limit(℃)" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="1600" name="PSUVoltageHighLimit" description="PSU Voltage High Limit(V)" max="2000" min="0" paramter="" tag="" unit="V" type="Double" />
<config default="-100" name="PSUVoltageLowLimit" description="PSU Voltage Low Limit(V)" max="2000" min="-100" paramter="" tag="" unit="V" type="Double" />
<config default="1600" name="SCRVoltageHighLimit" description="SCR Voltage High Limit(V)" max="2000" min="0" paramter="" tag="" unit="V" type="Double" />
<config default="-100" name="SCRVoltageLowLimit" description="SCR Voltage Low Limit(V)" max="2000" min="-100" paramter="" tag="" unit="V" type="Double" />
<config default="1600" name="PSUCurrentHighLimit" description="PSU Current High Limit(A)" max="2000" min="0" paramter="" tag="" unit="A" type="Double" />
<config default="-100" name="PSUCurrentLowLimit" description="PSU Current Low Limit(A)" max="2000" min="-100" paramter="" tag="" unit="A" type="Double" />
<config default="1600" name="SCRCurrentHighLimit" description="SCR Current High Limit(A)" max="2000" min="0" paramter="" tag="" unit="A" type="Double" />
<config default="-100" name="SCRCurrentLowLimit" description="SCR Current Low Limit(A)" max="2000" min="-100" paramter="" tag="" unit="A" type="Double" />
<config default="1000" name="PSU1ResistanceMax" description="Max PSU Inner Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="1000" name="PSU2ResistanceMax" description="Max PSU Middle Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="1000" name="PSU3ResistanceMax" description="Max PSU Outer Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="1000" name="SCR1ResistanceMax" description="Max SCR Upper Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="1000" name="SCR2ResistanceMax" description="Max SCR Middle Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="1000" name="SCR3ResistanceMax" description="Max SCR Lower Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="false" name="AETempRasingFastIsAlarm" description="AETemp温度上升过快报警类型为Alarm" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
<config default="100" name="SCRTempRasingRate" description="SCRTemp每秒的上升速率,超过此范围报警" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="100" name="AETempMiddleRasingRate" description="AETemp Middle每秒的上升速率,超过此范围报警" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
@ -1447,7 +1440,7 @@
<config default="300" name="RoutineTimeOut" description="Routine超时时间" max="10000" min="0" paramter="" tag="" unit="s" type="Integer" />
</configs>
<configs name="VacIdle">
<configs name="VacIdle" visible="false">
<config default="0" name="PumpPressure" description="PumpPressure" max="1100" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="300" name="RoutineTimeOut" description="Routine超时时间" max="10000" min="0" paramter="" tag="" unit="s" type="Integer" />
</configs>
@ -1748,7 +1741,7 @@
<config default="10" name="AlarmRange" description="Alarm Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true"/>
<config default="10" name="WarningTime" description="Warning Time" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true"/>
<config default="5" name="WarningRange" description="Warning Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<config default="1000" name="DefaultSetPoint" description="DefaultSetPoint" max="20000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="1500" name="DefaultSetPoint" description="DefaultSetPoint" max="30000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="H2" name="GasName" description="Gas Name" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="10" name="StableTime" description="Stable Time" max="10000" min="0" paramter="" tag="" unit="s" type="Double" visible="true"/>
</configs>
@ -1759,7 +1752,7 @@
<config default="10" name="AlarmRange" description="Alarm Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true"/>
<config default="10" name="WarningTime" description="Warning Time" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true"/>
<config default="5" name="WarningRange" description="Warning Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<config default="2500" name="DefaultSetPoint" description="DefaultSetPoint" max="50000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="1500" name="DefaultSetPoint" description="DefaultSetPoint" max="30000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="H2" name="GasName" description="Gas Name" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="10" name="StableTime" description="Stable Time" max="10000" min="0" paramter="" tag="" unit="s" type="Double" visible="true"/>
</configs>
@ -1770,7 +1763,7 @@
<config default="10" name="AlarmRange" description="Alarm Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true"/>
<config default="10" name="WarningTime" description="Warning Time" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true"/>
<config default="5" name="WarningRange" description="Warning Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<config default="500" name="DefaultSetPoint" description="DefaultSetPoint" max="10000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="750" name="DefaultSetPoint" description="DefaultSetPoint" max="15000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="H2" name="GasName" description="Gas Name" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="10" name="StableTime" description="Stable Time" max="10000" min="0" paramter="" tag="" unit="s" type="Double" visible="true"/>
</configs>
@ -1781,7 +1774,7 @@
<config default="10" name="AlarmRange" description="Alarm Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true"/>
<config default="10" name="WarningTime" description="Warning Time" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true"/>
<config default="5" name="WarningRange" description="Warning Range" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<config default="1500" name="DefaultSetPoint" description="DefaultSetPoint" max="30000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="1000" name="DefaultSetPoint" description="DefaultSetPoint" max="20000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="H2" name="GasName" description="Gas Name" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="10" name="StableTime" description="Stable Time" max="10000" min="0" paramter="" tag="" unit="s" type="Double" visible="true"/>
</configs>
@ -2167,7 +2160,7 @@
</configs>
<configs name="LoadLock">
<config default="false" name="EnableLift" description="是否带升降" max="" min="" paramter="" tag="" unit="" visible="false" type="Bool" />
<config default="false" name="EnableLift" description="是否带升降" max="" min="" paramter="" tag="" unit="" type="Bool" visible="false"/>
<config default="true" name="IsVerifyDoorEnabled" description="TM是否set atm door" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
<config default="120" name="PostTransferTimeout" description="post transfer time out" max="1000" min="0" paramter="" tag="" unit="s" type="Integer" />
<config default="960" name="AtmPressureBase" description="判断大气压的时候,压力值需要大于该值" max="1200" min="0" paramter="" tag="" unit="mbar" type="Double" />
@ -2182,11 +2175,11 @@
<config default="600" name="WaitPumpTimeout" description="等待真空泵的时间" max="10000" min="0" paramter="" tag="" unit="s" type="Integer" />
<config default="180" name="DefaultCoolingTime" description="默认在LL的冷却时间" max="10000" min="5" paramter="" tag="" unit="s" type="Integer" />
<config default="100" name="WarnTemprature" description="高于此温度需要报Warnning" max="900" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="10" name="HomeTimeout" description="home time out" max="600" min="1" paramter="" tag="" unit="s" type="Integer" />
<config default="10" name="LiftMoveTimeOut" description="LiftMoveTimeOut" max="600" min="1" paramter="" tag="" unit="s" type="Integer" />
<config default="10" name="ClawMoveTimeOut" description="ClawMoveTimeOut" max="600" min="1" paramter="" tag="" unit="s" type="Integer" />
<config default="true" name="EnableCCDCheck" description="Wafer和Tray组合后是否启用CCD检测" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="true" name="EnableDistanceSensorCheck" description="Wafer和Tray组合后是否启用测距Sensor检测" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="10" name="HomeTimeout" description="home time out" max="600" min="1" paramter="" tag="" unit="s" type="Integer" visible="false"/>
<config default="10" name="LiftMoveTimeOut" description="LiftMoveTimeOut" max="600" min="1" paramter="" tag="" unit="s" type="Integer" visible="false"/>
<config default="10" name="ClawMoveTimeOut" description="ClawMoveTimeOut" max="600" min="1" paramter="" tag="" unit="s" type="Integer" visible="false"/>
<config default="true" name="EnableCCDCheck" description="Wafer和Tray组合后是否启用CCD检测" max="" min="" paramter="" tag="" unit="" type="Bool" visible="false" />
<config default="true" name="EnableDistanceSensorCheck" description="Wafer和Tray组合后是否启用测距Sensor检测" max="" min="" paramter="" tag="" unit="" type="Bool" visible="false"/>
<config default="false" name="TrayPresenceCheckEnable" description="传盘后检查Load腔Tray是否存在 Sensor" max="" min="" paramter="" tag="" unit="" type="Bool" />
<configs name="Home">
<config default="250" name="RoutineTimeOut" description="Routine超时时间" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />

View File

@ -1855,7 +1855,7 @@ namespace SicRT.Modules
&& _buffer.NoTray(0)
&& _buffer.NoWafer(0)
&& (_buffer.CheckWaferNextStepIsThis(ModuleName.TMRobot, 0)
|| _pm1.HasTray(0) || _pm1.HasWafer(0)))
|| _pm1.HasTray(0) || _pm1.HasWafer(0) || !_pm1.CheckTempBelow900()))
{
bufferEmptySlot = new SlotItem(ModuleName.Buffer, 0);
}
@ -1863,7 +1863,7 @@ namespace SicRT.Modules
&& _buffer.NoTray(1)
&& _buffer.NoWafer(1)
&& (_buffer.CheckWaferNextStepIsThis(ModuleName.TMRobot, 0)
|| _pm2.HasTray(0) || _pm2.HasWafer(0)))
|| _pm2.HasTray(0) || _pm2.HasWafer(0) || !_pm2.CheckTempBelow900()))
{
bufferEmptySlot = new SlotItem(ModuleName.Buffer, 1);
}

View File

@ -46,12 +46,6 @@ namespace SicRT.Modules
}
var lstModules = new List<IModuleDevice>();
//var EFEM = Singleton<EquipmentManager>.Instance.Modules[ModuleName.EFEM] as EFEMModule;
//if (EFEM.IsInstalled)
//{
// lstA.Add(Singleton<EquipmentManager>.Instance.Modules[ModuleName.EFEM] as IModuleDevice);
// dicModules.Add(EFEM.Module, EFEM.IsBusy);
//}
_lstModules.Add(lstA);
@ -63,13 +57,6 @@ namespace SicRT.Modules
dicModules.Add(ll.Module, ll.IsBusy);
}
//var unLoad = Singleton<EquipmentManager>.Instance.Modules[ModuleName.UnLoad] as UnLoadModule;
//if (unLoad.IsInstalled)
//{
// lstModules.Add(Singleton<EquipmentManager>.Instance.Modules[ModuleName.UnLoad] as IModuleDevice);
// dicModules.Add(unLoad.Module, unLoad.IsBusy);
//}
var buffer = Singleton<EquipmentManager>.Instance.Modules[ModuleName.Buffer] as BufferModule;
if (buffer.IsInstalled)
{
@ -91,34 +78,6 @@ namespace SicRT.Modules
dicModules.Add(pm2.Module, pm2.IsBusy);
}
//var aligner = Singleton<EquipmentManager>.Instance.Modules[ModuleName.Aligner] as AlignerModule;
//if (aligner.IsInstalled)
//{
// lstModules.Add(Singleton<EquipmentManager>.Instance.Modules[ModuleName.Aligner] as IModuleDevice);
// dicModules.Add(aligner.Module, aligner.IsBusy);
//}
//var cassAL = Singleton<EquipmentManager>.Instance.Modules[ModuleName.CassAL] as CassetteModule;
//if (cassAL.IsInstalled)
//{
// lstModules.Add(Singleton<EquipmentManager>.Instance.Modules[ModuleName.CassAL] as IModuleDevice);
// dicModules.Add(cassAL.Module, cassAL.IsBusy);
//}
//var cassAR = Singleton<EquipmentManager>.Instance.Modules[ModuleName.CassAR] as CassetteModule;
//if (cassAR.IsInstalled)
//{
// lstModules.Add(Singleton<EquipmentManager>.Instance.Modules[ModuleName.CassAR] as IModuleDevice);
// dicModules.Add(cassAR.Module, cassAR.IsBusy);
//}
//var cassBL = Singleton<EquipmentManager>.Instance.Modules[ModuleName.CassBL] as CassetteModule;
//if (cassBL.IsInstalled)
//{
// lstModules.Add(Singleton<EquipmentManager>.Instance.Modules[ModuleName.CassBL] as IModuleDevice);
// dicModules.Add(cassBL.Module, cassBL.IsBusy);
//}
_lstModules.Add(lstModules);

View File

@ -65,9 +65,10 @@ namespace SicRT.Scheduler
_taskHand = hand;
_target = target;
LogTaskStart(_task, $"{target}.{slot + 1}=>{Module}.{hand}");
}
return true;
}
}
return true;
}
public bool Place(ModuleName target, int slot, Hand hand)
{
@ -77,9 +78,10 @@ namespace SicRT.Scheduler
_taskHand = hand;
_target = target;
LogTaskStart(_task, $"{Module}.{hand}=>{target}.{slot + 1}");
}
return true;
}
}
return true;
}
public bool Goto(ModuleName chamber, int slot, Hand hand)
{

View File

@ -53,9 +53,10 @@ namespace SicRT.Scheduler
_task = TaskType.Pick;
_taskHand = hand;
LogTaskStart(_task, $"{target}.{slot + 1}=>{Module}.{hand}");
}
return true;
}
}
return true;
}
public bool Place(ModuleName target, int slot, Hand hand)
{
@ -64,9 +65,10 @@ namespace SicRT.Scheduler
_task = TaskType.Place;
_taskHand = hand;
LogTaskStart(_task, $"{Module}.{hand}=>{target}.{slot + 1}");
}
return true;
}
}
return true;
}
public bool Goto(ModuleName chamber, int slot, Hand hand)
{

View File

@ -57,9 +57,10 @@ namespace SicRT.Scheduler
_task = TaskType.Pick;
_taskHand = hand;
LogTaskStart(_task, $"{target}.WaferRobot.{slot + 1}=>{Module}.{hand}");
}
return true;
}
}
return true;
}
public bool Place(ModuleName target, int slot, Hand hand)
{
@ -68,9 +69,10 @@ namespace SicRT.Scheduler
_task = TaskType.Place;
_taskHand = hand;
LogTaskStart(_task, $"{Module}.WaferRobot.{hand}=>{target}.{slot + 1}");
}
return true;
}
}
return true;
}
public bool Map(ModuleName target)
{
@ -78,9 +80,10 @@ namespace SicRT.Scheduler
{
_task = TaskType.Map;
LogTaskStart(_task, $"{Module}.WaferRobot Map");
}
return true;
}
}
return true;
}
public bool Goto(ModuleName chamber, int slot, Hand hand)
{

View File

@ -51,7 +51,7 @@ using System.Windows;
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
// 方法是按如下所示使用“*”: :
[assembly: AssemblyVersion("1.0.3.3")]
[assembly: AssemblyFileVersion("1.0.3.3")]
[assembly: AssemblyVersion("1.0.5.10")]
[assembly: AssemblyFileVersion("1.0.5.10")]

View File

@ -9,6 +9,41 @@
Sic 系统更新历史记录
---------------------------------------------------------------------------------
Sic05 2023-02-10 Version 1.0.5.10
1.解决Process过程中切换PyroFollow Outer比例不跟随问题
2.解决PM SCREnable Interlock存在的问题
3.增加PM Service模式下不准切换Online功能
4.ProcessAbort Rounite中增加等待MFC流量到达再往下执行
5.ProcessAbort Routine中增加关闭V72打开V25流程
6.解决Monitor界面PSU PryoFollow模式显示问题
7.解决AutoRun时TMRobot从Load取Tray后若PM温度未到传盘温度TMRobot未放Tray至Buffer等待问题
Sic05 2023-02-10 Version 1.0.4.9
1.修改电阻报警名称
2.解决保存Sequence时Recipe路径问题
Sic05 2023-02-10 Version 1.0.4.8
1.TM界面所有Module Online及Offline按钮权限放开
2.增加Recipe每个Step都可设置PSU Outer是否跟随Middle控温功能
Sic05 2023-02-10 Version 1.0.4.7
1.PM增加DO_SCR1Enable、DO_SCR2Enable、DO_SCR3Enable Interlock
2.整理System配置参数删除VacIdle参数及Load中不需要的参数
3.修改PM气路图的V72阀的气路走向错误
Sic05 2023-02-07 Version 1.0.4.6
1.开放Final阀DI-FB显示方便调试观察
Sic05 2023-01-28 Version 1.0.4.5
1.修改权限相关默认值
Sic05 2022-12-28 Version 1.0.4.4
1.所有模块Online切Offline不设置条件
2.解决TM的一些Routine开始时会关闭Load的快抽阀的BUG
3.优化等待磁流体转速问题
4.隔热罩在转速转起来后延时5s再升起方便观察Tray是否放好
5.TM界面各模块阀的Enable由各模块Offline决定
Sic05 2022-12-14 Version 1.0.3.3
1.点表中隐藏PM DO-64、65、67、68

View File

@ -164,11 +164,11 @@
<DI_ITEM Index="265" Name="DI_TowerRedFB" BufferOffset="265" Addr="265" Description="" Visible ="false"/>
<DI_ITEM Index="266" Name="DI_BuzzerFB" BufferOffset="266" Addr="266" Description="" Visible ="false"/>
<DI_ITEM Index="271" Name="DI_ConfinementRingDrvRstFB" BufferOffset="271" Addr="271" Description="" Visible ="false"/>
<DI_ITEM Index="272" Name="DI_InnerGasFinalFB(V89)" BufferOffset="272" Addr="272" Description="" Visible ="false"/>
<DI_ITEM Index="273" Name="DI_MiddleGasFinalFB(V90)" BufferOffset="273" Addr="273" Description="" Visible ="false"/>
<DI_ITEM Index="274" Name="DI_OpticPurgeFinalFB(V91)" BufferOffset="274" Addr="274" Description="" Visible ="false"/>
<DI_ITEM Index="275" Name="DI_GasRingPurgeFinalFB(V92)" BufferOffset="275" Addr="275" Description="" Visible ="false"/>
<DI_ITEM Index="276" Name="DI_ChamberPurgeFinalFB(V93)" BufferOffset="276" Addr="276" Description="" Visible ="false"/>
<DI_ITEM Index="272" Name="DI_InnerGasFinalFB(V89)" BufferOffset="272" Addr="272" Description="" Visible ="true"/>
<DI_ITEM Index="273" Name="DI_MiddleGasFinalFB(V90)" BufferOffset="273" Addr="273" Description="" Visible ="true"/>
<DI_ITEM Index="274" Name="DI_OpticPurgeFinalFB(V91)" BufferOffset="274" Addr="274" Description="" Visible ="true"/>
<DI_ITEM Index="275" Name="DI_GasRingPurgeFinalFB(V92)" BufferOffset="275" Addr="275" Description="" Visible ="true"/>
<DI_ITEM Index="276" Name="DI_ChamberPurgeFinalFB(V93)" BufferOffset="276" Addr="276" Description="" Visible ="true"/>
<DI_ITEM Index="277" Name="DI_RotationUpPurgeFinalFB(V94)" BufferOffset="277" Addr="277" Description="" Visible ="false"/>
<DI_ITEM Index="278" Name="DI_ConfinementRingFinalFB(V95)" BufferOffset="278" Addr="278" Description="" Visible ="false"/>
<DI_ITEM Index="279" Name="DI_HeaterWFFinalFB(V96)" BufferOffset="279" Addr="279" Description="" Visible ="false"/>

View File

@ -188,8 +188,7 @@
Width="80"
Height="25"
Margin="10,0"
Content="Online"
IsEnabled="{Binding PM1OnlineButtonEnable}">
Content="Online">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOnline">
@ -203,8 +202,7 @@
Width="80"
Height="25"
Margin="10,0"
Content="Offline"
IsEnabled="{Binding PM1OfflineButtonEnable}">
Content="Offline">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOffline">
@ -592,8 +590,7 @@
Width="80"
Height="25"
Margin="10,0"
Content="Online"
IsEnabled="{Binding PM2OnlineButtonEnable}">
Content="Online">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOnline">
@ -607,8 +604,7 @@
Width="80"
Height="25"
Margin="10,0"
Content="Offline"
IsEnabled="{Binding PM2OfflineButtonEnable}">
Content="Offline">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOffline">
@ -1451,8 +1447,7 @@
Width="80"
Height="25"
Margin="10,0"
Content="Online"
IsEnabled="{Binding IsLLOnlineButtonEnable}">
Content="Online">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOnline">
@ -1466,8 +1461,7 @@
Width="80"
Height="25"
Margin="10,0"
Content="Offline"
IsEnabled="{Binding IsLLOfflineButtonEnable}">
Content="Offline">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOffline">
@ -2704,7 +2698,7 @@
Canvas.Top="90"
DeviceData="{Binding TMPMBBanlance}"
EnableServiceControl="True"
IsEnabled="{Binding IsEnableManual}"
IsEnabled="{Binding PM2TMValveIsEnable}"
ValveOpenOrientation="Vertical"
Visibility="{Binding IsPM2Installed, Converter={StaticResource BoolVisibilityConverter}}" />
<deviceControl:AITGasValve
@ -2712,7 +2706,7 @@
Canvas.Top="90"
DeviceData="{Binding TMPMABanlance}"
EnableServiceControl="True"
IsEnabled="{Binding IsEnableManual}"
IsEnabled="{Binding PM1TMValveIsEnable}"
ValveOpenOrientation="Vertical" />
<!--<deviceControl:AITGasValve
Canvas.Left="236"
@ -2726,28 +2720,28 @@
Canvas.Top="442"
DeviceData="{Binding TMFastRough}"
EnableServiceControl="True"
IsEnabled="{Binding IsEnableManual}"
IsEnabled="{Binding TMValveIsEnable}"
ValveOpenOrientation="Vertical" />
<deviceControl:AITGasValve
Canvas.Left="436"
Canvas.Top="444"
DeviceData="{Binding LLSlowRough}"
EnableServiceControl="True"
IsEnabled="{Binding IsEnableManual}"
IsEnabled="{Binding LoadValveIsEnable}"
ValveOpenOrientation="Vertical" />
<deviceControl:AITGasValve
Canvas.Left="395"
Canvas.Top="444"
DeviceData="{Binding LLFastRough}"
EnableServiceControl="True"
IsEnabled="{Binding IsEnableManual}"
IsEnabled="{Binding LoadValveIsEnable}"
ValveOpenOrientation="Vertical" />
<deviceControl:AITGasValve
Canvas.Left="614"
Canvas.Top="334"
DeviceData="{Binding LoadLockVent}"
EnableServiceControl="True"
IsEnabled="{Binding IsEnableManual}"
IsEnabled="{Binding LoadValveIsEnable}"
ValveOpenOrientation="Horizontal" />
<deviceControl:AITGasValve
Canvas.Left="614"
@ -2764,21 +2758,21 @@
Canvas.Top="276"
DeviceData="{Binding TMLoadBanlance}"
EnableServiceControl="True"
IsEnabled="{Binding IsEnableManual}"
IsEnabled="{Binding LoadTMValveIsEnable}"
ValveOpenOrientation="Vertical" />
<deviceControl:AITGasValve
Canvas.Left="340"
Canvas.Top="442"
DeviceData="{Binding TMSlowRough}"
EnableServiceControl="True"
IsEnabled="{Binding IsEnableManual}"
IsEnabled="{Binding TMValveIsEnable}"
ValveOpenOrientation="Vertical" />
<deviceControl:AITGasValve
Canvas.Left="581"
Canvas.Top="-94"
DeviceData="{Binding TMVent}"
EnableServiceControl="True"
IsEnabled="{Binding IsEnableManual}" />
IsEnabled="{Binding TMValveIsEnable}" />
<!--<deviceControl:AITGasValve
Canvas.Left="449"
Canvas.Top="-125"
@ -2971,8 +2965,7 @@
Width="80"
Height="25"
Margin="10,0"
Content="Online"
IsEnabled="{Binding IsTMOnlineButtonEnable}">
Content="Online">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOnline">
@ -2986,8 +2979,7 @@
Width="80"
Height="25"
Margin="10,0"
Content="Offline"
IsEnabled="{Binding IsTMOfflineButtonEnable}">
Content="Offline">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOffline">
@ -3460,8 +3452,7 @@
Width="80"
Height="25"
Margin="10,0"
Content="Online"
IsEnabled="{Binding IsBufferOnlineButtonEnable}">
Content="Online">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOnline">
@ -3475,8 +3466,7 @@
Width="80"
Height="25"
Margin="10,0"
Content="Offline"
IsEnabled="{Binding IsBufferOfflineButtonEnable}">
Content="Offline">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetOffline">

View File

@ -25,15 +25,20 @@ namespace SicUI.Client.Models.Platform.TM
[Subscription("TM.Status")]
public string Status { get; set; }
[Subscription("TM.IsOnline")]
public bool IsOnline { get; set; }
[Subscription("Rt.Status")]
public string RtStatus { get; set; }
public bool IsEnableManual => Status == "Idle" || Status == "Init" && !IsOnline ;
public bool EnableWaferClick => RtStatus == "Idle";
public bool LLEnableWaferClick => true;
public bool IsServiceMode => !IsOnline;
public bool LoadValveIsEnable => !LLIsOnline;
public bool TMValveIsEnable => !TMIsOnline;
public bool PM1TMValveIsEnable => !PM1IsOnline && !TMIsOnline;
public bool PM2TMValveIsEnable => !PM2IsOnline && !TMIsOnline;
public bool LoadTMValveIsEnable => !LLIsOnline && !TMIsOnline;
#region Properties

View File

@ -18,6 +18,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using static Aitex.Core.RT.Device.PmDevices.DicMode;
namespace SicUI.Models.PMs
{
@ -591,13 +592,9 @@ namespace SicUI.Models.PMs
public void SetHeaterMode(string TCname, object data)
{
float ControlMode = 0;
switch (SelectedHeaterMode)
{
case "Power": ControlMode = 0; break;
case "TC": ControlMode = 1; break;
case "Pyro": ControlMode = 2; break;
}
HeaterControlMode PSUControlMode = (HeaterControlMode)Enum.Parse(typeof(HeaterControlMode), SelectedHeaterMode);
float ControlMode = (float)PSUControlMode;
InvokeClient.Instance.Service.DoOperation($"{SystemName}.{TCname}.SetHeaterMode", ControlMode);
}

View File

@ -1336,7 +1336,7 @@
x:Name="TextL2Ratio"
FontFamily="Arial"
FontSize="14"
Text="100" />
Text="0" />
</Border>
<Border
@ -3274,7 +3274,7 @@
x:Name="TextL2Ratio2"
FontFamily="Arial"
FontSize="14"
Text="100" />
Text="0" />
</Border>
<Border

View File

@ -23,6 +23,7 @@ using System.Windows.Media;
using Aitex.Core.RT.Event;
using Aitex.Core.RT.SCCore;
using Timer = System.Timers.Timer;
using static Aitex.Core.RT.Device.PmDevices.DicMode;
namespace SicUI.Models.PMs
{
@ -219,7 +220,7 @@ namespace SicUI.Models.PMs
[Subscription("TC1.L3TempLowLimitSetPoint")]
public float L3TempLowLimit { get; set; }
private List<string> _HeaterModeGroup = new List<string>() { "Power", "Pyro" };
private List<string> _HeaterModeGroup = new List<string>() { "Power", "PyroAuto", "PyroFollow" };
public List<string> HeaterModeGroup
{
get { return _HeaterModeGroup; }
@ -230,15 +231,10 @@ namespace SicUI.Models.PMs
{
get
{
switch (HeaterMode)
{
case 0: return "Power";
case 1: return "Pyro";
}
return "Power";
return ((HeaterControlMode)HeaterMode).ToString();
}
}
private string _SelectedHeaterMode;
public string SelectedHeaterMode
{
@ -611,12 +607,9 @@ namespace SicUI.Models.PMs
public void SetHeaterMode(string TCname, object data)
{
float ControlMode = 0;
switch (SelectedHeaterMode)
{
case "Power": ControlMode = 0; break;
case "Pyro": ControlMode = 1; break;
}
HeaterControlMode PSUControlMode = (HeaterControlMode)Enum.Parse(typeof(HeaterControlMode), SelectedHeaterMode);
float ControlMode = (float)PSUControlMode;
InvokeClient.Instance.Service.DoOperation($"{SystemName}.{TCname}.SetHeaterMode", ControlMode);
}

View File

@ -2751,6 +2751,27 @@
</industrialcontrol:PipeLine.RenderTransform>
</industrialcontrol:PipeLine>
<industrialcontrol:PipeLine
Canvas.Left="1362"
Canvas.Top="647"
Width="57"
Height="{StaticResource ResourceKey=Pipe_Height}"
CenterColor="{StaticResource ResourceKey=CenterColorWhite}"
EdgeColor="{StaticResource ResourceKey=CenterColorWhite}"
FlowDirection="RightToLeft"
LeftDirection="None"
MoveSpeed="{Binding V36MoveSpeed}"
RightDirection="None">
<industrialcontrol:PipeLine.RenderTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform Angle="90" />
<TranslateTransform />
</TransformGroup>
</industrialcontrol:PipeLine.RenderTransform>
</industrialcontrol:PipeLine>
<!--<control:PipeControl GasColor="Yellow" Canvas.Left="1252" Canvas.Top="534" Height="19.994" PipeType="Horizontal" Width="35" />-->
<!--<control:PipeControl GasColor="Yellow" Canvas.Left="1277" Canvas.Top="544" Height="177" PipeType="Vertical" Width="19.994" />-->
<industrialcontrol:PipeLine
@ -2841,7 +2862,7 @@
<industrialcontrol:PipeLine
Canvas.Left="1286"
Canvas.Top="646"
Width="121"
Width="76"
Height="{StaticResource ResourceKey=Pipe_Height}"
HorizontalAlignment="Center"
VerticalAlignment="Top"
@ -2851,6 +2872,20 @@
LeftDirection="None"
MoveSpeed="{Binding V72MoveSpeed}"
RightDirection="None" />
<industrialcontrol:PipeLine
Canvas.Left="1362"
Canvas.Top="702"
Width="45"
Height="{StaticResource ResourceKey=Pipe_Height}"
HorizontalAlignment="Center"
VerticalAlignment="Top"
CenterColor="{StaticResource ResourceKey=CenterColorWhite}"
EdgeColor="{StaticResource ResourceKey=CenterColorWhite}"
FlowDirection="RightToLeft"
LeftDirection="None"
MoveSpeed="{Binding V72MoveSpeed}"
RightDirection="None" />
<industrialcontrol:PipeLine
Canvas.Left="1253"
Canvas.Top="611"
@ -2869,7 +2904,7 @@
<industrialcontrol:PipeLine
Canvas.Left="1262"
Canvas.Top="702"
Width="145"
Width="100"
Height="{StaticResource ResourceKey=Pipe_Height}"
HorizontalAlignment="Center"
VerticalAlignment="Top"

View File

@ -27,6 +27,7 @@ using Sicentury.Core;
using System.Text;
using MECF.Framework.UI.Client.CenterViews.Editors;
using Action = System.Action;
using static Aitex.Core.RT.Device.PmDevices.DicMode;
namespace SicUI.Models.PMs
{
@ -478,7 +479,7 @@ namespace SicUI.Models.PMs
});
u.dgCustom.FrozenColumnCount = 5;
u.dgCustom.FrozenColumnCount = 6;
base.OnViewLoaded(view);
}
@ -507,6 +508,8 @@ namespace SicUI.Models.PMs
DisplayingRecipeName = recipeName;
SelectedRecipe = recipeName;
InvokeClient.Instance.Service.DoOperation($"{SystemName}.SelectRecipe", recipeName);
InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"PM.{SystemName}.LastRecipeName",
recipeName);
@ -1008,13 +1011,8 @@ namespace SicUI.Models.PMs
{
get
{
switch (TC1HeaterMode)
{
case 0: return "Power";
case 1: return "Pyro";
}
return "Power";
int mode = (int)TC1HeaterMode;
return Enum.GetName(typeof(HeaterControlMode), mode);
}
}

View File

@ -486,7 +486,7 @@ namespace SicUI.Models.RecipeEditors
u.dgCustom.LostFocus += DgCustom_LostFocus;
u.dgCustom.CellEditEnding += DgCustomOnCellEditEnding;
u.dgCustom.LoadingRow += DgCustomOnLoadingRow;
u.dgCustom.FrozenColumnCount = 5;
u.dgCustom.FrozenColumnCount = 6;
}
private void DgCustomOnLoadingRow(object sender, DataGridRowEventArgs e)
@ -506,7 +506,7 @@ namespace SicUI.Models.RecipeEditors
// ValidateEntireRecipe();
if (SelectedRecipeSteps != null && SelectedRecipeSteps.Count == 1)
{
CalRecipeParameterForRunVent(SelectedRecipeSteps[0]);
SelectedRecipeSteps[0].CalRecipeParameterForRunVent();
CheckIfAllCellsValid(out _);
}
}
@ -516,7 +516,7 @@ namespace SicUI.Models.RecipeEditors
// ValidateEntireRecipe();
if (SelectedRecipeSteps != null && SelectedRecipeSteps.Count == 1)
{
CalRecipeParameterForRunVent(SelectedRecipeSteps[0]);
SelectedRecipeSteps[0].CalRecipeParameterForRunVent();
CheckIfAllCellsValid(out _);
}
}
@ -565,23 +565,11 @@ namespace SicUI.Models.RecipeEditors
(int)((DoubleParam)currentStep[(int)RecipColNo.StepTime]).Value;
}
var stepTime = ((DoubleParam)currentStep[(int)RecipColNo.StepTime]).Value;
PurgeRunSwitch(previousStep, currentStep, nextStep);
NotInstallDevice(currentStep);
currentStep.CalRecipeParameterForRunVent(); // 自动计算比例值
currentStep.Validate(); // 校验单元格
if (stepTime > 0)
{
CalRecipeParameterForRunVent(currentStep);
}
// 校验单元格内容
foreach (var param in currentStep)
{
if (param is IParam p)
p.Validate();
}
}
//如果是Routine则在下面代码不执行在这里返回
@ -723,541 +711,7 @@ namespace SicUI.Models.RecipeEditors
_isTmaNotInstall = true;
}
#region Gas Flow Calculation
private static double GetTcsFlow(RecipeStep currentStep, string selectedChamber)
{
var currentTcsBubbleLowFlow = ((DoubleParam)currentStep[(int)RecipColNo.TCSBubbLowFlow]).Value;
var currentTcsBubbleHighFlow = ((DoubleParam)currentStep[(int)RecipColNo.TCSBubbHighFlow]).Value;
var currentTcsPushFlow = ((DoubleParam)currentStep[(int)RecipColNo.TCSPushFlow]).Value;
var currentTcsFlowMode = (currentStep[(int)RecipColNo.TCSFlowMode] as ComboxParam)?.Value;
var tcsFlow = 0d;
var tcsEff =
(double)QueryDataClient.Instance.Service.GetConfig($"PM.{selectedChamber}.Efficiency.TCS-Eff");
if (string.Equals(currentTcsFlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase)
|| string.Equals(currentTcsFlowMode, FlowModeParam.FlowModeEnum.Vent.ToString(),
StringComparison.OrdinalIgnoreCase))
{
tcsFlow = (currentTcsBubbleHighFlow + currentTcsBubbleLowFlow) * tcsEff + currentTcsPushFlow;
}
else if (string.Equals(currentTcsFlowMode, FlowModeParam.FlowModeEnum.Purge.ToString(),
StringComparison.OrdinalIgnoreCase))
{
tcsFlow = currentTcsBubbleHighFlow + currentTcsBubbleLowFlow + currentTcsPushFlow;
}
return tcsFlow;
}
private static double GetTmaFlow(RecipeStep currentStep, string selectedChamber)
{
var currentTmaBubbleFlow = ((DoubleParam)currentStep[(int)RecipColNo.TMABubbFlow]).Value;
var currentTmaPushFlow = ((DoubleParam)currentStep[(int)RecipColNo.TMAPushFlow]).Value;
var currentTmaFlowMode = ((ComboxParam)currentStep[(int)RecipColNo.TMAFlowMode]).Value;
var tmaFlow = 0d;
var tmaEff =
(double)QueryDataClient.Instance.Service.GetConfig($"PM.{selectedChamber}.Efficiency.TMA-Eff");
if (string.Equals(currentTmaFlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase)
|| string.Equals(currentTmaFlowMode, FlowModeParam.FlowModeEnum.Vent.ToString(),
StringComparison.OrdinalIgnoreCase))
tmaFlow = currentTmaBubbleFlow * tmaEff + currentTmaPushFlow;
else if (string.Equals(currentTmaFlowMode, FlowModeParam.FlowModeEnum.Purge.ToString(),
StringComparison.OrdinalIgnoreCase))
tmaFlow = currentTmaBubbleFlow + currentTmaPushFlow;
return tmaFlow;
}
private static void CalSiSourceFlow(RecipeStep currentStep)
{
var currentSiSourSplitRatio = new double[3];
if (currentStep[(int)RecipColNo.SiSourceSplitRatio] is Sets3RatioParam siSourceRatio)
currentSiSourSplitRatio = siSourceRatio.Ratio;
var currentSiSourTotalFlow = ((DoubleParam)currentStep[(int)RecipColNo.SiSourceTotalFlow]).Value;
//double currentSiSourPushFlow = currentSiSourTotalFlow - (currentSiH4FlowMode == FlowMode.Run.ToString() ? currentSiH4Flow : 0)
// - (currentTCSFlowMode == FlowMode.Run.ToString() ? TCSFlow : 0) - (currentHClFlowMode == FlowMode.Run.ToString() ? currentHClFlow : 0);
//(currentStep[(int)RecipColNo.SiSourceOuterFlow] as DoubleParam).Value = currentSiSourPushFlow.ToString("F1");
double currentSiSourInnerFlow = 0;
double currentSiSourMidFlow = 0;
double currentSiSourOutFlow = 0;
if (currentSiSourSplitRatio.Length == 3)
{
var rationSum = currentSiSourSplitRatio[0] + currentSiSourSplitRatio[1] + currentSiSourSplitRatio[2];
currentSiSourInnerFlow = currentSiSourTotalFlow / rationSum * currentSiSourSplitRatio[0];
currentSiSourMidFlow = currentSiSourTotalFlow / rationSum * currentSiSourSplitRatio[1];
currentSiSourOutFlow = currentSiSourTotalFlow / rationSum * currentSiSourSplitRatio[2];
}
((DoubleParam)currentStep[(int)RecipColNo.SiSourceInnerFlow]).Value = Math.Round(currentSiSourInnerFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.SiSourceMiddleFlow]).Value = Math.Round(currentSiSourMidFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.SiSourceOuterFlow]).Value = Math.Round(currentSiSourOutFlow, 1);
}
private static void CalCSourceFlow(RecipeStep currentStep)
{
var currentC2H4Flow = ((DoubleParam)currentStep[(int)RecipColNo.C2H4Flow]).Value;
var currentCSourSplitRatio = new double[3];
if (currentStep[(int)RecipColNo.CSourceSplitRatio] is Sets3RatioParam cSourceRatio)
currentCSourSplitRatio = cSourceRatio.Ratio;
var currentCSourTotalFlow = ((DoubleParam)currentStep[(int)RecipColNo.CSourceTotalFlow]).Value;
var currentC2H4FlowMode = (currentStep[(int)RecipColNo.C2H4FlowMode] as ComboxParam)?.Value;
var currentCSourPushFlow = currentCSourTotalFlow -
(string.Equals(currentC2H4FlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase)
? currentC2H4Flow
: 0d);
((DoubleParam)currentStep[(int)RecipColNo.CSourceOuterFlow]).Value = Math.Round(currentCSourPushFlow, 1);
double currentCSourInnerFlow = 0;
double currentCSourMidFlow = 0;
double currentCSourOuterFlow = 0;
if (currentCSourSplitRatio.Length == 3)
{
var ratioSum = currentCSourSplitRatio[0] + currentCSourSplitRatio[1] + currentCSourSplitRatio[2];
currentCSourInnerFlow = currentCSourTotalFlow / ratioSum * currentCSourSplitRatio[0];
currentCSourMidFlow = currentCSourTotalFlow / ratioSum * currentCSourSplitRatio[1];
currentCSourOuterFlow = currentCSourTotalFlow / ratioSum * currentCSourSplitRatio[2];
}
((DoubleParam)currentStep[(int)RecipColNo.CSourceInnerFlow]).Value = Math.Round(currentCSourInnerFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.CSourceMiddleFlow]).Value = Math.Round(currentCSourMidFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.CSourceOuterFlow]).Value = Math.Round(currentCSourOuterFlow, 1);
}
private static void CalDopeFlow(RecipeStep currentStep)
{
var currentDopeTotalFlow = ((DoubleParam)currentStep[(int)RecipColNo.DopeTotalFlow]).Value;
var currentN2ActualFlow = ((DoubleParam)currentStep[(int)RecipColNo.N2ActualFlow]).Value;
var currentN2LowFlow = ((DoubleParam)currentStep[(int)RecipColNo.N2LowFlow]).Value;
var currentDiluFlowForN2 = ((DoubleParam)currentStep[(int)RecipColNo.DilutFlowForN2]).Value;
var currentDilutedN2Flow =
(currentN2LowFlow + currentDiluFlowForN2) * currentN2ActualFlow / currentN2LowFlow;
((DoubleParam)currentStep[(int)RecipColNo.DilutedN2Flow]).Value = Math.Round(currentDilutedN2Flow, 1);
var currentDopeSplitRatio = new double[3];
if (currentStep[(int)RecipColNo.DopeSplitRatio] is Sets3RatioParam dopRatio)
currentDopeSplitRatio = dopRatio.Ratio;
//double currentDopePushFlow = currentDopeTotalFlow
// - (currentN2FlowMode == FlowMode.Run.ToString() ? currentDilutedN2Flow : 0)
// - (currentN2HighFlowMode == FlowMode.Run.ToString() ? currentN2HighFlow : 0)
// - (currentTMAFlowMode == FlowMode.Run.ToString() ? TMAFlow : 0);
//(currentStep[(int)RecipColNo.DopeOuterFlow] as DoubleParam).Value = currentDopePushFlow.ToString("F1");
double currentDopeInnerFlow = 0;
double currentDopeMidFlow = 0;
double currentDopeOuterFlow = 0;
if (currentDopeSplitRatio.Length == 3)
{
var ratioSum = currentDopeSplitRatio[0] + currentDopeSplitRatio[1] + currentDopeSplitRatio[2];
currentDopeInnerFlow = currentDopeTotalFlow / ratioSum * currentDopeSplitRatio[0];
currentDopeMidFlow = currentDopeTotalFlow / ratioSum * currentDopeSplitRatio[1];
currentDopeOuterFlow = currentDopeTotalFlow / ratioSum * currentDopeSplitRatio[2];
}
((DoubleParam)currentStep[(int)RecipColNo.DopeInnerFlow]).Value = Math.Round(currentDopeInnerFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.DopeMiddleFlow]).Value = Math.Round(currentDopeMidFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.DopeOuterFlow]).Value = Math.Round(currentDopeOuterFlow, 1);
}
private static void CalShSupplementFlow(RecipeStep currentStep)
{
var currentSiSourTotalFlow = ((DoubleParam)currentStep[(int)RecipColNo.SiSourceTotalFlow]).Value;
var currentCSourTotalFlow = ((DoubleParam)currentStep[(int)RecipColNo.CSourceTotalFlow]).Value;
var currentDopeTotalFlow = ((DoubleParam)currentStep[(int)RecipColNo.DopeTotalFlow]).Value;
var currentShTotalFlow = ((DoubleParam)currentStep[(int)RecipColNo.SHTotalFlow]).Value;
var currentSurroundingFlow = ((DoubleParam)currentStep[(int)RecipColNo.CarrayGasFlow]).Value;
var currentSiSourInnerFlow = ((DoubleParam)currentStep[(int)RecipColNo.SiSourceInnerFlow]).Value;
var currentSiSourMidFlow = ((DoubleParam)currentStep[(int)RecipColNo.SiSourceMiddleFlow]).Value;
var currentCSourInnerFlow = ((DoubleParam)currentStep[(int)RecipColNo.CSourceInnerFlow]).Value;
var currentCSourMidFlow = ((DoubleParam)currentStep[(int)RecipColNo.CSourceMiddleFlow]).Value;
var currentDopeInnerFlow = ((DoubleParam)currentStep[(int)RecipColNo.DopeInnerFlow]).Value;
var currentDopeMidFlow = ((DoubleParam)currentStep[(int)RecipColNo.DopeMiddleFlow]).Value;
var currentShTotalFlowSplitRatio = new double[3];
if (currentStep[(int)RecipColNo.SHTotalFlowSplitRatio] is Sets3RatioParam shTotalRatio)
currentShTotalFlowSplitRatio = shTotalRatio.Ratio;
var currentShSuppTotalFlow = currentShTotalFlow - currentSurroundingFlow - currentSiSourTotalFlow -
currentCSourTotalFlow - currentDopeTotalFlow;
var sumShTotalFlowSplitRatio = currentShTotalFlowSplitRatio[0] + currentShTotalFlowSplitRatio[1] +
currentShTotalFlowSplitRatio[2];
var currentShInnerFlow = (currentShTotalFlow - currentSurroundingFlow) / sumShTotalFlowSplitRatio *
currentShTotalFlowSplitRatio[0];
var currentShMidFlow = (currentShTotalFlow - currentSurroundingFlow) / sumShTotalFlowSplitRatio *
currentShTotalFlowSplitRatio[1];
var currentShOutterFlow = (currentShTotalFlow - currentSurroundingFlow) / sumShTotalFlowSplitRatio *
currentShTotalFlowSplitRatio[2];
var currentInnerSuppFlow = currentShInnerFlow - currentSiSourInnerFlow - currentCSourInnerFlow -
currentDopeInnerFlow;
var currentMidSuppFlow = currentShMidFlow - currentSiSourMidFlow - currentCSourMidFlow - currentDopeMidFlow;
var currentOutterSuppFlow = currentShSuppTotalFlow - currentInnerSuppFlow - currentMidSuppFlow;
((DoubleParam)currentStep[(int)RecipColNo.SHPushTotalFlow]).Value = Math.Round(currentShSuppTotalFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.SHInnerFlow]).Value = Math.Round(currentShInnerFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.SHMiddleFlow]).Value = Math.Round(currentShMidFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.SHOuterFlow]).Value = Math.Round(currentShOutterFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.InnerPushFlow]).Value = Math.Round(currentInnerSuppFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.MiddlePushFlow]).Value = Math.Round(currentMidSuppFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.OuterPushFlow]).Value = Math.Round(currentOutterSuppFlow, 1);
}
private static void CalVentFlow(RecipeStep currentStep, string selectedChamber)
{
var currentSiH4Flow = ((DoubleParam)currentStep[(int)RecipColNo.SiH4Flow]).Value;
var currentTotalVentFlow = ((DoubleParam)currentStep[(int)RecipColNo.TotalVentFlow]).Value;
var currentHClFlow = ((DoubleParam)currentStep[(int)RecipColNo.HCLFlow]).Value;
var currentN2HighFlow = ((DoubleParam)currentStep[(int)RecipColNo.N2HighFlow]).Value;
var currentC2H4Flow = ((DoubleParam)currentStep[(int)RecipColNo.C2H4Flow]).Value;
var currentDilutedN2Flow = ((DoubleParam)currentStep[(int)RecipColNo.DilutedN2Flow]).Value;
var currentN2FlowMode = ((ComboxParam)currentStep[(int)RecipColNo.N2FlowMode]).Value;
var currentN2HighFlowMode = ((ComboxParam)currentStep[(int)RecipColNo.N2HighFlowMode]).Value;
var currentSiH4FlowMode = (currentStep[(int)RecipColNo.SiH4FlowMode] as ComboxParam)?.Value;
var currentTcsFlowMode = (currentStep[(int)RecipColNo.TCSFlowMode] as ComboxParam)?.Value;
var currentHClFlowMode = (currentStep[(int)RecipColNo.HCLFlowMode] as ComboxParam)?.Value;
var currentC2H4FlowMode = (currentStep[(int)RecipColNo.C2H4FlowMode] as ComboxParam)?.Value;
var currentTmaFlowMode = ((ComboxParam)currentStep[(int)RecipColNo.TMAFlowMode]).Value;
var tcsFlow = GetTcsFlow(currentStep, selectedChamber);
var tmaFlow = GetTmaFlow(currentStep, selectedChamber);
var currentSiSourTotalFlowForPurge =
(string.Equals(currentSiH4FlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? currentSiH4Flow
: 0d)
+ (string.Equals(currentTcsFlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? tcsFlow
: 0d) +
(string.Equals(currentHClFlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? currentHClFlow
: 0d);
var currentCSourTotalFlowForPurge =
string.Equals(currentC2H4FlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? currentC2H4Flow
: 0d;
var n2Flow = (string.Equals(currentN2FlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? currentDilutedN2Flow
: 0d) +
(string.Equals(currentN2HighFlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? currentN2HighFlow
: 0d);
var currentDopeTotalFlowForPurge = n2Flow + (string.Equals(currentTmaFlowMode,
FlowModeParam.FlowModeEnum.Run.ToString(), StringComparison.OrdinalIgnoreCase) == false
? tmaFlow
: 0d);
var currentVentPushFlow = currentTotalVentFlow - currentSiSourTotalFlowForPurge -
currentCSourTotalFlowForPurge - currentDopeTotalFlowForPurge;
((DoubleParam)currentStep[(int)RecipColNo.VentPushFlow]).Value = Math.Round(currentVentPushFlow, 1);
}
private void CalRecipeParameterForRunVent(RecipeStep currentStep)
{
/*if (!(currentStep.StepTime > 0))
return;*/
CalSiSourceFlow(currentStep);
CalCSourceFlow(currentStep);
CalDopeFlow(currentStep);
CalShSupplementFlow(currentStep);
CalVentFlow(currentStep, CurrentRecipe.Module);
}
[Obsolete("该函数已废除,请使用分步计算函数。")]
private void CalRecipeParameterForRunVent(RecipeStep previousStep,
IReadOnlyList<Param> currentStep, double stepTime)
{
#region SH Total flow
var currentShTotalFlow = ((DoubleParam)currentStep[(int)RecipColNo.SHTotalFlow]).Value;
var currentSurroundingFlow = ((DoubleParam)currentStep[(int)RecipColNo.CarrayGasFlow]).Value;
var currentShTotalFlowSplitRatio = new double[3];
if (currentStep[(int)RecipColNo.SHTotalFlowSplitRatio] is Sets3RatioParam shTotalRatio)
currentShTotalFlowSplitRatio = shTotalRatio.Ratio;
#endregion
#region Si Source
var currentSiH4Flow = ((DoubleParam)currentStep[(int)RecipColNo.SiH4Flow]).Value;
var currentTcsBubbleLowFlow = ((DoubleParam)currentStep[(int)RecipColNo.TCSBubbLowFlow]).Value;
var currentTcsBubbleHighFlow = ((DoubleParam)currentStep[(int)RecipColNo.TCSBubbHighFlow]).Value;
var currentTcsPushFlow = ((DoubleParam)currentStep[(int)RecipColNo.TCSPushFlow]).Value;
var currentHClFlow = ((DoubleParam)currentStep[(int)RecipColNo.HCLFlow]).Value;
var currentSiSourSplitRatio = new double[3];
if (currentStep[(int)RecipColNo.SiSourceSplitRatio] is Sets3RatioParam siSourceRatio)
currentSiSourSplitRatio = siSourceRatio.Ratio;
var currentSiSourTotalFlow = ((DoubleParam)currentStep[(int)RecipColNo.SiSourceTotalFlow]).Value;
var currentSiH4FlowMode = (currentStep[(int)RecipColNo.SiH4FlowMode] as ComboxParam)?.Value;
var currentTcsFlowMode = (currentStep[(int)RecipColNo.TCSFlowMode] as ComboxParam)?.Value;
var currentHClFlowMode = (currentStep[(int)RecipColNo.HCLFlowMode] as ComboxParam)?.Value;
double tcsFlow = 0d;
var tcsEff =
(double)QueryDataClient.Instance.Service.GetConfig($"PM.{SelectedChamber}.Efficiency.TCS-Eff");
if (string.Equals(currentTcsFlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase)
|| string.Equals(currentTcsFlowMode, FlowModeParam.FlowModeEnum.Vent.ToString(),
StringComparison.OrdinalIgnoreCase))
{
tcsFlow = (currentTcsBubbleHighFlow + currentTcsBubbleLowFlow) * tcsEff + currentTcsPushFlow;
}
else if (string.Equals(currentTcsFlowMode, FlowModeParam.FlowModeEnum.Purge.ToString(),
StringComparison.OrdinalIgnoreCase))
{
tcsFlow = currentTcsBubbleHighFlow + currentTcsBubbleLowFlow + currentTcsPushFlow;
}
//double currentSiSourPushFlow = currentSiSourTotalFlow - (currentSiH4FlowMode == FlowMode.Run.ToString() ? currentSiH4Flow : 0)
// - (currentTCSFlowMode == FlowMode.Run.ToString() ? TCSFlow : 0) - (currentHClFlowMode == FlowMode.Run.ToString() ? currentHClFlow : 0);
//(currentStep[(int)RecipColNo.SiSourceOuterFlow] as DoubleParam).Value = currentSiSourPushFlow.ToString("F1");
double currentSiSourInnerFlow = 0;
double currentSiSourMidFlow = 0;
double currentSiSourOutFlow = 0;
if (currentSiSourSplitRatio.Length == 3)
{
var rationSum = currentSiSourSplitRatio[0] + currentSiSourSplitRatio[1] + currentSiSourSplitRatio[2];
currentSiSourInnerFlow = currentSiSourTotalFlow / rationSum * currentSiSourSplitRatio[0];
currentSiSourMidFlow = currentSiSourTotalFlow / rationSum * currentSiSourSplitRatio[1];
currentSiSourOutFlow = currentSiSourTotalFlow / rationSum * currentSiSourSplitRatio[2];
}
((DoubleParam)currentStep[(int)RecipColNo.SiSourceInnerFlow]).Value = Math.Round(currentSiSourInnerFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.SiSourceMiddleFlow]).Value = Math.Round(currentSiSourMidFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.SiSourceOuterFlow]).Value = Math.Round(currentSiSourOutFlow, 1);
#endregion
#region C Source
var currentC2H4Flow = ((DoubleParam)currentStep[(int)RecipColNo.C2H4Flow]).Value;
var currentCSourSplitRatio = new double[3];
if (currentStep[(int)RecipColNo.CSourceSplitRatio] is Sets3RatioParam cSourceRatio)
currentCSourSplitRatio = cSourceRatio.Ratio;
var currentCSourTotalFlow = ((DoubleParam)currentStep[(int)RecipColNo.CSourceTotalFlow]).Value;
var currentC2H4FlowMode = (currentStep[(int)RecipColNo.C2H4FlowMode] as ComboxParam)?.Value;
var currentCSourPushFlow = currentCSourTotalFlow -
(string.Equals(currentC2H4FlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase)
? currentC2H4Flow
: 0d);
((DoubleParam)currentStep[(int)RecipColNo.CSourceOuterFlow]).Value = Math.Round(currentCSourPushFlow, 1);
double currentCSourInnerFlow = 0;
double currentCSourMidFlow = 0;
double currentCSourOuterFlow = 0;
if (currentCSourSplitRatio.Length == 3)
{
var ratioSum = currentCSourSplitRatio[0] + currentCSourSplitRatio[1] + currentCSourSplitRatio[2];
currentCSourInnerFlow = currentCSourTotalFlow / ratioSum * currentCSourSplitRatio[0];
currentCSourMidFlow = currentCSourTotalFlow / ratioSum * currentCSourSplitRatio[1];
currentCSourOuterFlow = currentCSourTotalFlow / ratioSum * currentCSourSplitRatio[2];
}
((DoubleParam)currentStep[(int)RecipColNo.CSourceInnerFlow]).Value = Math.Round(currentCSourInnerFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.CSourceMiddleFlow]).Value = Math.Round(currentCSourMidFlow, 1);
((DoubleParam)currentStep[(int)RecipColNo.CSourceOuterFlow]).Value = Math.Round(currentCSourOuterFlow, 1);
#endregion
#region Dope
var currentDopeTotalFlow = ((DoubleParam)currentStep[(int)RecipColNo.DopeTotalFlow]).Value;
var currentN2ActualFlow = ((DoubleParam)currentStep[(int)RecipColNo.N2ActualFlow]).Value;
var currentN2LowFlow = ((DoubleParam)currentStep[(int)RecipColNo.N2LowFlow]).Value;
var currentDiluFlowForN2 = ((DoubleParam)currentStep[(int)RecipColNo.DilutFlowForN2]).Value;
var currentN2HighFlow = ((DoubleParam)currentStep[(int)RecipColNo.N2HighFlow]).Value;
var currentTmaBubbFlow = ((DoubleParam)currentStep[(int)RecipColNo.TMABubbFlow]).Value;
var currentTmaPushFlow = ((DoubleParam)currentStep[(int)RecipColNo.TMAPushFlow]).Value;
var currentDilutedN2Flow =
(currentN2LowFlow + currentDiluFlowForN2) * currentN2ActualFlow / currentN2LowFlow;
((DoubleParam)currentStep[(int)RecipColNo.DilutedN2Flow]).Value = Math.Round(currentDilutedN2Flow, 1);
var currentDopeSplitRatio = new double[3];
if (currentStep[(int)RecipColNo.DopeSplitRatio] is Sets3RatioParam dopRatio)
currentDopeSplitRatio = dopRatio.Ratio;
var currentN2FlowMode = ((ComboxParam)currentStep[(int)RecipColNo.N2FlowMode]).Value;
var currentN2HighFlowMode = ((ComboxParam)currentStep[(int)RecipColNo.N2HighFlowMode]).Value;
var currentTmaFlowMode = ((ComboxParam)currentStep[(int)RecipColNo.TMAFlowMode]).Value;
double tmaFlow = 0;
var tmaEff =
(double)QueryDataClient.Instance.Service.GetConfig($"PM.{SelectedChamber}.Efficiency.TMA-Eff");
if (string.Equals(currentTmaFlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase)
|| string.Equals(currentTmaFlowMode, FlowModeParam.FlowModeEnum.Vent.ToString(),
StringComparison.OrdinalIgnoreCase))
tmaFlow = currentTmaBubbFlow * tmaEff + currentTmaPushFlow;
else if (string.Equals(currentTmaFlowMode, FlowModeParam.FlowModeEnum.Purge.ToString(),
StringComparison.OrdinalIgnoreCase))
tmaFlow = currentTmaBubbFlow + currentTmaPushFlow;
//double currentDopePushFlow = currentDopeTotalFlow
// - (currentN2FlowMode == FlowMode.Run.ToString() ? currentDilutedN2Flow : 0)
// - (currentN2HighFlowMode == FlowMode.Run.ToString() ? currentN2HighFlow : 0)
// - (currentTMAFlowMode == FlowMode.Run.ToString() ? TMAFlow : 0);
//(currentStep[(int)RecipColNo.DopeOuterFlow] as DoubleParam).Value = currentDopePushFlow.ToString("F1");
double currentDopeInnerFlow = 0;
double currentDopeMidFlow = 0;
double currentDopeOuterFlow = 0;
if (currentDopeSplitRatio.Length == 3)
{
var ratioSum = currentDopeSplitRatio[0] + currentDopeSplitRatio[1] + currentDopeSplitRatio[2];
currentDopeInnerFlow = currentDopeTotalFlow / ratioSum * currentDopeSplitRatio[0];
currentDopeMidFlow = currentDopeTotalFlow / ratioSum * currentDopeSplitRatio[1];
currentDopeOuterFlow = currentDopeTotalFlow / ratioSum * currentDopeSplitRatio[2];
}
(currentStep[(int)RecipColNo.DopeInnerFlow] as DoubleParam).Value = Math.Round(currentDopeInnerFlow, 1);
(currentStep[(int)RecipColNo.DopeMiddleFlow] as DoubleParam).Value = Math.Round(currentDopeMidFlow, 1);
(currentStep[(int)RecipColNo.DopeOuterFlow] as DoubleParam).Value = Math.Round(currentDopeOuterFlow, 1);
#endregion
#region SH Supp. Flow
var currentShSuppTotalFlow = currentShTotalFlow - currentSurroundingFlow - currentSiSourTotalFlow -
currentCSourTotalFlow - currentDopeTotalFlow;
var sumShTotalFlowSplitRatio = currentShTotalFlowSplitRatio[0] + currentShTotalFlowSplitRatio[1] +
currentShTotalFlowSplitRatio[2];
var currentShInnerFlow = (currentShTotalFlow - currentSurroundingFlow) / sumShTotalFlowSplitRatio *
currentShTotalFlowSplitRatio[0];
var currentShMidFlow = (currentShTotalFlow - currentSurroundingFlow) / sumShTotalFlowSplitRatio *
currentShTotalFlowSplitRatio[1];
var currentShOutterFlow = (currentShTotalFlow - currentSurroundingFlow) / sumShTotalFlowSplitRatio *
currentShTotalFlowSplitRatio[2];
var currentInnerSuppFlow = currentShInnerFlow - currentSiSourInnerFlow - currentCSourInnerFlow -
currentDopeInnerFlow;
var currentMidSuppFlow = currentShMidFlow - currentSiSourMidFlow - currentCSourMidFlow - currentDopeMidFlow;
var currentOutterSuppFlow = currentShSuppTotalFlow - currentInnerSuppFlow - currentMidSuppFlow;
(currentStep[(int)RecipColNo.SHPushTotalFlow] as DoubleParam).Value = Math.Round(currentShSuppTotalFlow, 1);
(currentStep[(int)RecipColNo.SHInnerFlow] as DoubleParam).Value = Math.Round(currentShInnerFlow, 1);
(currentStep[(int)RecipColNo.SHMiddleFlow] as DoubleParam).Value = Math.Round(currentShMidFlow, 1);
(currentStep[(int)RecipColNo.SHOuterFlow] as DoubleParam).Value = Math.Round(currentShOutterFlow, 1);
(currentStep[(int)RecipColNo.InnerPushFlow] as DoubleParam).Value = Math.Round(currentInnerSuppFlow, 1);
(currentStep[(int)RecipColNo.MiddlePushFlow] as DoubleParam).Value = Math.Round(currentMidSuppFlow, 1);
(currentStep[(int)RecipColNo.OuterPushFlow] as DoubleParam).Value = Math.Round(currentOutterSuppFlow, 1);
#endregion
#region Vent Flow
var currentTotalVentFlow = (currentStep[(int)RecipColNo.TotalVentFlow] as DoubleParam).Value;
var currentSiSourTotalFlowForPurge =
(string.Equals(currentSiH4FlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? currentSiH4Flow
: 0d)
+ (string.Equals(currentTcsFlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? tcsFlow
: 0d) +
(string.Equals(currentHClFlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? currentHClFlow
: 0d);
var currentCSourTotalFlowForPurge =
string.Equals(currentC2H4FlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? currentC2H4Flow
: 0d;
var n2Flow = (string.Equals(currentN2FlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? currentDilutedN2Flow
: 0d) +
(string.Equals(currentN2HighFlowMode, FlowModeParam.FlowModeEnum.Run.ToString(),
StringComparison.OrdinalIgnoreCase) == false
? currentN2HighFlow
: 0d);
var currentDopeTotalFlowForPurge = n2Flow + (string.Equals(currentTmaFlowMode,
FlowModeParam.FlowModeEnum.Run.ToString(), StringComparison.OrdinalIgnoreCase) == false
? tmaFlow
: 0d);
var currentVentPushFlow = currentTotalVentFlow - currentSiSourTotalFlowForPurge -
currentCSourTotalFlowForPurge - currentDopeTotalFlowForPurge;
(currentStep[(int)RecipColNo.VentPushFlow] as DoubleParam).Value = Math.Round(currentVentPushFlow, 1);
#endregion
}
#endregion
public void TabSelectionChanged()
{
UpdateRecipeFormat();

View File

@ -54,6 +54,6 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.3.3")]
[assembly: AssemblyFileVersion("1.0.3.3")]
[assembly: AssemblyVersion("1.0.5.10")]
[assembly: AssemblyFileVersion("1.0.5.10")]

File diff suppressed because it is too large Load Diff