DissolveAddWaterOperate.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using System;
  2. using System.Threading;
  3. using SHJX.Service.Model.Dao;
  4. using SHJX.Service.ServerClient;
  5. using SHJX.Service.Model.Control;
  6. using System.Collections.Generic;
  7. using SHJX.Service.Control.Modules;
  8. using SHJX.Service.Control.Interface;
  9. using SHJX.Service.Common.Logging;
  10. using Microsoft.Extensions.Logging;
  11. using System.Linq;
  12. using SHJX.Service.Common.ReadXML;
  13. namespace SHJX.Service.Control.Route.RouteController
  14. {
  15. /// <summary>
  16. /// 加水
  17. /// </summary>
  18. public class DissolveAddWaterOperate : FlowControlOperateImp
  19. {
  20. private static readonly ILogger logger = LogFactory.BuildLogger(typeof(DissolveAddWaterOperate));
  21. private const string OpName = "Water";
  22. private string localtion;
  23. private OptClient _client;
  24. private DropLiquid _liquid;
  25. private EquipmentTask _task;
  26. public virtual bool Operate(ReadConfigUtil config, DataEventArgs data)
  27. {
  28. _task = data.Task;
  29. _client = data.Client;
  30. _liquid = data.DataManager.QueryLiquid(OpName);
  31. if (!_liquid.Enable) return true;
  32. localtion = _task.To;
  33. logger.LogInformation($"加水{localtion}");
  34. DataCentre.GetStorageContent.Factory("Timer").Start();
  35. Thread.Sleep(2000);
  36. DataCentre.GetStorageContent.Factory("Timer").Stop();
  37. var res = _task.RouteType switch
  38. {
  39. "SY" => SYStep(),
  40. "BD" => BDStep(),
  41. "Wash" => WashStep(),
  42. _ => throw new ArgumentNullException(_task.RouteType),
  43. };
  44. return res;
  45. }
  46. /// <summary>
  47. /// 润洗 && 清洗
  48. /// </summary>
  49. /// <returns></returns>
  50. private bool WashStep()
  51. {
  52. var value = _task.TaskType switch
  53. {
  54. "润洗" => _liquid.WashVolume,
  55. "清洗" => _liquid.ClearVolume,
  56. _ => throw new ArgumentNullException(_task.TaskType),
  57. };
  58. var res = DataCentre.GetStorageContent.Factory(OpName).Start(localtion);
  59. Thread.Sleep(Convert.ToInt32(Math.Round(1000 * value)));
  60. res = res && DataCentre.GetStorageContent.Factory(OpName).Stop(localtion);
  61. LiquidTotal liquid1 = DataCentre._dataManager.Query<LiquidTotal>().Where(it => it.LiquidName.Equals(OpName)).First();
  62. liquid1.Total -= 45; //水减去 45毫升
  63. res = res && DataCentre._dataManager.Update<LiquidTotal>(liquid1) > 0;
  64. return res;
  65. }
  66. /// <summary>
  67. /// 水样
  68. /// </summary>
  69. /// <returns></returns>
  70. /// 水样任务需要分两次加液
  71. private bool SYStep()
  72. {
  73. PortArgs tempPortArgs = new() { TypeName = "Heat" };
  74. var tempRes = _client.Factory("Heat").Read(tempPortArgs) as Dictionary<string, double>;
  75. if (DataCentre.GetConfig.AddWaterTemperature < tempRes["pv"])
  76. {
  77. logger.LogInformation($"加水时温度不匹配:加水温度为:{DataCentre.GetConfig.AddWaterTemperature},实际温度为:{tempRes["pv"]}");
  78. return false;
  79. }
  80. DataCentre.GetStorageContent.Factory(OpName).Start(localtion);
  81. Thread.Sleep(Convert.ToInt32(Math.Round(1000 * _liquid.SampleVolume * 0.6)));
  82. DataCentre.GetStorageContent.Factory(OpName).Stop(localtion);
  83. var res = DataCentre.GetStorageContent.Factory(OpName).Start(localtion);
  84. Thread.Sleep(Convert.ToInt32(Math.Round(1000 * _liquid.SampleVolume * 0.4)));
  85. res = res && DataCentre.GetStorageContent.Factory(OpName).Stop(localtion);
  86. LiquidTotal liquid1 = DataCentre._dataManager.Query<LiquidTotal>().Where(it => it.LiquidName.Equals(OpName)).First();
  87. liquid1.Total -= 45; //水减去 45毫升
  88. res = res && DataCentre._dataManager.Update<LiquidTotal>(liquid1) > 0;
  89. return res;
  90. }
  91. /// <summary>
  92. /// 标定
  93. /// </summary>
  94. /// <param name="RouteStep"></param>
  95. /// <returns></returns>
  96. /// 标定任务需要分两个步骤加液
  97. private bool BDStep()
  98. {
  99. DataCentre.GetStorageContent.Factory("Timer").Start();
  100. Thread.Sleep(2000);
  101. DataCentre.GetStorageContent.Factory("Timer").Stop();
  102. var res = DataCentre.GetStorageContent.Factory(OpName).Start(localtion);
  103. Thread.Sleep(Convert.ToInt32(Math.Round(1000 * _liquid.SampleVolume * 0.5)));
  104. res = res && DataCentre.GetStorageContent.Factory(OpName).Stop(localtion);
  105. LiquidTotal liquid1 = DataCentre._dataManager.Query<LiquidTotal>().Where(it => it.LiquidName.Equals(OpName)).First();
  106. liquid1.Total -= 45; //水减去 45毫升
  107. res = res && DataCentre._dataManager.Update<LiquidTotal>(liquid1) > 0;
  108. return res;
  109. }
  110. }
  111. }