修正Process过程中未监测加热器电阻的问题。

Process中开始和结束监测加热器电阻时,输出信息,方便调试。
重命名部分加热器电阻相关系统参数,使其表述的意义更加准确。
This commit is contained in:
SL 2023-07-26 11:33:30 +08:00
parent b784c0cb5b
commit 12d4895bad
4 changed files with 43 additions and 22 deletions

View File

@ -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())
{

View File

@ -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())
{

View File

@ -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)
{

View File

@ -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" />