Titration2PotassiumPermanganateNormalLiquidHandler.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using EaseDapper;
  2. using SHJX.Service.Control.Common.Assets;
  3. using SHJX.Service.Control.Execute.TitrationController;
  4. namespace SHJX.Service.Control.LiquidHandler.Handler.NormalLiquidHandler
  5. {
  6. public class Titration2PotassiumPermanganateNormalLiquidHandler : INormalLiquid
  7. {
  8. public bool Execute(Action<object> callBack = null, params object[] args)
  9. {
  10. LiquidVolume liquidVolume = DataManagerInstance.GetLiquidVolume(EquipmentNames.Titration2PotassiumPermanganate);
  11. if (liquidVolume is null)
  12. {
  13. throw new ArgumentException($"{EquipmentNames.Titration2PotassiumPermanganate}查询Volume为空");
  14. }
  15. if (!liquidVolume.Enable)
  16. {
  17. return true;
  18. }
  19. #region 逻辑状态机
  20. bool locker = false;
  21. do
  22. {
  23. StateMachine state = DataManagerInstance.QueryStateMachine(StateMachineName.POTASSIUM2PERMANGANATE_LOCK);
  24. locker = state.Status > 0;
  25. } while (locker);
  26. #endregion
  27. DataManagerInstance.IncreaseLock(StateMachineName.POTASSIUM2PERMANGANATE_LOCK);
  28. LiquidAmount liquidAmount = DataManagerInstance.GetLiquidAmount(EquipmentNames.Titration2PotassiumPermanganate);
  29. if (liquidAmount is null)
  30. {
  31. throw new ArgumentException($"{EquipmentNames.Titration2PotassiumPermanganate}查询Amount为空");
  32. }
  33. Camera2Value explosion1 = DataManagerInstance.GetCamera2Value();
  34. Titration2Value titrationValue = args[1].ToString().BeIn(TaskTypeName.CALIBRATION_ZH, TaskTypeName.BLANK_ZH)
  35. ? DataManagerInstance.GetTitration2Value("Blank")
  36. : DataManagerInstance.GetTitration2Value("Sample");
  37. Titration2Arg arg = new()
  38. {
  39. RangeValue = titrationValue.RangeValue,
  40. BeforeWaitTime = titrationValue.BeforeWaitTime,
  41. ArriveCheckCount = titrationValue.ArriveCheckCount,
  42. LiquidAmount = liquidAmount.Amount,
  43. IntervalTime = titrationValue.IntervalTime,
  44. PumpCapacity = liquidAmount.Capacity,
  45. LiquidConvertRatio = liquidAmount.ConvertRatio,
  46. WhetherQuicklyTitration = Convert.ToBoolean(args[0]),
  47. QuicklyTitrationValue = titrationValue.QuicklyTitrationValue,
  48. BatchName = "",
  49. TaskName = "",
  50. explosion = explosion1
  51. };
  52. arg.MaxDropVolume = args[1].ToString() switch
  53. {
  54. TaskTypeName.CALIBRATION_ZH => titrationValue.CalibrationMaxDropVolume,
  55. _ => titrationValue.NormalMaxDropVolume,
  56. };
  57. double amount = 0.0;
  58. Titration2Execute.Start(arg, ref amount);
  59. DataManagerInstance.DecreaseLock(StateMachineName.POTASSIUM2PERMANGANATE_LOCK);
  60. callBack?.Invoke(amount);
  61. //Todo:这里做液体扣减
  62. DataManagerInstance.DecreaseLiquidTotal("PotassiumPermanganate", amount);
  63. DataManagerInstance.DecreaseLiquidReserve("PotassiumPermanganate");
  64. return true;
  65. }
  66. }
  67. }