| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | using System;using System.Xml;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()        {        }    }}
 |