| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | using System;using System.Xml;using Aitex.Core.Common.DeviceData;using Aitex.Core.RT.DataCenter;using Aitex.Core.RT.IOCore;using Aitex.Core.Util;namespace Aitex.Core.RT.Device.Unit{    public class IoPressureMeter2 : BaseDevice, IDevice    {        public enum UnitType        {            Torr,            Pascal,            Mbar,            Pascal972B,        }        public double UnitValue        {            get            {                if (unitType == UnitType.Torr)                    return GetTorr();                else if (unitType == UnitType.Pascal)                    return GetPascal();                else if (unitType == UnitType.Pascal972B)                    return GetPascal972B();                else                    return GetMbar();            }        }        //Torr unit        public double PressureValue        {            get            {                if (_type == "MKS.901P")                    return PressureValue901P;                if (_type == "MKS.974B")                    return PressureValue974B;                return RawValue;            }        }        private double PressureValue901P        {            get            {                var voltage = Converter.Phy2Logic(RawValue, 1, 9, 3276.7, 29490.3);                var torValue = Math.Pow(10.0, voltage - 6.0);                return Unit == "mTorr" ? torValue * 1000 : torValue;            }        }        private double PressureValue974B        {            get            {                var voltage = Converter.Phy2Logic(RawValue, 1.5, 7, 4915.05, 22936.9);                var torValue = Math.Pow(10.0, 2 * voltage - 11.0);                return Unit == "mTorr" ? torValue * 1000 : torValue;            }        }        public short RawValue        {            get { return BitConverter.ToInt16(new byte[] { (byte)_aiLow.Value, (byte)_aiHigh.Value }, 0); }        }        private AITPressureMeterData DeviceData        {            get            {                AITPressureMeterData data = new AITPressureMeterData()                {                    DeviceName = Name,                    DeviceSchematicId = DeviceID,                    DisplayName = Display,                    FeedBack = PressureValue,                    Unit = Unit,                };                return data;            }        }        public string Unit { get; set; }        private AIAccessor _aiLow = null;        private AIAccessor _aiHigh = null;        //private SCConfigItem _scMinFlow;        //private SCConfigItem _scMaxFlow;        private UnitType unitType = UnitType.Pascal;        private string _type = string.Empty;        //        private double rangeMin = Int16.MinValue * 0.1;        private double rangeMax = Int16.MaxValue * 0.9;        private double min = Int16.MinValue * 0.1;        private double max = Int16.MaxValue * 0.9;        public IoPressureMeter2(string module, XmlElement node, string ioModule = "")        {            base.Module = module;            Name = node.GetAttribute("id");            Display = node.GetAttribute("display");            DeviceID = node.GetAttribute("schematicId");            Unit = node.GetAttribute("unit");            _aiLow = ParseAiNode("aiLow", node, ioModule);            _aiHigh = ParseAiNode("aiHigh", node, ioModule);            _type = node.GetAttribute("type");            //Full Scale 0-10V            this.min = Int16.MaxValue * min / 10.0;            this.max = Int16.MaxValue * max / 10.0;        }        public bool Initialize()        {            DATA.Subscribe($"{Module}.{Name}.Value", () => UnitValue);            DATA.Subscribe($"{Module}.{Name}.DeviceData", () => DeviceData);            return true;        }        public void Terminate()        {        }        public void Monitor()        {        }        public void Reset()        {        }        public static double Voltage(double pressure)        {            double logic = 4.0 + Math.Log10(pressure);            double min = Int16.MaxValue * 1 / 10.0;            double max = Int16.MaxValue * 9 / 10.0;            return Converter.Logic2Phy(logic, 1, 9, min, max);        }        public static double Voltage2(double pressure)        {            return Converter.Logic2Phy(pressure, 0, 1333 * 100, 0x0000, 0x5B6D);        }        private double GetPascal()        {            double voltage = Converter.Phy2Logic(RawValue, rangeMin, rangeMax, min, max);            return Math.Pow(10.0, voltage - 4.0);      //pascal        }        private double GetPascal972B()        {            double voltage = Converter.Phy2Logic(RawValue, rangeMin, rangeMax, min, max);            return Math.Pow(10.0, 2 * voltage - 9);      //pascal        }        private double GetMbar()        {            double voltage = Converter.Phy2Logic(RawValue, rangeMin, rangeMax, min, max);            return Math.Pow(10.0, voltage - 6.0);      //mbar        }        private double GetTorr()        {            double voltage = Converter.Phy2Logic(RawValue, rangeMin, rangeMax, min, max);            return Math.Pow(10.0, voltage - 6.125);      //torr        }        private double GetAIScale()        {            return Converter.Phy2Logic(RawValue, 0, 1333, 0x0000, 0x7fff);        }    }}
 |