using Aitex.Core.RT.DataCenter; using Aitex.Core.RT.SCCore; using System.Collections.Generic; using System.Reflection; using System.Xml.Linq; using System.Xml.Serialization; namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.GasFlow { /// /// 单个气体的真值表数据,所有配置行数据集合,气体需要的属性数据 /// [XmlType(typeName: "GasFlowUnit")] public class GasFlowUnit { /// /// 单个真值表内所有的行数据 /// [XmlElement("GasTrueTableRows")] public List GasTrueTableRowList { get; set; } /// /// 气体名称 /// [XmlAttribute()] public string GasName { get; set; } /// /// 气体流量系数名称 /// [XmlAttribute()] public string GasFlowRatioName { get; set; } public string ModuleName { get; set; } /// /// 系统中配置的气体流量系数 /// public double GasFlowRatioValue { get; set; } /// /// 气体流量计算值 /// public double GasFlowFeedBack { get; set; } = 0; /// /// PN2的特殊计算 /// public double PN2_VentSpecial { get; set; } = 0; public void Initialize() { SC.RegisterValueChangedCallback($"PM.{ModuleName}.Efficiency.{GasFlowRatioName}", (o) => { Set_Callback(o.ToString()); }); GasFlowRatioValue = SC.GetValue($"PM.{ModuleName}.Efficiency.{GasFlowRatioName}"); DATA.Subscribe($"{ModuleName}.GasFlowSum.{GasName}.FeedBack", () => GasFlowFeedBack); } public void Set_Callback(string str = "") { GasFlowRatioValue = SC.GetValue($"PM.{ModuleName}.Efficiency.{GasFlowRatioName}"); } public double GetGasFlowFeedBack() { double _feedBack = 0; //循环检测气阀状态 if (GasTrueTableRowList.Count > 0) { for (int i = 0; i < GasTrueTableRowList.Count; i++) { //PN2是特殊计算 if (GasName == "PN2_Run") _feedBack += GasTrueTableRowList[i].AccumulationPN2Run(ModuleName); else if (GasName == "PN2_Vent") { double cache = GasTrueTableRowList[i].AccumulationPN2Run(ModuleName); if (i == 2) PN2_VentSpecial = cache;//洪膺只要输出项的第三条数据作为显示 else _feedBack += cache;//储存前面两行 } else _feedBack += GasTrueTableRowList[i].Accumulation(ModuleName); } if (_feedBack < 0) _feedBack = 0; GasFlowFeedBack = _feedBack * GasFlowRatioValue;//计算得到的结果*系数 } return GasFlowFeedBack; } } }