| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 | 
							- using Aitex.Core.Common.DeviceData;
 
- using Aitex.Core.RT.DataCenter;
 
- using Aitex.Core.RT.Event;
 
- using Aitex.Core.RT.IOCore;
 
- using Aitex.Core.RT.OperationCenter;
 
- using Aitex.Core.RT.SCCore;
 
- using Aitex.Core.RT.Tolerance;
 
- using MECF.Framework.Common.Event;
 
- using System;
 
- using System.Xml;
 
- namespace Aitex.Core.RT.Device.Unit
 
- {
 
-     /// <summary>
 
-     ///
 
-     ///
 
-     /// 1个DO控制开关, 1个AI显示当前反馈。根据反馈值和设定值的差别,来自动调整开或者关
 
-     ///
 
-     /// AI 大于 设定值,关闭DO
 
-     /// AI 小于 设定值, 打开DO
 
-     /// 
 
-     /// </summary>
 
-     public class IoHeater2 : BaseDevice, IDevice
 
-     {
 
-         public bool HeaterOnSetPoint
 
-         {
 
-             get
 
-             {
 
-                 if (_doOn != null)
 
-                     return _doOn.Value;
 
-                 return false;
 
-             }
 
-             set
 
-             {
 
-                 if (_doOn != null)
 
-                     _doOn.Value = value;
 
-             }
 
-         }
 
-         public float Feedback
 
-         {
 
-             get
 
-             {
 
-                 return _aiFeedback.FloatValue;
 
-             }
 
-         }
 
-         public string Unit
 
-         {
 
-             get; set;
 
-         }
 
-         private AITHeaterData DeviceData
 
-         {
 
-             get
 
-             {
 
-                 AITHeaterData data = new AITHeaterData()
 
-                 {
 
-                     Module = Module,
 
-                     DeviceName = Name,
 
-                     DeviceSchematicId = DeviceID,
 
-                     DisplayName = Display,
 
-                     FeedBack = Feedback,
 
-                     IsPowerOn = HeaterOnSetPoint,
 
-                     IsPowerOnSetPoint = HeaterOnSetPoint,
 
-                     Unit = Unit,
 
-                     DisplayWithUnit = true,
 
-                     FormatString = "F2",
 
-                 };
 
-                 return data;
 
-             }
 
-         }
 
-         private DOAccessor _doOn = null;
 
-         private AIAccessor _aiFeedback = null;
 
-         private bool _isFloatAioType = false;
 
-         private SCConfigItem _scAutoAdjustMinValue;
 
-         private SCConfigItem _scAutoAdjustMaxValue;
 
-         private SCConfigItem _scEnableAutoAdjust;
 
-         private SCConfigItem _scEnableAlarm;
 
-         private SCConfigItem _scAlarmTime;
 
-         private SCConfigItem _scAlarmMaxValue;
 
-         private SCConfigItem _scAlarmMinValue;
 
-         private bool _enableHeatUp;
 
-         public AlarmEventItem AlarmOutOfRange { get; set; }
 
-         private ToleranceChecker _outOfRangeChecker = new ToleranceChecker();
 
-         public IoHeater2(string module, XmlElement node, string ioModule = "")
 
-         {
 
-             base.Module = string.IsNullOrEmpty(node.GetAttribute("module")) ? module : node.GetAttribute("module");
 
-             base.Name = node.GetAttribute("id");
 
-             base.Display = node.GetAttribute("display");
 
-             base.DeviceID = node.GetAttribute("schematicId");
 
-             Unit = node.GetAttribute("unit");
 
-             string scBasePath = node.GetAttribute("scBasePath");
 
-             if (string.IsNullOrEmpty(scBasePath))
 
-                 scBasePath = $"{Module}.{Name}";
 
-             else
 
-             {
 
-                 scBasePath = scBasePath.Replace("{module}", Module);
 
-             }
 
-             _isFloatAioType = !string.IsNullOrEmpty(node.GetAttribute("aioType")) && (node.GetAttribute("aioType") == "float");
 
-             _aiFeedback = ParseAiNode("aiFeedback", node, ioModule);
 
-             _doOn = ParseDoNode("doOn", node, ioModule);
 
-             _scAutoAdjustMinValue = SC.GetConfigItem($"{scBasePath}.{Name}.AutoAdjustMinValue");
 
-             _scAutoAdjustMaxValue = SC.GetConfigItem($"{scBasePath}.{Name}.AutoAdjustMaxValue");
 
-             _scEnableAutoAdjust = SC.GetConfigItem($"{scBasePath}.{Name}.EnableAutoAdjust");
 
-  
 
-             _scEnableAlarm = SC.GetConfigItem($"{scBasePath}.{Name}.EnableAlarm");
 
-             _scAlarmTime = SC.GetConfigItem($"{scBasePath}.{Name}.AlarmTime");
 
-             _scAlarmMaxValue = SC.GetConfigItem($"{scBasePath}.{Name}.AlarmMaxValue");
 
-             _scAlarmMinValue = SC.GetConfigItem($"{scBasePath}.{Name}.AlarmMinValue");
 
-             _enableHeatUp = true;
 
-         }
 
-         public bool Initialize()
 
-         {
 
-             AlarmOutOfRange = SubscribeAlarm($"{Module}.{Name}.OutOfRangeAlarm", $"{Name} temperature out of range", ResetOutOfRangeChecker);
 
-             DATA.Subscribe($"{Module}.{Name}.DeviceData", () => DeviceData);
 
-             DATA.Subscribe($"{Module}.{Name}.Feedback", () => Feedback);
 
-             OP.Subscribe($"{Module}.{Name}.{AITHeaterOperation.Ramp}", (out string reason, int time, object[] param) =>
 
-             {
 
-                 reason = "do not support set temperature";
 
-                 EV.PostWarningLog(Module, reason);
 
-                 return true;
 
-             });
 
-             OP.Subscribe($"{Module}.{Name}.{AITHeaterOperation.SetPowerOnOff}", (out string reason, int time, object[] param) =>
 
-             {
 
-                 bool isOn = Convert.ToBoolean((string)param[0]);
 
-                 if (_doOn != null)
 
-                 {
 
-                     if (!_doOn.SetValue(isOn, out reason))
 
-                         return false;
 
-                 }
 
-                 reason = $"set {Module}.{Name} heater on";
 
-                 return true;
 
-             });
 
-             return true;
 
-         }
 
-         public void EnableControl(bool enable)
 
-         {
 
-             if (_enableHeatUp == enable)
 
-                 return;
 
-             _enableHeatUp = enable;
 
-             if (!_enableHeatUp)
 
-             {
 
-                 EV.PostInfoLog(Module, "Disable control heater temperature");
 
-             }
 
-         }
 
-         public void Stop()
 
-         {
 
-         }
 
-         public void Terminate()
 
-         {
 
-         }
 
-         public void Monitor()
 
-         {
 
-             MonitorAutoHeaterUp();
 
-             MonitorOutOfRange();
 
-         }
 
-         private void MonitorAutoHeaterUp()
 
-         {
 
-             if (!_enableHeatUp)
 
-             {
 
-                 HeaterOnSetPoint = false;
 
-                 return;
 
-             }
 
-             if (_scEnableAlarm.BoolValue && Feedback > _scAlarmMaxValue.DoubleValue)
 
-             {
 
-                 HeaterOnSetPoint = false;
 
-                 return;
 
-             }
 
-             if (_scEnableAutoAdjust.BoolValue)
 
-             {
 
-                 if (Feedback > _scAutoAdjustMaxValue.DoubleValue)
 
-                 {
 
-                     HeaterOnSetPoint = false;
 
-                 }
 
-                 if (Feedback < _scAutoAdjustMinValue.DoubleValue)
 
-                 {
 
-                     HeaterOnSetPoint = true;
 
-                 }
 
-             }
 
-         }
 
-         private void MonitorOutOfRange()
 
-         {
 
-             if (!_scEnableAlarm.BoolValue)
 
-             {
 
-                 _outOfRangeChecker.RST = true;
 
-                 AlarmOutOfRange.Reset();
 
-                 return;
 
-             }
 
-             _outOfRangeChecker.Monitor(Feedback, _scAlarmMinValue.DoubleValue, _scAlarmMaxValue.DoubleValue, _scAlarmTime.IntValue);
 
-             if (_outOfRangeChecker.Trig)
 
-             {
 
-                 AlarmOutOfRange.Description = $"{Display} out of range [{_scAlarmMinValue.DoubleValue:F1},{_scAlarmMaxValue.DoubleValue:F1}] {Unit} for {_scAlarmTime.IntValue:F0} seconds";
 
-                 AlarmOutOfRange.Set();
 
-             }
 
-         }
 
-         public void Reset()
 
-         {
 
-             AlarmOutOfRange.Reset();
 
-         }
 
-         public bool ResetOutOfRangeChecker()
 
-         {
 
-             _outOfRangeChecker.Reset(_scAlarmTime.IntValue);
 
-             return true;
 
-         }
 
-     }
 
- }
 
 
  |