Sic.Framework-Nanjing-Baishi/MECF.Framework.RT.Equipment.../HardwareUnits/GasFlow/GasTrueTableRows.cs

141 lines
5.0 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;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.GasFlow
{
/// <summary>
/// 单行真值表对应的逻辑对象,主要执行逻辑就在这里
/// </summary>
[XmlType(typeName: "GasTrueTableRows")]
public partial class GasTrueTableRows
{
[XmlArray("Inputs")]
public List<ControlNameValue> InputList { get; set; }
[XmlArray("Outputs")]
public List<ControlNameValue> 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<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(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<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;
}
}
}