SodiumOxalateWashLiquidHandler.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using SHJX.Service.Control.Disposables;
  2. using SHJX.Service.Control.Common.Assets;
  3. namespace SHJX.Service.Control.LiquidHandler.Handler.WashLiquidHandler
  4. {
  5. public class SodiumOxalateWashLiquidHandler : IWashLiquid
  6. {
  7. public bool Execute()
  8. {
  9. bool locker;
  10. do
  11. {
  12. StateMachine state = DataManagerInstance.QueryStateMachine(StateMachineName.SODIUMOXALATE_LOCK);
  13. locker = state.Status > 0;
  14. } while (locker);
  15. using StateMachineDisposable stateMachine = new(StateMachineName.SODIUMOXALATE_LOCK);
  16. LiquidVolume liquidVolume = DataManagerInstance.GetLiquidVolume(EquipmentNames.Sodium1Oxalate);
  17. if (liquidVolume is null)
  18. {
  19. throw new ArgumentException($"{EquipmentNames.Sodium1Oxalate}查询Volume为空");
  20. }
  21. if (!liquidVolume.Enable)
  22. {
  23. return true;
  24. }
  25. LiquidAmount liquidAmount = DataManagerInstance.GetLiquidAmount(EquipmentNames.Sodium1Oxalate);
  26. if (liquidAmount is null)
  27. {
  28. throw new ArgumentException($"{EquipmentNames.Sodium1Oxalate}查询Amount为空");
  29. }
  30. bool writeResponse = true;
  31. double count = Math.Floor(liquidVolume.ClearVolume / liquidAmount.Capacity);
  32. double residue = liquidVolume.ClearVolume % liquidAmount.Capacity;
  33. int distance;
  34. for (int i = 0; i < count; i++)
  35. {
  36. distance = Convert.ToInt32(Math.Round(liquidAmount.Capacity / liquidAmount.Amount * liquidAmount.ConvertRatio));
  37. writeResponse = writeResponse && LiquidPipeSwitchOxalate.StartNew.SetLiquidName(EquipmentNames.Sodium1Oxalate).CheckWhetherArriveEndPointOxalate().ExecuteOxalate(distance);
  38. }
  39. if (residue > 0)
  40. {
  41. distance = Convert.ToInt32(Math.Round(residue / liquidAmount.Amount * liquidAmount.ConvertRatio));
  42. writeResponse = writeResponse && LiquidPipeSwitchOxalate.StartNew.SetLiquidName(EquipmentNames.Sodium1Oxalate).CheckWhetherArriveEndPointOxalate().ExecuteOxalate(distance);
  43. }
  44. return writeResponse;
  45. }
  46. }
  47. }