130 lines
4.2 KiB
C#
130 lines
4.2 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// 单行真值表对应的逻辑对象,主要执行逻辑就在这里
|
|
/// </summary>
|
|
[XmlType(typeName: "GasTrueTableRows")]
|
|
public partial class GasTrueTableRows
|
|
{
|
|
|
|
[XmlArray("Inputs")]
|
|
public List<ControlNameValue> XMLInputList { get; set; }
|
|
|
|
[XmlArray("Outputs")]
|
|
public List<ControlNameValue> XMLOutputList { get; set; }
|
|
|
|
public string ModuleName { get;set; }
|
|
|
|
public string GasName { get; set; }
|
|
|
|
private Dictionary<IoValve, double> InputIoValveList=new Dictionary<IoValve, double>();
|
|
|
|
private Dictionary<object, double> OutputMfcList = new Dictionary<object, double>();
|
|
|
|
|
|
public void Initialize(string moduleName,string gasName)
|
|
{
|
|
ModuleName= moduleName;
|
|
|
|
GasName= gasName;
|
|
|
|
foreach (var rowInputs in XMLInputList)
|
|
InputIoValveList.Add(DEVICE.GetDevice<IoValve>($"{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<IoMFC>($"{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<IoMFC>($"{ModuleName}.{rowOutputs.ControlName}");
|
|
volue += _mfc.FeedBack * rowOutputs.Value;
|
|
}
|
|
else if (rowOutputs.ControlName.Contains("Mfc6"))
|
|
{
|
|
//特殊气体流量
|
|
var _mfc3 = DEVICE.GetDevice<IoMFC>($"{ModuleName}.Mfc3");
|
|
var _mfc4 = DEVICE.GetDevice<IoMFC>($"{ModuleName}.Mfc4");
|
|
var _mfc6 = DEVICE.GetDevice<IoMFC>($"{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;
|
|
}
|
|
}
|
|
}
|