系统配置中增加ResistanceLimitLog和ResistanceLimitTime参数。

PM的Process Routine中增加Heater电阻监测功能,当工艺中检测到Heater电阻超标,则根据配置终止工艺。
This commit is contained in:
SL 2023-07-26 00:46:25 +08:00
parent e12f3a1b7f
commit 35dc1421ce
3 changed files with 74 additions and 12 deletions

1
.gitignore vendored
View File

@ -363,3 +363,4 @@ MigrationBackup/
FodyWeavers.xsd
/.svn
FrameworkLocal/output/
.idea/

View File

@ -19,6 +19,8 @@ using System.Collections.Generic;
using System.Xml;
using static SicPM.PmDevices.DicMode;
using MECF.Framework.RT.Core.DBProviderEx;
using Aitex.Core.Common.DeviceData.IoDevice;
using MECF.Framework.Common.Fsm;
namespace SicPM.RecipeExecutions
{
@ -246,6 +248,62 @@ namespace SicPM.RecipeExecutions
return Result.RUN;
}
#region Heater Resistance Monitor
#region Heater Resistance Monitor
private readonly R_TRIG _trigHeaterResOutOfRange = new();
private void MonitorHeaterResistance()
{
var reason = "";
var totalElapseTime = PMDevice.RecipeRunningInfo.TotalElapseTime;//Recipe已经执行的时间
var totalTime = PMDevice.RecipeRunningInfo.TotalTime;//Recipe总时间
if (totalElapseTime == 0) //当开始执行后再去判断时间和电阻
return;
// 工艺刚开始和结束前的一段时间不用检测Heater电阻
var ignoredDurationSec = SC.GetValue<double>($"PM.{Module}.Heater.ResistanceLimitTime");
if (!(totalElapseTime > ignoredDurationSec) ||
(!(totalTime - totalElapseTime > ignoredDurationSec))) return;
// 如果在工艺中检测Heater电阻
for (var i = 1; i <= 3; i++) //检测出所有的加热丝是否有断开的,不要提前结束循环
{
var ioPsuData = (IoPsuData)(DATA.Poll($"{Module}.PSU{i}.DeviceData"));
if (ioPsuData != null)
{
if (ioPsuData.IsResistanceOutOfRange)//PSU加热丝断开,后续可能增加条件判断
reason += $"PSU{i} resistance value exceeds the upper limit , Resistance:{ioPsuData.Resistance}\r\n ";
}
var ioScrData = (IoPsuData)(DATA.Poll($"{Module}.SCR{i}.DeviceData"));
if (ioScrData != null)
{
if (ioScrData.IsResistanceOutOfRange)//SCR加热丝断开,后续可能增加条件判断
reason += $"SCR{i} resistance value exceeds the upper limit , Resistance:{ioScrData.Resistance}\r\n ";
}
}
if (reason.Length > 0)
{
// 某个加热器电阻超标
_trigHeaterResOutOfRange.CLK = true;
if (_trigHeaterResOutOfRange.Q)
{
var alarmLevel = SC.SafeGetStringValue($"PM.{Module}.Heater.ResistanceLimitLog", "Alarm");
if (alarmLevel == "Alarm")
Stop(reason);
else
EV.PostWarningLog(Module, reason);
}
}
}
#endregion
#endregion
public override Result Monitor()
{

View File

@ -77,18 +77,18 @@
<config default="960" name="AtmPressureBase" description="Atm Pressure Base" max="1100" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="302" name="VacuumPressureBase" description="Vacuum Pressure Base" max="1100" min="0" paramter="" tag="" unit="mbar" type="Double" />
<!--<config default="5" name="GasFlowTimeInMFCCalibration" description="Gas Flow Time In MFC Calibration" max="120" min="0" paramter="" tag="" unit="s" type="Double" />-->
<config default="false" name="IsAtmIdleRoutine" description="是否以Recipe的形式运行ATM Idle" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsVacIdleRoutine" description="是否以Recipe的形式运行VAC Idle" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsProcessIdleRoutine" description="是否Recipe的形式运行Process Idle" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsPumpRoutine" description="是否Recipe的形式运行Pump" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsVentRoutine" description="是否Recipe的形式运行Vent" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsPurgeRoutine" description="是否Recipe的形式运行Purge" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsCleanRoutine" description="是否Recipe的形式运行Clean" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsExchangeMOTCSRoutine" description="是否Recipe的形式运行ExchangeTCS" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsExchangeMOTMARoutine" description="是否Recipe的形式运行ExchangeTMA" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsIsolationRoutine" description="是否Recipe的形式运行Isolation" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsLeakCheckRoutine" description="是否Recipe的形式运行LeakCheck" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsAbortRoutine" description="是否Recipe的形式运行Abort" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsAtmIdleRoutine" description="是否以Recipe的形式运行ATM Idle" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsVacIdleRoutine" description="是否以Recipe的形式运行VAC Idle" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsProcessIdleRoutine" description="是否Recipe的形式运行Process Idle" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsPumpRoutine" description="是否Recipe的形式运行Pump" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsVentRoutine" description="是否Recipe的形式运行Vent" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsPurgeRoutine" description="是否Recipe的形式运行Purge" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsCleanRoutine" description="是否Recipe的形式运行Clean" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsExchangeMOTCSRoutine" description="是否Recipe的形式运行ExchangeTCS" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsExchangeMOTMARoutine" description="是否Recipe的形式运行ExchangeTMA" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsIsolationRoutine" description="是否Recipe的形式运行Isolation" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsLeakCheckRoutine" description="是否Recipe的形式运行LeakCheck" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="IsAbortRoutine" description="是否Recipe的形式运行Abort" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="180" name="LidEnableOpenAfterHeatDisbaleTime" description="在加热停止多少分钟后才能执行开腔" max="1000" min="1" paramter="" tag="" unit="Minute" type="Integer" />
<configs name="PM1">
<config default="Sic" name="RecipeChamberType" description="Recipe Chamber Type" max="" min="" paramter="" tag="" unit="" type="String" />
@ -177,6 +177,9 @@
<config default="1" name="SCR3ResistanceMax" description="Max SCR Lower Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
<config default="3" name="ResistanceCheckTimeOut" description="Resistance Check kTime Out" max="1000" min="0" paramter="" tag="" unit="s" type="Integer" />
<config default="Warning" name="ResistanceLimitLog" description="电阻异常提示等级" max="" min="" paramter="Alarm;Warning" tag="ReadOnlySelection" unit="" type="String"/>
<config default="0" name="ResistanceLimitTime" description="允许电阻极限时间,Recipe过程中去除开始和结尾" max="100" min="0" paramter="" tag="" unit="s" type="Double" />
<config default="false" name="AETempRasingFastIsAlarm" description="AETemp温度上升过快报警类型为Alarm" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
<config default="100" name="AETempInnerRasingRate" description="AETemp Inner每秒的上升速率,超过此范围报警" 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" />