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.

153 lines
5.3 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. //
  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. int getReplenishingFluidsWorkState();
  82. int getDrainingWorkState();
  83. /*******************************************************************************
  84. * *
  85. *******************************************************************************/
  86. void startReplenishingFluids(int stopatg);
  87. void stopReplenishingFluids();
  88. /*******************************************************************************
  89. * *
  90. *******************************************************************************/
  91. void startDraining();
  92. void stopDraining();
  93. /*******************************************************************************
  94. * State *
  95. *******************************************************************************/
  96. bool isDisinfectionRunning();
  97. int32_t getEstimatedRemainingTimeS();
  98. string getDisinfectionID();
  99. bool isPreheatState();
  100. int32_t getPreHeatRaminTimeS();
  101. private:
  102. string createDisinfectionID();
  103. private:
  104. float getDisinfectionDValue(float ppm);
  105. void initContext(DisinfectionContext& context, //
  106. int loglevel, //
  107. float injection_pump_speed, //
  108. float stoped_gs, //
  109. float continued_gs, //
  110. float stoped_satur, //
  111. float continued_satur, //
  112. float stoped_humi, //
  113. float continued_humi //
  114. );
  115. void computeRemainTime(DisinfectionContext& context);
  116. float computeNowLogLevel(DisinfectionContext& context);
  117. void processPreheatState(DisinfectionContext& context);
  118. void processDisinfectionState(DisinfectionContext& context);
  119. void finishDisinfection(DisinfectionContext& context);
  120. void disinfectionLoop(bool& breakflag);
  121. void processState_Preheat(DisinfectionContext& context);
  122. void processState_Disinfection(DisinfectionContext& context, bool& updatedval);
  123. void processState_Degradation(DisinfectionContext& context);
  124. private:
  125. shared_ptr<DisinfectionLogger> createCSVLogger(string log_file_name);
  126. void dumpDisinfectionLogsToCSV(DisinfectionContext& context);
  127. void pushDisinfectionPrinterTask(DisinfectionContext& context);
  128. void log(DisinfectionContext& context);
  129. void takeStateSnapshot(DisinfectionContext& context);
  130. void updateH2O2SensorData(DisinfectionContext& context);
  131. };
  132. } // namespace iflytop