refactor(IoTC): 优化温度变化过快报警监测逻辑。
MonitorTempRaisingTooFastAlarm()方法增加计时器,确保每隔1s判断一次温度变化率。
This commit is contained in:
parent
7d815fc0d1
commit
c6f16187a9
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using Aitex.Core.RT.DataCenter;
|
using Aitex.Core.RT.DataCenter;
|
||||||
using Aitex.Core.RT.Event;
|
using Aitex.Core.RT.Event;
|
||||||
|
@ -1239,7 +1240,7 @@ namespace Aitex.Core.RT.Device.Devices
|
||||||
}
|
}
|
||||||
|
|
||||||
//DateTime dtLastRecordTime = DateTime.Now;
|
//DateTime dtLastRecordTime = DateTime.Now;
|
||||||
readonly DeviceTimer _timTempRaisingMonitor = new ();
|
private readonly Stopwatch _swTempRaisingMonitor = new();
|
||||||
private double _lastInnerTemp = 0;
|
private double _lastInnerTemp = 0;
|
||||||
private double _lastMiddleTemp = 0;
|
private double _lastMiddleTemp = 0;
|
||||||
private double _lastOuterTemp = 0;
|
private double _lastOuterTemp = 0;
|
||||||
|
@ -1247,67 +1248,104 @@ namespace Aitex.Core.RT.Device.Devices
|
||||||
private readonly R_TRIG _rTrigInnerTempRaisingFast = new();
|
private readonly R_TRIG _rTrigInnerTempRaisingFast = new();
|
||||||
private readonly R_TRIG _rTrigOuterTempRaisingFast = new();
|
private readonly R_TRIG _rTrigOuterTempRaisingFast = new();
|
||||||
|
|
||||||
private void MonitorTempRaisingTooFastAlarm()
|
private bool MonitorTempRaisingTooFastAlarm()
|
||||||
{
|
{
|
||||||
string pmStatus = DATA.Poll($"{Module}.Status") == null ? "" : DATA.Poll($"{Module}.Status").ToString();
|
var objPmStatus = DATA.Poll($"{Module}.Status");
|
||||||
|
var pmStatus = objPmStatus == null ? "" : objPmStatus.ToString();
|
||||||
|
|
||||||
if (pmStatus == "Process")
|
if (pmStatus != "Process")
|
||||||
|
{
|
||||||
|
// PM没有Process时,强制停止计时器;
|
||||||
|
// 否则由于上一次工艺结束时,定时器处于运行状态,再次进入工艺时,IsRunning == true,定时器记录时间会很大,导致判断错误。
|
||||||
|
_swTempRaisingMonitor.Reset();
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
// 时间间隔单位从ms转换为sec
|
|
||||||
var interval = _timTempRaisingMonitor.GetElapseTime() / 1000;
|
|
||||||
var raisingPerSec = 0.0;
|
|
||||||
|
|
||||||
#region Inner
|
if (!_swTempRaisingMonitor.IsRunning)
|
||||||
|
|
||||||
/* raisingPerSec = Math.Abs(InnerTemp - _lastInnerTemp) / interval;
|
|
||||||
_rTrigInnerTempRaisingFast.CLK = raisingPerSec > _tempRaisingRateInner;
|
|
||||||
if (_rTrigInnerTempRaisingFast.Q)
|
|
||||||
{
|
|
||||||
var msg = $"Inner Temp raising too fast at a rate of {raisingPerSec:F1}℃/s";
|
|
||||||
|
|
||||||
if (_isAlarmTempRaisingFast)
|
|
||||||
EV.PostAlarmLog(Module, msg);
|
|
||||||
else
|
|
||||||
EV.PostWarningLog(Module, msg);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Middle
|
|
||||||
|
|
||||||
raisingPerSec = Math.Abs(MiddleTemp - _lastMiddleTemp) / interval;
|
|
||||||
_rTrigMiddleTempRaisingFast.CLK = raisingPerSec > _tempRaisingRateMiddle;
|
|
||||||
if (_rTrigMiddleTempRaisingFast.Q)
|
|
||||||
{
|
{
|
||||||
var msg = $"Middle Temp raising too fast at a rate of {raisingPerSec:F1}℃/s";
|
// 首次进入Process,启动1s定时,并保存当前当前温度。
|
||||||
if (_isAlarmTempRaisingFast)
|
// 后续整个Process过程中,定制器始终处于工作状态,除非发生异常。
|
||||||
EV.PostAlarmLog(Module, msg);
|
_swTempRaisingMonitor.Start();
|
||||||
else
|
_lastInnerTemp = InnerTemp;
|
||||||
EV.PostWarningLog(Module, msg);
|
_lastMiddleTemp = MiddleTemp;
|
||||||
|
_lastOuterTemp = OuterTemp;
|
||||||
}
|
}
|
||||||
|
else if (_swTempRaisingMonitor.Elapsed.TotalSeconds > 1)
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Outer
|
|
||||||
|
|
||||||
raisingPerSec = Math.Abs(OuterTemp - _lastOuterTemp) / interval;
|
|
||||||
_rTrigOuterTempRaisingFast.CLK = raisingPerSec > _tempRaisingRateOuter;
|
|
||||||
if (_rTrigOuterTempRaisingFast.Q)
|
|
||||||
{
|
{
|
||||||
var msg = $"Outer Temp raising too fast at a rate of {raisingPerSec:F1}℃/s";
|
|
||||||
if (_isAlarmTempRaisingFast)
|
|
||||||
EV.PostAlarmLog(Module, msg);
|
|
||||||
else
|
|
||||||
EV.PostWarningLog(Module, msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
_swTempRaisingMonitor.Stop();
|
||||||
|
|
||||||
|
var interval = _swTempRaisingMonitor.Elapsed.TotalSeconds;
|
||||||
|
if (interval <= 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
Debug.WriteLine($"IoTC {Name} Temp Raising Fast monitor interval: {interval:F1}", Module);
|
||||||
|
Debug.WriteLine($"Is Alarm: {_isAlarmTempRaisingFast}; " +
|
||||||
|
$"Middle Rate SP: {_tempRaisingRateMiddle}℃/s; " +
|
||||||
|
$"Outer Rate SP: {_tempRaisingRateOuter}℃/s; ",
|
||||||
|
Module);
|
||||||
|
|
||||||
|
var raisingRatePerSec = 0.0;
|
||||||
|
|
||||||
|
#region Inner
|
||||||
|
|
||||||
|
/* raisingRatePerSec = Math.Abs(InnerTemp - _lastInnerTemp) / interval;
|
||||||
|
Debug.WriteLine($"Inner Temp Raising Rate: {raisingRatePerSec:F1}", Module);
|
||||||
|
_rTrigInnerTempRaisingFast.CLK = raisingPerSec > _tempRaisingRateInner;
|
||||||
|
if (_rTrigInnerTempRaisingFast.Q)
|
||||||
|
{
|
||||||
|
var msg = $"Inner Temp raising too fast at a rate of {raisingPerSec:F1}℃/s";
|
||||||
|
|
||||||
|
if (_isAlarmTempRaisingFast)
|
||||||
|
EV.PostAlarmLog(Module, msg);
|
||||||
|
else
|
||||||
|
EV.PostWarningLog(Module, msg);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Middle
|
||||||
|
|
||||||
|
raisingRatePerSec = Math.Abs(MiddleTemp - _lastMiddleTemp) / interval;
|
||||||
|
Debug.WriteLine($"Middle Temp Raising Rate: {raisingRatePerSec:F1}", Module);
|
||||||
|
_rTrigMiddleTempRaisingFast.CLK = raisingRatePerSec > _tempRaisingRateMiddle;
|
||||||
|
if (_rTrigMiddleTempRaisingFast.Q)
|
||||||
|
{
|
||||||
|
var msg = $"Middle Temp raising too fast at a rate of {raisingRatePerSec:F1}℃/s";
|
||||||
|
if (_isAlarmTempRaisingFast)
|
||||||
|
EV.PostAlarmLog(Module, msg);
|
||||||
|
else
|
||||||
|
EV.PostWarningLog(Module, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Outer
|
||||||
|
|
||||||
|
raisingRatePerSec = Math.Abs(OuterTemp - _lastOuterTemp) / interval;
|
||||||
|
Debug.WriteLine($"Outer Temp Raising Rate: {raisingRatePerSec:F1}", Module);
|
||||||
|
_rTrigOuterTempRaisingFast.CLK = raisingRatePerSec > _tempRaisingRateOuter;
|
||||||
|
if (_rTrigOuterTempRaisingFast.Q)
|
||||||
|
{
|
||||||
|
var msg = $"Outer Temp raising too fast at a rate of {raisingRatePerSec:F1}℃/s";
|
||||||
|
if (_isAlarmTempRaisingFast)
|
||||||
|
EV.PostAlarmLog(Module, msg);
|
||||||
|
else
|
||||||
|
EV.PostWarningLog(Module, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
// 保存当前当前温度,并重启1s定时器
|
||||||
|
_lastInnerTemp = InnerTemp;
|
||||||
|
_lastMiddleTemp = MiddleTemp;
|
||||||
|
_lastOuterTemp = OuterTemp;
|
||||||
|
_swTempRaisingMonitor.Restart();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_lastInnerTemp = InnerTemp;
|
return true;
|
||||||
_lastMiddleTemp = MiddleTemp;
|
|
||||||
_lastOuterTemp = OuterTemp;
|
|
||||||
_timTempRaisingMonitor.Start(0);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue