diff --git a/Modules/SicPM/Devices/IoPSU.cs b/Modules/SicPM/Devices/IoPSU.cs index ca4d1e8..5867d51 100644 --- a/Modules/SicPM/Devices/IoPSU.cs +++ b/Modules/SicPM/Devices/IoPSU.cs @@ -320,7 +320,7 @@ namespace SicPM.Devices { //检查电阻值是否在合理范围 _resLimitMax = (float)SC.GetValue($"PM.{Module}.Heater.{Name}ResistanceMax"); - var timeOut = SC.GetValue($"PM.{Module}.Heater.ResistanceCheckTimeOut"); + var timeOut = SC.GetValue($"PM.{Module}.Heater.ResistanceMonitorHysteresis"); if (Resistance > _resLimitMax && _timResOutOfRange.IsIdle()) { diff --git a/Modules/SicPM/Devices/IoSCR.cs b/Modules/SicPM/Devices/IoSCR.cs index e7faf41..f0ba8dc 100644 --- a/Modules/SicPM/Devices/IoSCR.cs +++ b/Modules/SicPM/Devices/IoSCR.cs @@ -199,7 +199,7 @@ namespace SicPM.Devices { //检查电阻值是否在合理范围 _resLimitMax = (float)SC.GetValue($"PM.{Module}.Heater.{Name}ResistanceMax"); - var timeOut = SC.GetValue($"PM.{Module}.Heater.ResistanceCheckTimeOut"); + var timeOut = SC.GetValue($"PM.{Module}.Heater.ResistanceMonitorHysteresis"); if (Resistance > _resLimitMax && _timResOutOfRange.IsIdle()) { diff --git a/Modules/SicPM/RecipeExecutions/Process.cs b/Modules/SicPM/RecipeExecutions/Process.cs index 0587c90..2985b6b 100644 --- a/Modules/SicPM/RecipeExecutions/Process.cs +++ b/Modules/SicPM/RecipeExecutions/Process.cs @@ -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($"PM.{Module}.PC7Offset"); _tempOffset = SC.GetValue($"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($"PM.{Module}.Heater.ResistanceLimitTime"); - if (!(totalElapseTime > ignoredDurationSec) || - (!(totalTime - totalElapseTime > ignoredDurationSec))) return; + // 工艺刚开始和快结束的一段时间内,不需要检测电阻值。 + var ignoredDurationSec = SC.GetValue($"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(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(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) { diff --git a/SicRT/Config/System.sccfg b/SicRT/Config/System.sccfg index 0f895df..fa000ba 100644 --- a/SicRT/Config/System.sccfg +++ b/SicRT/Config/System.sccfg @@ -175,10 +175,10 @@ - + - - + +