95 lines
2.8 KiB
C#
95 lines
2.8 KiB
C#
using System;
|
|
using System.Xml;
|
|
using Aitex.Core.RT.Device.Devices;
|
|
using Aitex.Core.RT.Log;
|
|
using Aitex.Core.RT.OperationCenter;
|
|
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MFCs;
|
|
|
|
namespace Aitex.Core.RT.Device.Unit
|
|
{
|
|
public interface IGasStick
|
|
{
|
|
bool SetFlow(out string reason, int time, float flow);
|
|
}
|
|
|
|
public class IoGasStick : BaseDevice, IDevice, IGasStick
|
|
{
|
|
private IValve _valve;
|
|
private IPressureMeter _pressure;
|
|
private IMfc _mfc;
|
|
private IValve _finalValve;
|
|
|
|
public IoGasStick(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");
|
|
|
|
_valve = DEVICE.GetDevice($"{Module}.{node.GetAttribute("valve")}") as IValve;
|
|
_finalValve = DEVICE.GetDevice($"{Module}.{node.GetAttribute("final")}") as IValve;
|
|
_pressure = DEVICE.GetDevice($"{Module}.{node.GetAttribute("pc")}") as IPressureMeter;
|
|
_mfc = DEVICE.GetDevice($"{Module}.{node.GetAttribute("mfc")}") as IMfc;
|
|
|
|
System.Diagnostics.Debug.Assert(_valve != null, "Valve setting not valid");
|
|
System.Diagnostics.Debug.Assert(_finalValve != null, "Final Valve setting not valid");
|
|
System.Diagnostics.Debug.Assert(_pressure != null, "Pressure switch setting not valid");
|
|
System.Diagnostics.Debug.Assert(_mfc != null, "MFC setting not valid");
|
|
}
|
|
|
|
public bool Initialize()
|
|
{
|
|
OP.Subscribe($"{Module}.{Name}.Flow", SetFlow);
|
|
|
|
return true;
|
|
}
|
|
|
|
private bool SetFlow(out string reason, int time, object[] param)
|
|
{
|
|
return SetFlow(out reason, time, Convert.ToSingle(param[0].ToString()));
|
|
}
|
|
|
|
public bool SetFlow(out string reason, int time, float flow)
|
|
{
|
|
bool isOn = flow > 0.1;
|
|
|
|
if (!_valve.TurnValve(isOn, out reason))
|
|
return false;
|
|
|
|
//may other gas line is flowing, so we can not close the final valve here
|
|
if (isOn && !_finalValve.TurnValve(isOn, out reason))
|
|
return false;
|
|
|
|
if (!_mfc.Ramp(flow, time, out reason))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
public void Terminate()
|
|
{
|
|
}
|
|
|
|
public void Monitor()
|
|
{
|
|
try
|
|
{
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
LOG.Write(ex);
|
|
}
|
|
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|