Sic.Framework/MECF.Framework.RT.Equipment.../Devices/IoSensorWaterFlowTemp.cs

70 lines
2.1 KiB
C#
Raw Normal View History

using Aitex.Core.RT.SCCore;
using System;
using System.Xml;
using Aitex.Core.Common.DeviceData;
namespace Aitex.Core.RT.Device.Devices
{
public class IoSensorWaterFlowTemp : IoSensorAnalog
{
#region Variables
private double _warnOffset;
#endregion
#region Constructors
public IoSensorWaterFlowTemp(string module, XmlElement node, string ioModule = "")
: base(module, node, ioModule)
{
LoadConfig();
}
#endregion
#region Methods
protected sealed override void LoadConfig()
{
base.LoadConfig();
var scNameWarnOffset = $"{ScBasePath}.WarningOffset";
// 重新设定水温警告值当前系统中的水温警告值非设定值而是在Alarm基础上偏移指定的温度。
_warnOffset = SC.SafeGetValue(scNameWarnOffset, 0.0);
UpdateWarnThreshold(_warnOffset, _alarmLow, _alarmHigh);
// 当WarnOffset、AlarmLow、AlarmHigh中的任意参数发生变更时重新计算Warn阈值
SC.RegisterValueChangedCallback(scNameWarnOffset, v =>
{
_warnOffset = (double)v;
UpdateWarnThreshold(_warnOffset, _alarmLow, _alarmHigh);
});
SC.RegisterValueChangedCallback(_scNameAlarmLow,
v => UpdateWarnThreshold(_warnOffset, (double)v, _alarmHigh));
SC.RegisterValueChangedCallback(_scNameAlarmHigh,
v => UpdateWarnThreshold(_warnOffset, _alarmLow, (double)v));
}
/// <summary>
/// 根据给定的Alarm阈值和偏移值计算Warn阈值。
/// </summary>
/// <param name="offset"></param>
/// <param name="alarmLow"></param>
/// <param name="alarmHigh"></param>
private void UpdateWarnThreshold(double offset, double alarmLow, double alarmHigh)
{
checked
{
_warningLow = alarmLow + Math.Abs(offset);
_warningHigh = alarmHigh - Math.Abs(offset);
}
}
#endregion
}
}