using Aitex.Core.RT.DataCenter; using Aitex.Core.RT.Device.Devices; using Aitex.Core.RT.Device; using System; using System.Collections.Generic; using System.Xml.Serialization; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MFCs; namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.GasFlow { /// /// 单行真值表对应的逻辑对象,主要执行逻辑就在这里 /// [XmlType(typeName: "GasTrueTableRows")] public partial class GasTrueTableRows { [XmlArray("Inputs")] public List XMLInputList { get; set; } [XmlArray("Outputs")] public List XMLOutputList { get; set; } public string ModuleName { get;set; } public string GasName { get; set; } private Dictionary InputIoValveList=new Dictionary(); private Dictionary OutputMfcList = new Dictionary(); public void Initialize(string moduleName,string gasName) { ModuleName= moduleName; GasName= gasName; foreach (var rowInputs in XMLInputList) InputIoValveList.Add(DEVICE.GetDevice($"{ModuleName}.{rowInputs.Name}"), rowInputs.Value); if (GasName.Contains("PN2"))//PN2是特殊计算不能在此初始化 return; foreach (var rowOutputs in XMLOutputList) { if (rowOutputs.ControlName.Contains("Mfc")) OutputMfcList.Add(DEVICE.GetDevice($"{ModuleName}.{rowOutputs.ControlName}"), rowOutputs.Value); else OutputMfcList.Add(rowOutputs.ControlName, rowOutputs.Value); } } private bool IsCanOut() { //有一个集合为空,不用循环 if (InputIoValveList.Count == 0 || XMLOutputList.Count == 0) return false; //一行内单元格的输入输出配置 foreach (var rowInput in InputIoValveList) { if (rowInput.Key.Status == true && rowInput.Value == 1) continue; if (rowInput.Key.Status == false && rowInput.Value == 0) continue; return false; } return true; } public double Accumulation() { double volue = 0; if (!IsCanOut()) return 0; foreach (var rowOutput in OutputMfcList) { if (rowOutput.Key is IoMFC _mfc) volue += _mfc.FeedBack * rowOutput.Value; else//混合气体流量 volue += Convert.ToDouble(DATA.Poll($"{ModuleName}.GasRealTimeFlow.{rowOutput.Key}_Run.FeedBack")) * rowOutput.Value; } return volue; } public double AccumulationPN2Run() { double volue = 0; if (!IsCanOut()) return 0; foreach (var rowOutputs in XMLOutputList) { try { if (rowOutputs.ControlName.Contains("Mfc5")) { //Output配置的单元格 var _mfc = DEVICE.GetDevice($"{ModuleName}.{rowOutputs.ControlName}"); volue += _mfc.FeedBack * rowOutputs.Value; } else if (rowOutputs.ControlName.Contains("Mfc6")) { //特殊气体流量 var _mfc3 = DEVICE.GetDevice($"{ModuleName}.Mfc3"); var _mfc4 = DEVICE.GetDevice($"{ModuleName}.Mfc4"); var _mfc6 = DEVICE.GetDevice($"{ModuleName}.Mfc6"); var m3 = _mfc3.FeedBack; var m4 = _mfc4.FeedBack; var m6 = _mfc6.FeedBack; volue += (m6 * m4 / (m3 + m4)) * rowOutputs.Value; } } catch (Exception ex) { } } return volue; } } }