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)); } /// /// 根据给定的Alarm阈值和偏移值计算Warn阈值。 /// /// /// /// private void UpdateWarnThreshold(double offset, double alarmLow, double alarmHigh) { checked { _warningLow = alarmLow + Math.Abs(offset); _warningHigh = alarmHigh - Math.Abs(offset); } } #endregion } }