using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OrpaonEMS.Core.Model
{
///
/// 追踪指令值的模型
///
public class TranceCmdValue
{
///
/// 实例化函数
///
///
public TranceCmdValue(double changeThreshold)
{
ChangeThreshold = changeThreshold;
}
///
/// 变化的阀值
///
public double ChangeThreshold { get; set; }
///
/// 事件
///
public event EventHandler CmdValueChanged;
private double _CmdValue;
///
/// 指令值
/// 可实时赋值
///
public double CmdValue
{
get { return _CmdValue; }
set
{
//发送0,代表是待机,此时不需要看变化了,防止上一个值在0附近,没有触发变化,还是输出一个靠近0的值出去
if (value == 0 && value != _CmdValue)//value != _CmdValue 防止一直0值导致不停是Invoke事件
{
_CmdValue = value;
//超过变化的阀值,可以触发动作 BeginInvoke 换 Invoke 可能导致问题
CmdValueChanged.Invoke(this, 0);
return;
}
if (value != _CmdValue && GetChange(value, _CmdValue))
{
_CmdValue = value;
//超过变化的阀值,可以触发动作
CmdValueChanged.Invoke(this, value);
}
}
}
///
/// 判断是否超过某个阀值数据
///
///
///
///
private bool GetChange(double newValue, double oldValue)
{
if (Math.Abs(newValue - oldValue) >= ChangeThreshold)
{
return true;
}
return false;
}
}
}