Sic.Framework-Nanjing-Baishi/MECF.Framework.Common/Aitex/Core/RT/EMS/TimeObserver.cs

209 lines
5.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Aitex.Core.RT.Event;
using Aitex.Core.RT.SCCore;
using Aitex.Core.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
namespace MECF.Framework.Common.Aitex.Core.RT.EMS
{
[DataContract]
public class TimeObserver : IObserver
{
#region Variables
protected DateTime _startDate = DateTime.Now;
protected DateTime? _trigDate = null;
protected double _value = 0;
protected bool _isTimeOut = false;
protected double _timeExceeded = 0;
protected readonly R_TRIG _trigTimeOut = new();
protected double _threshold = 1000000;
#endregion
#region Properties
[DataMember]
public string Name { get; set; }
[DataMember]
public string Module { get; set; }
[DataMember]
public int Index { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public bool Enable { get; set; }
[DataMember]
public TimeUnit TimeDisplayUnit { get; set; }
#region OutputOnly
[Subscription("IsTrigger")]
public bool IsTrigger => _isTimeOut;
[Subscription("StartDate")]
public DateTime StartDate => _startDate;
[Subscription("Value")]
/// <summary>
/// 单位s
/// </summary>
public double Value => _value;
[Subscription("Threshold")]
/// <summary>
/// 单位s
/// </summary>
public double Threshold => _threshold;
[Subscription("TrigDate")]
public DateTime? TrigDate => _trigDate;
/// <summary>
/// 超出时间单位TimeDisplayUnit
/// </summary>
[Subscription("TimeExceeded")]
public double TimeExceeded => _timeExceeded;
[Subscription("ValueExceeded")]
public virtual double ValueExceeded => _timeExceeded;
[Subscription("IsProcessing")]
public virtual bool IsProcessing => true;
#endregion
#endregion
#region Constructors
public TimeObserver()
{
}
public TimeObserver(string name,string module ,int index,string description, bool enabled,DateTime startdate, double threshold, TimeUnit timedisplayunit)
{
Name = name;
Module = module;
Index = index;
Description = description;
Enable = enabled;
TimeDisplayUnit = timedisplayunit;
_threshold = threshold;
_startDate = startdate;
}
#endregion
#region Methods
/// <summary>
/// 计算剩余时间和超时时间,不同类算法不同,需要重载
/// </summary>
public virtual void Monitor()
{
_trigTimeOut.CLK = _isTimeOut;
if (_trigTimeOut.Q)
{
bool iswarning = true;
if (SC.ContainsItem("System.IgnoreMaintainTimeOutWarning"))
{
iswarning = !SC.GetValue<bool>("System.IgnoreMaintainTimeOutWarning");
}
if (iswarning)
EV.PostWarningLog("Maintainance", $"Plan {Name} reach the deadline, please check as soon as possible.");
else
EV.PostInfoLog("Maintainance", $"Plan {Name} reach the deadline, please check as soon as possible.");
}
}
/// <summary>
/// 重新开始计时,未使能时或不满足条件无法复位
/// </summary>
/// <returns></returns>
public virtual bool Reset()
{
if (!Enable)
{
EV.PostWarningLog("Maintainance", $"Plan {Name} is disable,can not be reset");
return false;
}
if (CanReset())
return true;
else return false;
}
/// <summary>
/// 阈值设置
/// </summary>
/// <param name="threshold">必须大于0</param>
/// <returns></returns>
public virtual bool SetThreshold(double threshold)
{
if (threshold <= 0)
{
EV.PostWarningLog("Maintainance", $"threshold must be greater than zero");
return false;
}
return true;
}
public virtual bool SetStartDate(DateTime t)
{
return true;
}
public virtual bool CanReset()
{
return true;
}
public virtual bool SetMaintain(string parentname, string name, int itemid, DateTime date)
{
return true;
}
public virtual Dictionary<string, List<MaintainerItem>> GetAllMaintainerItemsDic()
{
return new();
}
public virtual bool SetMaintainerItemEnable(string parentname, string name, int itemid, bool enable)
{
return true;
}
public virtual void AddMaintainerItem(string parentname, MaintainerItem item)
{
}
public virtual void RemoveMaintainerItem(string parentname, string itemname, int id)
{
}
#endregion
}
}