修正Process过程中未监测加热器电阻的问题。
Process中开始和结束监测加热器电阻时,输出信息,方便调试。 重命名部分加热器电阻相关系统参数,使其表述的意义更加准确。
This commit is contained in:
parent
b784c0cb5b
commit
12d4895bad
|
@ -320,7 +320,7 @@ namespace SicPM.Devices
|
|||
{
|
||||
//检查电阻值是否在合理范围
|
||||
_resLimitMax = (float)SC.GetValue<double>($"PM.{Module}.Heater.{Name}ResistanceMax");
|
||||
var timeOut = SC.GetValue<int>($"PM.{Module}.Heater.ResistanceCheckTimeOut");
|
||||
var timeOut = SC.GetValue<int>($"PM.{Module}.Heater.ResistanceMonitorHysteresis");
|
||||
|
||||
if (Resistance > _resLimitMax && _timResOutOfRange.IsIdle())
|
||||
{
|
||||
|
|
|
@ -199,7 +199,7 @@ namespace SicPM.Devices
|
|||
{
|
||||
//检查电阻值是否在合理范围
|
||||
_resLimitMax = (float)SC.GetValue<double>($"PM.{Module}.Heater.{Name}ResistanceMax");
|
||||
var timeOut = SC.GetValue<int>($"PM.{Module}.Heater.ResistanceCheckTimeOut");
|
||||
var timeOut = SC.GetValue<int>($"PM.{Module}.Heater.ResistanceMonitorHysteresis");
|
||||
|
||||
if (Resistance > _resLimitMax && _timResOutOfRange.IsIdle())
|
||||
{
|
||||
|
|
|
@ -21,6 +21,7 @@ using static SicPM.PmDevices.DicMode;
|
|||
using MECF.Framework.RT.Core.DBProviderEx;
|
||||
using Aitex.Core.Common.DeviceData.IoDevice;
|
||||
using MECF.Framework.Common.Fsm;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace SicPM.RecipeExecutions
|
||||
{
|
||||
|
@ -242,17 +243,27 @@ namespace SicPM.RecipeExecutions
|
|||
_pc7Offset = SC.GetValue<double>($"PM.{Module}.PC7Offset");
|
||||
_tempOffset = SC.GetValue<double>($"PM.{Module}.Process.TempOffset");
|
||||
|
||||
ResetHeaterResCheckResult();
|
||||
|
||||
_thread.Start();
|
||||
|
||||
Notify($"Start");
|
||||
return Result.RUN;
|
||||
}
|
||||
|
||||
#region Heater Resistance Monitor
|
||||
|
||||
|
||||
#region Heater Resistance Monitor
|
||||
|
||||
private readonly R_TRIG _trigHeaterResOutOfRange = new();
|
||||
private readonly R_TRIG _trigHeaterResMonitorBegin = new();
|
||||
private readonly R_TRIG _trigHeaterResMonitorEnd = new();
|
||||
|
||||
|
||||
private void ResetHeaterResCheckResult()
|
||||
{
|
||||
_trigHeaterResOutOfRange.RST = true;
|
||||
_trigHeaterResMonitorBegin.RST = true;
|
||||
_trigHeaterResMonitorEnd.RST = true;
|
||||
}
|
||||
|
||||
private void MonitorHeaterResistance()
|
||||
{
|
||||
|
@ -263,26 +274,38 @@ namespace SicPM.RecipeExecutions
|
|||
if (totalElapseTime == 0) //当开始执行后再去判断时间和电阻
|
||||
return;
|
||||
|
||||
// 工艺刚开始和结束前的一段时间,不用检测Heater电阻
|
||||
var ignoredDurationSec = SC.GetValue<double>($"PM.{Module}.Heater.ResistanceLimitTime");
|
||||
if (!(totalElapseTime > ignoredDurationSec) ||
|
||||
(!(totalTime - totalElapseTime > ignoredDurationSec))) return;
|
||||
// 工艺刚开始和快结束的一段时间内,不需要检测电阻值。
|
||||
var ignoredDurationSec = SC.GetValue<double>($"PM.{Module}.Heater.InProcessResistanceMonitorIgnoreDuration");
|
||||
|
||||
// 开始监测和节结束监测电阻时,输出信息,方便调试。
|
||||
_trigHeaterResMonitorBegin.CLK = totalElapseTime >= ignoredDurationSec;
|
||||
_trigHeaterResMonitorEnd.CLK = totalTime - totalElapseTime < ignoredDurationSec;
|
||||
if(_trigHeaterResMonitorBegin.Q)
|
||||
Notify( "Begin Heater Resistance Monitor");
|
||||
if (_trigHeaterResMonitorEnd.Q)
|
||||
Notify("End Heater Resistance Monitor");
|
||||
|
||||
// 工艺刚开始和快结束的一段时间内,不需要检测电阻值。
|
||||
if (!_trigHeaterResMonitorBegin.M || _trigHeaterResMonitorEnd.M)
|
||||
return;
|
||||
|
||||
// 如果在工艺中,检测Heater电阻
|
||||
for (var i = 1; i <= 3; i++) //检测出所有的加热丝是否有断开的,不要提前结束循环
|
||||
{
|
||||
var ioPsuData = (IoPsuData)(DATA.Poll($"{Module}.PSU{i}.DeviceData"));
|
||||
var json = DATA.Poll($"{Module}.PSU{i}.DeviceData");
|
||||
var ioPsuData = JsonConvert.DeserializeObject<IoPsuData>(json.ToString());
|
||||
if (ioPsuData != null)
|
||||
{
|
||||
if (ioPsuData.IsResistanceOutOfRange)//PSU加热丝断开,后续可能增加条件判断
|
||||
reason += $"PSU{i} resistance value exceeds the upper limit , Resistance:{ioPsuData.Resistance}\r\n ";
|
||||
reason += $"PSU{i} resistance is out of range\r\n ";
|
||||
}
|
||||
|
||||
var ioScrData = (IoPsuData)(DATA.Poll($"{Module}.SCR{i}.DeviceData"));
|
||||
json = DATA.Poll($"{Module}.SCR{i}.DeviceData");
|
||||
var ioScrData = JsonConvert.DeserializeObject<IoPsuData>(json.ToString());
|
||||
if (ioScrData != null)
|
||||
{
|
||||
if (ioScrData.IsResistanceOutOfRange)//SCR加热丝断开,后续可能增加条件判断
|
||||
reason += $"SCR{i} resistance value exceeds the upper limit , Resistance:{ioScrData.Resistance}\r\n ";
|
||||
reason += $"SCR{i} resistance is out of range\r\n ";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -292,19 +315,15 @@ namespace SicPM.RecipeExecutions
|
|||
_trigHeaterResOutOfRange.CLK = true;
|
||||
if (_trigHeaterResOutOfRange.Q)
|
||||
{
|
||||
var alarmLevel = SC.SafeGetStringValue($"PM.{Module}.Heater.ResistanceLimitLog", "Alarm");
|
||||
var alarmLevel = SC.SafeGetStringValue($"PM.{Module}.Heater.InProcessResistanceFailAlarmLevel", "Alarm");
|
||||
if (alarmLevel == "Alarm")
|
||||
Stop(reason);
|
||||
else
|
||||
EV.PostWarningLog(Module, reason);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
public override Result Monitor()
|
||||
{
|
||||
if (!PMDevice.CheckEnableRunProcess(out string reason))
|
||||
|
@ -337,6 +356,8 @@ namespace SicPM.RecipeExecutions
|
|||
MonitorRecipeEndTime();
|
||||
|
||||
MonitorRecipeRunInfo();
|
||||
|
||||
MonitorHeaterResistance(); //加热丝断开检测
|
||||
|
||||
lock (_recipeLocker)
|
||||
{
|
||||
|
|
|
@ -175,10 +175,10 @@
|
|||
<config default="3" name="SCR1ResistanceMax" description="Max SCR Upper Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
|
||||
<config default="3" name="SCR2ResistanceMax" description="Max SCR Middle Resistance Max Limit" max="1000" min="0" paramter="" tag="" unit="Ω" type="Double" />
|
||||
<config default="3" 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="3" name="ResistanceMonitorHysteresis" description="电阻检测迟滞时间,当电阻持续超限指定时间后,再产生报警" 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="Warning" name="InProcessResistanceFailAlarmLevel" description="工艺过程中检测到电阻超限时产生报警的等级" max="" min="" paramter="Alarm;Warning" tag="ReadOnlySelection" unit="" type="String"/>
|
||||
<config default="3" name="InProcessResistanceMonitorIgnoreDuration" description="工艺启动后和结束前的指定时间内忽略电阻超限检查" 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" />
|
||||
|
|
Loading…
Reference in New Issue