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);
- }
- }
- }
|