2023-06-12 11:31:58 +08:00
|
|
|
|
using System;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
using System.Runtime.Serialization;
|
|
|
|
|
using Aitex.Core.RT.Event;
|
|
|
|
|
|
|
|
|
|
namespace MECF.Framework.Common.Event
|
|
|
|
|
{
|
|
|
|
|
[Serializable]
|
|
|
|
|
[DataContract]
|
|
|
|
|
public class AlarmEventItem : EventItem
|
|
|
|
|
{
|
2023-06-12 11:31:58 +08:00
|
|
|
|
#region Variables
|
|
|
|
|
|
|
|
|
|
private IAlarmHandler _alarmHandler;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
|
|
|
|
private bool _ignoreAlarm;
|
|
|
|
|
|
2023-06-12 11:31:58 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Constructors
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
2023-06-12 11:31:58 +08:00
|
|
|
|
public AlarmEventItem(string source, string name, string description, Func<bool> resetChecker, IAlarmHandler handler)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
: base(source, name, description, EventLevel.Alarm, EventType.EventUI_Notify)
|
|
|
|
|
{
|
|
|
|
|
ResetChecker = resetChecker;
|
2023-06-12 11:31:58 +08:00
|
|
|
|
IsAcknowledged = true;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
_alarmHandler = handler;
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-12 11:31:58 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Properties
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置或返回报警复位检查器。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public Func<bool> ResetChecker { get; set; }
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Methods
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置当前报警是否可被忽略。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="ignore">
|
|
|
|
|
/// <value>True:忽略当前报警</value>
|
|
|
|
|
/// </param>
|
|
|
|
|
public void SetIgnoreError(bool ignore)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
|
|
|
|
if (_ignoreAlarm == ignore)
|
|
|
|
|
return;
|
2023-06-12 11:31:58 +08:00
|
|
|
|
|
2023-04-13 11:51:03 +08:00
|
|
|
|
_ignoreAlarm = ignore;
|
|
|
|
|
if (ignore)
|
|
|
|
|
{
|
2023-06-12 11:31:58 +08:00
|
|
|
|
EV.PostWarningLog(Source, Source + " " + EventEnum + " error will be ignored");
|
|
|
|
|
if (!IsTriggered)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
IsAcknowledged = true;
|
|
|
|
|
_alarmHandler?.AlarmStateChanged(this);
|
|
|
|
|
}
|
2023-04-13 11:51:03 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Reset();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-12 11:31:58 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 复位报警。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// 报警复位后,其应答状态<see cref="EventItem.IsAcknowledged"/>将被设置为True。
|
|
|
|
|
/// </remarks>
|
|
|
|
|
public void Reset()
|
|
|
|
|
{
|
|
|
|
|
if (_ignoreAlarm || !IsTriggered || (ResetChecker != null && !ResetChecker()))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
EV.PostInfoLog(Source, Source + " " + EventEnum + " is cleared");
|
|
|
|
|
IsAcknowledged = true;
|
|
|
|
|
_alarmHandler?.AlarmStateChanged(this);
|
|
|
|
|
}
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
2023-06-12 11:31:58 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 重置报警应答状态和报警时间。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void Set()
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
|
|
|
|
Set(null);
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-12 11:31:58 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设置报警内容,并重置报警应答状态和报警时间。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="error">报警内容描述。</param>
|
2023-04-13 11:51:03 +08:00
|
|
|
|
public void Set(string error)
|
2023-06-12 11:31:58 +08:00
|
|
|
|
{
|
|
|
|
|
if (_ignoreAlarm || IsTriggered)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(error))
|
|
|
|
|
{
|
|
|
|
|
Description = error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IsAcknowledged = false;
|
|
|
|
|
OccuringTime = DateTime.Now;
|
|
|
|
|
_alarmHandler?.AlarmStateChanged(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|