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

70 lines
2.1 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.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
}
}