AddLiquid1PotassiumPermanganateWashLiquidHandler 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using SHJX.Service.Control.Common.Assets;
  2. namespace SHJX.Service.Control.LiquidHandler.Handler.WashLiquidHandler
  3. {
  4. public class AddLiquid1PotassiumPermanganateWashLiquidHandler : IWashLiquid
  5. {
  6. public bool Execute()
  7. {
  8. LiquidVolume liquidVolume = DataManagerInstance.GetLiquidVolume(EquipmentNames.Titration1PotassiumPermanganate);
  9. if (liquidVolume is null)
  10. {
  11. throw new ArgumentException($"{EquipmentNames.TitrationPotassiumPermanganate}查询Volume为空");
  12. }
  13. if (!liquidVolume.Enable)
  14. {
  15. return true;
  16. }
  17. LiquidAmount liquidAmount = DataManagerInstance.GetLiquidAmount(EquipmentNames.Titration1PotassiumPermanganate);
  18. if (liquidAmount is null)
  19. {
  20. throw new ArgumentException($"{EquipmentNames.Titration1PotassiumPermanganate}查询Amount为空");
  21. }
  22. bool writeResponse = true;
  23. double count = Math.Floor(liquidVolume.ClearVolume / liquidAmount.Capacity);
  24. double residue = liquidVolume.ClearVolume % liquidAmount.Capacity;
  25. int distance;
  26. for (int i = 0; i < count; i++)
  27. {
  28. distance = Convert.ToInt32(Math.Round(liquidAmount.Capacity / liquidAmount.Amount * liquidAmount.ConvertRatio));
  29. writeResponse = writeResponse && LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.TitrationPotassiumPermanganate).CheckWhetherArriveEndPoint(LiquidSwitchPattern.Out).Execute(distance);
  30. }
  31. if (residue > 0)
  32. {
  33. distance = Convert.ToInt32(Math.Round(residue / liquidAmount.Amount * liquidAmount.ConvertRatio));
  34. writeResponse = writeResponse && LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.TitrationPotassiumPermanganate).CheckWhetherArriveEndPoint(LiquidSwitchPattern.Out).Execute(distance);
  35. }
  36. return writeResponse;
  37. }
  38. }
  39. }