You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

161 lines
5.5 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. //
  2. // Created by zwsd
  3. //
  4. #pragma once
  5. #include <fstream>
  6. #include <iostream>
  7. #include <list>
  8. #include <map>
  9. #include <memory>
  10. #include <mutex>
  11. #include <set>
  12. #include <sstream>
  13. #include <string>
  14. #include <vector>
  15. #include "db/db_service.hpp"
  16. #include "disinfection_logs_manager.hpp"
  17. #include "disinfection_state.hpp"
  18. #include "iflytop/components/zcanreceiver/zcanhost.hpp"
  19. #include "iflytop/core/core.hpp"
  20. #include "service/device_io_control_service.hpp"
  21. #include "service/disinfection_printer_service.hpp"
  22. #include "utils/dvalue_computer.hpp"
  23. #include "zservice_container/zservice_container.hpp"
  24. /**
  25. * @brief
  26. *
  27. * service: DisinfectionCtrlService
  28. *
  29. * :
  30. * :
  31. * :
  32. * :
  33. *
  34. */
  35. namespace iflytop {
  36. using namespace std;
  37. using namespace core;
  38. class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlService> {
  39. ENABLE_LOGGER(DisinfectionCtrlService);
  40. private:
  41. recursive_mutex lock_;
  42. unique_ptr<Thread> m_disinfectionThread;
  43. shared_ptr<IF_DeviceIoContrlService> m_deviceIoControlService;
  44. shared_ptr<DBService> m_dbService;
  45. shared_ptr<DisinfectionLogsManager> m_disinfectionLogsManager;
  46. shared_ptr<DisinfectionPrinterService> m_disinfectionPrinterService;
  47. DValueComputer m_dvalueComputer;
  48. int m_disinfectionWorkState = 0;
  49. int m_replenishingFluidsWorkState = 0;
  50. int m_drainingWorkState = 0; // 消毒工作状态,0:未工作,1:工作中
  51. public:
  52. DisinfectionContext m_context;
  53. public:
  54. DisinfectionCtrlService();
  55. public:
  56. void initialize();
  57. /**
  58. * @brief
  59. *
  60. * @param loglevel
  61. */
  62. void startDisinfection(int loglevel, //
  63. int injection_pump_speed, //
  64. int stoped_gs, //
  65. int continued_gs, //
  66. int stoped_satur, //
  67. int continued_satur, //
  68. int stoped_humi, //
  69. int continued_humi //
  70. );
  71. void changeDisinfectionParameter(int injection_pump_speed, //
  72. int stoped_gs, //
  73. int continued_gs, //
  74. int stoped_satur, //
  75. int continued_satur, //
  76. int stoped_humi, //
  77. int continued_humi //
  78. );
  79. void stopDisinfection();
  80. int getDisinfectionWorkState();
  81. #if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
  82. /*******************************************************************************
  83. * *
  84. *******************************************************************************/
  85. void startReplenishingFluids(int stopatg);
  86. void stopReplenishingFluids();
  87. /*******************************************************************************
  88. * *
  89. *******************************************************************************/
  90. void startDraining();
  91. void stopDraining();
  92. int getReplenishingFluidsWorkState();
  93. int getDrainingWorkState();
  94. #endif
  95. /*******************************************************************************
  96. * State *
  97. *******************************************************************************/
  98. bool isDisinfectionRunning();
  99. int32_t getEstimatedRemainingTimeS();
  100. string getDisinfectionID();
  101. bool isPreheatState();
  102. int32_t getPreHeatRaminTimeS();
  103. private:
  104. string createDisinfectionID();
  105. private:
  106. float getDisinfectionDValue(float ppm);
  107. void initContext(DisinfectionContext& context, //
  108. int loglevel, //
  109. float injection_pump_speed, //
  110. float stoped_gs, //
  111. float continued_gs, //
  112. float stoped_satur, //
  113. float continued_satur, //
  114. float stoped_humi, //
  115. float continued_humi //
  116. );
  117. void computeRemainTime(DisinfectionContext& context);
  118. float computeNowLogLevel(DisinfectionContext& context);
  119. void processPreheatState(DisinfectionContext& context);
  120. void processDisinfectionState(DisinfectionContext& context);
  121. void finishDisinfection(DisinfectionContext& context);
  122. void disinfectionLoop(bool& breakflag);
  123. void processState_Preheat(DisinfectionContext& context);
  124. void processState_Disinfection(DisinfectionContext& context, bool& updatedval);
  125. void processState_Degradation(DisinfectionContext& context);
  126. private:
  127. shared_ptr<DisinfectionLogger> createCSVLogger(string log_file_name);
  128. void dumpDisinfectionLogsToCSV(DisinfectionContext& context);
  129. void pushDisinfectionPrinterTask(DisinfectionContext& context);
  130. void log(DisinfectionContext& context);
  131. void takeStateSnapshot(DisinfectionContext& context);
  132. void updateH2O2SensorData(DisinfectionContext& context);
  133. private:
  134. };
  135. } // namespace iflytop