using SHJX.Service.Control.Common.Assets; namespace SHJX.Service.Control.LiquidHandler.Handler.NormalLiquidHandler { public class AddLiquidPotassiumPermanganateNormalLiquidHandler : INormalLiquid { public bool Execute(Action action = null, params object[] args) { bool locker; do { StateMachine state = DataManagerInstance.QueryStateMachine(StateMachineName.POTASSIUM2PERMANGANATE_LOCK); locker = state.Status > 0; } while (locker); DataManagerInstance.IncreaseLock(StateMachineName.POTASSIUM2PERMANGANATE_LOCK); LiquidVolume liquidVolume = DataManagerInstance.GetLiquidVolume(EquipmentNames.Titration2PotassiumPermanganate); if (liquidVolume is null) { throw new ArgumentException($"{EquipmentNames.Titration2PotassiumPermanganate}查询Volume为空"); } if (!liquidVolume.Enable) { return true; } LiquidAmount liquidAmount = DataManagerInstance.GetLiquidAmount(EquipmentNames.Titration2PotassiumPermanganate); if (liquidAmount is null) { throw new ArgumentException($"{EquipmentNames.Titration2PotassiumPermanganate}查询Amount为空"); } int distance; bool writeResponse = true; double count = Math.Floor(liquidVolume.SampleVolume / liquidAmount.Capacity); #region //自动吸液代码 distance = Convert.ToInt32(Math.Round(liquidAmount.Capacity / liquidAmount.Amount * liquidAmount.ConvertRatio)); bool arriveEndPoint = LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.Titration2PotassiumPermanganate).IsArriveEndPoint; if (ConfigInstance.IsAutomaticInLiquid && !arriveEndPoint) { writeResponse = writeResponse && LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.Titration2PotassiumPermanganate).Execute(LiquidSwitchPattern.Out, distance); } else { writeResponse = writeResponse && LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.Titration2PotassiumPermanganate).CheckWhetherArriveEndPoint().Execute(distance); } //自动吸液代码 #endregion for (int i = 1; i < count; i++)//上面出液一次所以i是从1开始 { distance = Convert.ToInt32(Math.Round(liquidAmount.Capacity / liquidAmount.Amount * liquidAmount.ConvertRatio)); writeResponse = writeResponse && LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.Titration2PotassiumPermanganate).CheckWhetherArriveEndPoint().Execute(distance); } double residue = liquidVolume.SampleVolume % liquidAmount.Capacity; if (residue > 0) { distance = Convert.ToInt32(Math.Round(residue / liquidAmount.Amount * liquidAmount.ConvertRatio)); writeResponse = writeResponse && LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.Titration2PotassiumPermanganate).CheckWhetherArriveEndPoint().Execute(distance); } //Todo:这里做液体扣减 DataManagerInstance.DecreaseLiquidTotal("PotassiumPermanganate", liquidVolume.SampleVolume); DataManagerInstance.DecreaseLiquidReserve("PotassiumPermanganate"); DataManagerInstance.DecreaseLock(StateMachineName.POTASSIUM2PERMANGANATE_LOCK); return writeResponse; } } }