144 lines
5.0 KiB
C#
144 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.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
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}.GasFlow.HCL_Run.FeedBack")), rowOutputs.Value);
|
|
break;
|
|
case "TMA":
|
|
volue += AddOther(Convert.ToDouble(DATA.Poll($"{module}.GasFlow.TMA_Run.FeedBack")), rowOutputs.Value);
|
|
break;
|
|
case "TCS":
|
|
volue += AddOther(Convert.ToDouble(DATA.Poll($"{module}.GasFlow.TCS_Run.FeedBack")), rowOutputs.Value);
|
|
break;
|
|
case "PN2":
|
|
volue += AddOther(Convert.ToDouble(DATA.Poll($"{module}.GasFlow.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;
|
|
}
|
|
}
|
|
}
|