using Aitex.Core.RT.Device; using Aitex.Core.RT.Log; using Aitex.Core.RT.SCCore; using CyberX8_RT.Devices.Metal; using MECF.Framework.Common.CommonData.Metal; using MECF.Framework.Common.CommonData.Reservoir; using MECF.Framework.Common.RecipeCenter; using MECF.Framework.Common.ToolLayout; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Devices.Reservoir { public class ReservoirPumpSpeedHelper { #region 内部变量 /// /// 时间 /// private DateTime _updateTime=DateTime.Now; /// /// 模块名称 /// private string _moduleName; /// /// AN流量总和 /// private double _anTotalFlow = 0; /// /// CA流量总和 /// private double _caTotalFlow = 0; /// /// 设备对象 /// StandardHotReservoirDevice _device; #endregion /// /// 构造函数 /// /// public ReservoirPumpSpeedHelper(string moduleName, StandardHotReservoirDevice reservoirDevice) { _moduleName = moduleName; _device = reservoirDevice; } /// /// 监控 /// public void Monitor(ResRecipe resRecipe) { int cellFlowUpdatePeriod = SC.GetValue("Reservoir.CellFlowUpdatePeriod"); if(DateTime.Now.Subtract(_updateTime).TotalSeconds > cellFlowUpdatePeriod) { _updateTime = DateTime.Now; AdjustCAPumpSpeed(resRecipe); } } /// /// 调节阴极泵速 /// private void AdjustCAPumpSpeed(ResRecipe resRecipe) { if (_device.ReservoirData.RegulatePumpSignalIn) { double caPumpSpeed = _device.ReservoirData.RegulatePumpSpeed; double averageCAFlow = GetAverageCAFlow(); if (averageCAFlow == 0) { return; } double caPumpMaxSpeed = SC.GetValue("Reservoir.MaxPumpSpeed"); double caFlowDelta = resRecipe.CAFlowSetPoint - averageCAFlow; double newCAPumpSpeed = 330 * caFlowDelta + caPumpSpeed; if (newCAPumpSpeed <= 0 || newCAPumpSpeed > caPumpMaxSpeed) { return; } if (Math.Abs(newCAPumpSpeed - caPumpSpeed) >= 10) { _device.RegulatePumpSpeed(newCAPumpSpeed); } } } /// /// 获取平均阳极流量 /// /// private double GetAverageCAFlow() { int count = 0; _caTotalFlow = 0; ReservoirItem reservoirItem = ReservoirItemManager.Instance.GetReservoirItem(_moduleName); if (reservoirItem != null) { List metalItems = reservoirItem.MetalCells; if (metalItems != null && metalItems.Count > 0) { foreach (MetalItem metalItem in metalItems) { StandardHotMetalDevice metalDevice = DEVICE.GetDevice(metalItem.ModuleName); if (metalDevice != null&&metalDevice.IsAuto) { count++; _caTotalFlow += metalDevice.MetalDeviceData.CellFlow; } } } if (count != 0) { return _caTotalFlow / count; } } return 0; } } }