using SHJX.Service.Control.Disposables; using SHJX.Service.Control.Common.Assets; namespace SHJX.Service.Control.LiquidHandler.Handler.WashLiquidHandler { public class Sodium2OxalateWashLiquidHandler : IWashLiquid { public bool Execute() { bool locker; do { StateMachine state = DataManagerInstance.QueryStateMachine(StateMachineName.SODIUMOXALATE_LOCK); locker = state.Status > 0; } while (locker); using StateMachineDisposable stateMachine = new(StateMachineName.SODIUMOXALATE_LOCK); LiquidVolume liquidVolume = DataManagerInstance.GetLiquidVolume(EquipmentNames.Sodium2Oxalate); if (liquidVolume is null) { throw new ArgumentException($"{EquipmentNames.Sodium2Oxalate}查询Volume为空"); } if (!liquidVolume.Enable) { return true; } LiquidAmount liquidAmount = DataManagerInstance.GetLiquidAmount(EquipmentNames.Sodium2Oxalate); if (liquidAmount is null) { throw new ArgumentException($"{EquipmentNames.Sodium2Oxalate}查询Amount为空"); } bool writeResponse = true; double count = Math.Floor(liquidVolume.ClearVolume / liquidAmount.Capacity); double residue = liquidVolume.ClearVolume % liquidAmount.Capacity; int distance; for (int i = 0; i < count; i++) { distance = Convert.ToInt32(Math.Round(liquidAmount.Capacity / liquidAmount.Amount * liquidAmount.ConvertRatio)); writeResponse = writeResponse && LiquidPipeSwitchOxalate.StartNew.SetLiquidName(EquipmentNames.Sodium2Oxalate).CheckWhetherArriveEndPointOxalate().ExecuteOxalate(distance); } if (residue > 0) { distance = Convert.ToInt32(Math.Round(residue / liquidAmount.Amount * liquidAmount.ConvertRatio)); writeResponse = writeResponse && LiquidPipeSwitchOxalate.StartNew.SetLiquidName(EquipmentNames.Sodium2Oxalate).CheckWhetherArriveEndPointOxalate().ExecuteOxalate(distance); } return writeResponse; } } }