SampleAL2Operate.cs 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Linq;
  3. using SHJX.Service.Model.Dao;
  4. using SHJX.Service.Control.Modules;
  5. using SHJX.Service.Control.Interface;
  6. using SHJX.Service.Common.ReadXML;
  7. namespace SHJX.Service.Control.Route.RouteController
  8. {
  9. /// <summary>
  10. /// 加液
  11. /// </summary>
  12. /// 重铬酸钾
  13. public class SampleAL2Operate : FlowControlOperateImp
  14. {
  15. private string _opName;
  16. private double _dropAmount;
  17. private DropLiquid _liquid;
  18. private EquipmentTask _task;
  19. public virtual bool Operate(ReadConfigUtil config, DataEventArgs data)
  20. {
  21. _task = data.Task;
  22. _liquid = data.DataManager.QueryLiquid("PotassiumDichromate");
  23. if (!_liquid.Enable) return true;
  24. var res = _task.RouteType switch
  25. {
  26. "Wash" => WashLiquid(),
  27. _ => OtherAddLiquid(),
  28. };
  29. return res;
  30. }
  31. /// <summary>
  32. /// 清洗 && 润洗
  33. /// </summary>
  34. /// <returns></returns>
  35. private bool WashLiquid()
  36. {
  37. string[] types = new string[] { "PotassiumDichromate_Low", "PotassiumDichromate_High" };
  38. bool res = false;
  39. foreach (var item in types)
  40. {
  41. DataCentre.GetPumpContent.Factory(item).GoBackOriginalPosition("Out");
  42. var value = _task.TaskType switch
  43. {
  44. "润洗" => _liquid.WashVolume,
  45. "清洗" => _liquid.ClearVolume,
  46. _ => throw new ArgumentNullException(_task.TaskType),
  47. };
  48. var DropOnceAmount = DataCentre.GetConfig.DropOnceAmounts.FirstOrDefault(item => item.Name.Equals("PotassiumDichromate"));
  49. double dropAmount = item switch
  50. {
  51. "PotassiumDichromate_Low" => DropOnceAmount.LowValue,
  52. "PotassiumDichromate_High" => DropOnceAmount.HighValue,
  53. _ => throw new ArgumentNullException(_task.TaskType),
  54. };
  55. res = DataCentre.GetPumpContent.Factory(item).LiquidOperation("In", Convert.ToInt64(Math.Round(value / dropAmount * 20000 * -1)));
  56. res = res && DataCentre.GetPumpContent.Factory(item).LiquidOperation("Out", Convert.ToInt64(Math.Round(value / dropAmount * 20000)));
  57. LiquidTotal liquid = DataCentre._dataManager.Query<LiquidTotal>().Where(it => it.LiquidName.Equals(item)).First();
  58. liquid.Total -= 5; //重铬酸钾减5毫升
  59. res = res && DataCentre._dataManager.Update<LiquidTotal>(liquid) > 0;
  60. }
  61. return res;
  62. }
  63. /// <summary>
  64. /// 其他加液
  65. /// </summary>
  66. /// <returns></returns>
  67. private bool OtherAddLiquid()
  68. {
  69. GetOpName();
  70. DataCentre.GetPumpContent.Factory(_opName).GoBackOriginalPosition("In");
  71. var arriveEndpoint = DataCentre.GetPumpContent.Factory(_opName).ArriveEndPoint();
  72. if (arriveEndpoint) DataCentre.GetPumpContent.Factory(_opName).LiquidOperation("In", Convert.ToInt64(Math.Round(_liquid.SampleVolume / _dropAmount * 20000 * -1)));
  73. var res = DataCentre.GetPumpContent.Factory(_opName).LiquidOperation("Out", Convert.ToInt64(Math.Round((_liquid.SampleVolume / _dropAmount) * 20000)));
  74. LiquidTotal liquid = DataCentre._dataManager.Query<LiquidTotal>().Where(it => it.LiquidName.Equals(_opName)).First();
  75. liquid.Total -= 5; //重铬酸钾减5毫升
  76. res = res && DataCentre._dataManager.Update<LiquidTotal>(liquid) > 0;
  77. return res;
  78. }
  79. private void GetOpName()
  80. {
  81. (_opName, _dropAmount) = _task.SampleConcentration switch
  82. {
  83. "Low" => ("PotassiumDichromate_Low", DataCentre.GetConfig.DropOnceAmounts.FirstOrDefault(item => item.Name.Equals("PotassiumDichromate")).LowValue),
  84. "High" => ("PotassiumDichromate_High", DataCentre.GetConfig.DropOnceAmounts.FirstOrDefault(item => item.Name.Equals("PotassiumDichromate")).HighValue),
  85. _ => throw new ArgumentNullException(_task.SampleConcentration),
  86. };
  87. }
  88. }
  89. }