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.

147 lines
5.0 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. //
  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 "utils/dvalue_computer.hpp"
  22. #include "zservice_container/zservice_container.hpp"
  23. /**
  24. * @brief
  25. *
  26. * service: DisinfectionCtrlService
  27. *
  28. * :
  29. * :
  30. * :
  31. * :
  32. *
  33. */
  34. namespace iflytop {
  35. using namespace std;
  36. using namespace core;
  37. class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlService> {
  38. ENABLE_LOGGER(DisinfectionCtrlService);
  39. private:
  40. recursive_mutex lock_;
  41. unique_ptr<Thread> m_disinfectionThread;
  42. shared_ptr<IF_DeviceIoContrlService> m_deviceIoControlService;
  43. shared_ptr<DBService> m_dbService;
  44. shared_ptr<DisinfectionLogsManager> m_disinfectionLogsManager;
  45. DValueComputer m_dvalueComputer;
  46. int m_disinfectionWorkState = 0;
  47. int m_replenishingFluidsWorkState = 0;
  48. int m_drainingWorkState = 0; //消毒工作状态,0:未工作,1:工作中
  49. public:
  50. DisinfectionContext m_context;
  51. public:
  52. DisinfectionCtrlService();
  53. public:
  54. void initialize();
  55. /**
  56. * @brief
  57. *
  58. * @param loglevel
  59. */
  60. void startDisinfection(int loglevel, //
  61. int injection_pump_speed, //
  62. int stoped_gs, //
  63. int continued_gs, //
  64. int stoped_satur, //
  65. int continued_satur, //
  66. int stoped_humi, //
  67. int continued_humi //
  68. );
  69. void changeDisinfectionParameter(int injection_pump_speed, //
  70. int stoped_gs, //
  71. int continued_gs, //
  72. int stoped_satur, //
  73. int continued_satur, //
  74. int stoped_humi, //
  75. int continued_humi //
  76. );
  77. void stopDisinfection();
  78. int getDisinfectionWorkState();
  79. int getReplenishingFluidsWorkState();
  80. int getDrainingWorkState();
  81. /*******************************************************************************
  82. * *
  83. *******************************************************************************/
  84. void startReplenishingFluids(int stopatg);
  85. void stopReplenishingFluids();
  86. /*******************************************************************************
  87. * *
  88. *******************************************************************************/
  89. void startDraining();
  90. void stopDraining();
  91. /*******************************************************************************
  92. * State *
  93. *******************************************************************************/
  94. bool isDisinfectionRunning();
  95. int32_t getEstimatedRemainingTimeS();
  96. string getDisinfectionID();
  97. bool isPreheatState();
  98. int32_t getPreHeatRaminTimeS();
  99. private:
  100. string createDisinfectionID();
  101. private:
  102. float getDisinfectionDValue(float ppm);
  103. void initContext(DisinfectionContext& context, //
  104. int loglevel, //
  105. float injection_pump_speed, //
  106. float stoped_gs, //
  107. float continued_gs, //
  108. float stoped_satur, //
  109. float continued_satur, //
  110. float stoped_humi, //
  111. float continued_humi //
  112. );
  113. void computeRemainTime(DisinfectionContext& context);
  114. float computeNowLogLevel(DisinfectionContext& context);
  115. void processPreheatState(DisinfectionContext& context);
  116. void processDisinfectionState(DisinfectionContext& context);
  117. void finishDisinfection(DisinfectionContext& context);
  118. void printfDisinfectionContextResult();
  119. void disinfectionLoop(bool& breakflag);
  120. private:
  121. shared_ptr<DisinfectionLogger> createCSVLogger(string log_file_name);
  122. void dumpDisinfectionLogsToCSV(DisinfectionContext& context);
  123. void log(DisinfectionContext& context);
  124. void takeStateSnapshot(DisinfectionContext& context);
  125. void updateH2O2SensorData(DisinfectionContext& context);
  126. };
  127. } // namespace iflytop