using EaseDapper; using SHJX.Service.Control.Common.Assets; using SHJX.Service.Control.Execute.TitrationController; namespace SHJX.Service.Control.LiquidHandler.Handler.NormalLiquidHandler { public class Titration2PotassiumPermanganateNormalLiquidHandler : INormalLiquid { public bool Execute(Action callBack = null, params object[] args) { LiquidVolume liquidVolume = DataManagerInstance.GetLiquidVolume(EquipmentNames.Titration2PotassiumPermanganate); if (liquidVolume is null) { throw new ArgumentException($"{EquipmentNames.Titration2PotassiumPermanganate}查询Volume为空"); } if (!liquidVolume.Enable) { return true; } #region 逻辑状态机 bool locker = false; do { StateMachine state = DataManagerInstance.QueryStateMachine(StateMachineName.POTASSIUM2PERMANGANATE_LOCK); locker = state.Status > 0; } while (locker); #endregion DataManagerInstance.IncreaseLock(StateMachineName.POTASSIUM2PERMANGANATE_LOCK); LiquidAmount liquidAmount = DataManagerInstance.GetLiquidAmount(EquipmentNames.Titration2PotassiumPermanganate); if (liquidAmount is null) { throw new ArgumentException($"{EquipmentNames.Titration2PotassiumPermanganate}查询Amount为空"); } Camera2Value explosion1 = DataManagerInstance.GetCamera2Value(); Titration2Value titrationValue = args[1].ToString().BeIn(TaskTypeName.CALIBRATION_ZH, TaskTypeName.BLANK_ZH) ? DataManagerInstance.GetTitration2Value("Blank") : DataManagerInstance.GetTitration2Value("Sample"); Titration2Arg arg = new() { RangeValue = titrationValue.RangeValue, BeforeWaitTime = titrationValue.BeforeWaitTime, ArriveCheckCount = titrationValue.ArriveCheckCount, LiquidAmount = liquidAmount.Amount, IntervalTime = titrationValue.IntervalTime, PumpCapacity = liquidAmount.Capacity, LiquidConvertRatio = liquidAmount.ConvertRatio, WhetherQuicklyTitration = Convert.ToBoolean(args[0]), QuicklyTitrationValue = titrationValue.QuicklyTitrationValue, BatchName = "", TaskName = "", explosion = explosion1 }; arg.MaxDropVolume = args[1].ToString() switch { TaskTypeName.CALIBRATION_ZH => titrationValue.CalibrationMaxDropVolume, _ => titrationValue.NormalMaxDropVolume, }; double amount = 0.0; Titration2Execute.Start(arg, ref amount); DataManagerInstance.DecreaseLock(StateMachineName.POTASSIUM2PERMANGANATE_LOCK); callBack?.Invoke(amount); //Todo:这里做液体扣减 DataManagerInstance.DecreaseLiquidTotal("PotassiumPermanganate", amount); DataManagerInstance.DecreaseLiquidReserve("PotassiumPermanganate"); return true; } } }