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; namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.GasFlow { /// /// 单行真值表对应的逻辑对象,主要执行逻辑就在这里 /// [XmlType(typeName: "GasTrueTableRows")] public partial class GasTrueTableRows { [XmlArray("Inputs")] public List InputList { get; set; } [XmlArray("Outputs")] public List OutputList { get; set; } private bool IsCanOut(string module) { //有一个集合为空,不用循环 if (InputList.Count == 0 || OutputList.Count == 0) return false; //一行内单元格的输入输出配置 foreach (var rowInputs in InputList) { try { //Input配置的单元格 var value = rowInputs.Value; var ioValve = DEVICE.GetDevice($"{module}.{rowInputs.Name}"); //开、关时后的状态,和表配置对比,只要不满足就可以退出函数 if (ioValve.Status == true && value == 1) continue; if (ioValve.Status == false && value == 0) continue; return false; } catch (Exception ex) { } return false; } return true; } public double Accumulation(string module, double otherValue = 0) { double volue = 0; if (!IsCanOut(module)) return 0; foreach (var rowOutputs in OutputList) { try { if (rowOutputs.ControlName.Contains("Mfc")) { //Output配置的单元格 var _mfc = DEVICE.GetDevice($"{module}.{rowOutputs.ControlName}"); volue += _mfc.FeedBack * rowOutputs.Value + otherValue; } else { //混合气体流量 switch (rowOutputs.ControlName) { case "HCL": volue += AddOther(Convert.ToDouble(DATA.Poll($"{module}.GasRealTimeFlow.HCL_Run.FeedBack")), rowOutputs.Value); break; case "TMA": volue += AddOther(Convert.ToDouble(DATA.Poll($"{module}.GasRealTimeFlow.TMA_Run.FeedBack")), rowOutputs.Value); break; case "TCS": volue += AddOther(Convert.ToDouble(DATA.Poll($"{module}.GasRealTimeFlow.TCS_Run.FeedBack")), rowOutputs.Value); break; case "PN2": volue += AddOther(Convert.ToDouble(DATA.Poll($"{module}.GasRealTimeFlow.PN2_Run.FeedBack")), rowOutputs.Value); break; default: break; } } } catch (Exception ex) { } } return volue; } private double AddOther(double other, double coefficient) { return other * coefficient; } public double AccumulationPN2Run(string module) { double volue = 0; if (!IsCanOut(module)) return 0; foreach (var rowOutputs in OutputList) { try { if (rowOutputs.ControlName.Contains("Mfc5")) { //Output配置的单元格 var _mfc = DEVICE.GetDevice($"{module}.{rowOutputs.ControlName}"); volue += _mfc.FeedBack * rowOutputs.Value; } else if (rowOutputs.ControlName.Contains("Mfc6")) { //特殊气体流量 var _mfc3 = DEVICE.GetDevice($"{module}.Mfc3"); var _mfc4 = DEVICE.GetDevice($"{module}.Mfc4"); var _mfc6 = DEVICE.GetDevice($"{module}.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; } } }