| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- using SHJX.Service.Control.Disposables;
- using SHJX.Service.Control.Common.Assets;
- namespace SHJX.Service.Control.LiquidHandler.Handler.WashLiquidHandler
- {
- public class SodiumOxalateWashLiquidHandler : 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.Sodium1Oxalate);
- if (liquidVolume is null)
- {
- throw new ArgumentException($"{EquipmentNames.Sodium1Oxalate}查询Volume为空");
- }
- if (!liquidVolume.Enable)
- {
- return true;
- }
- LiquidAmount liquidAmount = DataManagerInstance.GetLiquidAmount(EquipmentNames.Sodium1Oxalate);
- if (liquidAmount is null)
- {
- throw new ArgumentException($"{EquipmentNames.Sodium1Oxalate}查询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.Sodium1Oxalate).CheckWhetherArriveEndPointOxalate().ExecuteOxalate(distance);
- }
- if (residue > 0)
- {
- distance = Convert.ToInt32(Math.Round(residue / liquidAmount.Amount * liquidAmount.ConvertRatio));
- writeResponse = writeResponse && LiquidPipeSwitchOxalate.StartNew.SetLiquidName(EquipmentNames.Sodium1Oxalate).CheckWhetherArriveEndPointOxalate().ExecuteOxalate(distance);
- }
- return writeResponse;
- }
- }
- }
|