SicMultiplate/Modules/Mainframe/Devices/IoPump.cs

192 lines
5.6 KiB
C#

using System;
using System.Xml;
using Aitex.Core.Common.DeviceData;
using Aitex.Core.RT.DataCenter;
using Aitex.Core.RT.Device;
using Aitex.Core.RT.Event;
using Aitex.Core.RT.IOCore;
using Aitex.Core.RT.Log;
using Aitex.Core.Util;
using MECF.Framework.Common.Event;
namespace SicModules.Devices
{
public class IoPump: BaseDevice, IDevice
{
public bool IsRunning
{
get
{
if (_diRunning != null)
return _diRunning.Value;
return true;
}
}
public bool IsWarning
{
get
{
if(_diWarning!= null)
return !_diWarning.Value;
return false;
}
}
public bool IsAlarm
{
get
{
return _diAlarm != null && !_diAlarm.Value;
}
}
public bool IsWaterFlow
{
get
{
return _diWaterFlow!= null && _diWaterFlow.Value;
}
}
private AITPumpData DeviceData
{
get
{
AITPumpData data = new AITPumpData()
{
DeviceName = Name,
DeviceSchematicId = DeviceID,
DisplayName = Display,
DeviceModule = Module,
Module = Module,
IsOn = IsRunning,
IsError = HasAlarm || IsAlarm,
IsWarning = IsWarning,
// IsWaterFlowEnable = _diWaterFlow.Value,
};
return data;
}
}
private DIAccessor _diRunning = null;
private DIAccessor _diOverloadAlarm;
private DIAccessor _diWarning;
private DIAccessor _diAlarm;
private DIAccessor _diWaterFlow;
//private DOAccessor _doStart;
//private DOAccessor _doPowerOn;
//private DOAccessor _doResetError;
private R_TRIG _trigWarning = new R_TRIG();
private R_TRIG _trigError = new R_TRIG();
private R_TRIG _trigNotRunning = new R_TRIG();
public AlarmEventItem AlarmOverload { get; set; }
public AlarmEventItem AlarmFailedStartStop { get; set; }
public IoPump(string module, XmlElement node, string ioModule = "")
{
var attrModule = node.GetAttribute("module");
base.Module = string.IsNullOrEmpty(attrModule) ? module : attrModule;
base.Name = node.GetAttribute("id");
base.Display = node.GetAttribute("display");
base.DeviceID = node.GetAttribute("schematicId");
_diRunning = ParseDiNode("diRunning", node, ioModule);
// _diOverloadAlarm = ParseDiNode("diOverloadAlarm", node, ioModule);
_diWarning = ParseDiNode("diWarning", node, ioModule);
_diAlarm = ParseDiNode("diAlarm", node, ioModule);
_diRunning = ParseDiNode("diRunning", node, ioModule);
//_diWaterFlow = ParseDiNode("diWaterFlow", node, ioModule);
}
public bool Initialize()
{
DATA.Subscribe($"{Module}.{Name}.DeviceData", () => DeviceData);
DATA.Subscribe($"{Module}.{Name}.IsAlarm", () => IsAlarm);
DATA.Subscribe($"{Module}.{Name}.IsRunning", () => IsRunning);
DATA.Subscribe($"{Module}.{Name}.IsWarning", () => IsWarning);
// DATA.Subscribe($"{Module}.{Name},IsWaterFlowEable", () => IsWaterFlow);
return true;
}
public void Terminate()
{
}
protected override void HandleMonitor()
{
try
{
string s = "";
_trigWarning.CLK = IsWarning;
if (_trigWarning.Q)
{
if(Name.Contains("1"))
{
s = "Alarm530 TMDryPump1 Not Runing[DI - 44]"; //"Alarm531 TMDryPump1 Warning [DI-44]";
}
else
{
s = "Alarm533 TMDryPump2 Not Runing [DI-79]"; //"Alarm534 TMDryPump2 Warning[DI - 79]";
}
EV.PostMessage(Module, EventEnum.DefaultAlarm, s);
EV.PostAlarmLog(Module, s);
}
_trigError.CLK = IsAlarm;
if (_trigError.Q)
{
if (Name.Contains("1"))
{
s = "Alarm529 TMDryPump1 Alarm [DI-43]";
}
else
{
s = "Alarm532 TMDryPump2 Alarm [DI-78]";
}
EV.PostAlarmLog(Module, s);
}
_trigNotRunning.CLK = !IsRunning;
if (_trigNotRunning.Q)
{
if (Name.Contains("1"))
{
s = "Alarm531 TMDryPump1 Warning [DI-49]"; //"Alarm530 TMDryPump1 Not Runing [DI-49]";
}
else
{
s = "Alarm534 TMDryPump2 Warning [DI-86]"; // Alarm533 TMDryPump2 Not Runing [DI-86]";
}
EV.PostAlarmLog(Module, s);
}
}
catch (Exception ex)
{
LOG.Write(ex);
}
}
public void Reset()
{
_trigWarning.RST = true;
_trigError.RST = true;
}
}
}