Sic.Framework/MECF.Framework.RT.Equipment.../HardwareUnits/MfcCalculation/MfcInputOutRow.cs

135 lines
4.7 KiB
C#

using Aitex.Core.RT.Device.Devices;
using Aitex.Core.RT.Device;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MfcCalculation
{
/// <summary>
/// 存储真值表中一行的数据对象,并提供计算气体流量的方法
/// </summary>
public class MfcInputOutRow
{
public List<NameValue> InputList { get; set; } = new List<NameValue>();
public List<NameValue> OutputList { get; set; } = new List<NameValue>();
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<IoValve>($"{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<IoMFC>($"{module}.{rowOutputs.ControlName}");
volue += _mfc.FeedBack * rowOutputs.Value + otherValue;
}
else
{
//混合气体流量
switch (rowOutputs.ControlName)
{
case "HCL":
volue += AddOther(MfcManager.HCL_Run, rowOutputs.Value);
break;
case "TMA":
volue += AddOther(MfcManager.TMA_Run, rowOutputs.Value);
break;
case "TCS":
volue += AddOther(MfcManager.TCS_Run, rowOutputs.Value);
break;
case "PN2":
volue += AddOther(MfcManager.PN2_Run, 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<IoMFC>($"{module}.{rowOutputs.ControlName}");
volue += _mfc.FeedBack * rowOutputs.Value ;
}
else if (rowOutputs.ControlName.Contains("Mfc6"))
{
//特殊气体流量
var _mfc3 = DEVICE.GetDevice<IoMFC>($"{module}.Mfc3");
var _mfc4 = DEVICE.GetDevice<IoMFC>($"{module}.Mfc4");
var _mfc6 = DEVICE.GetDevice<IoMFC>($"{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;
}
}
}