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.
154 lines
5.3 KiB
154 lines
5.3 KiB
//
|
|
// Created by zwsd
|
|
//
|
|
|
|
#pragma once
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <list>
|
|
#include <map>
|
|
#include <memory>
|
|
#include <mutex>
|
|
#include <set>
|
|
#include <sstream>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "db/db_service.hpp"
|
|
#include "disinfection_logs_manager.hpp"
|
|
#include "disinfection_state.hpp"
|
|
#include "iflytop/components/zcanreceiver/zcanhost.hpp"
|
|
#include "iflytop/core/core.hpp"
|
|
#include "service/device_io_control_service.hpp"
|
|
#include "service/disinfection_printer_service.hpp"
|
|
#include "utils/dvalue_computer.hpp"
|
|
#include "zservice_container/zservice_container.hpp"
|
|
/**
|
|
* @brief
|
|
*
|
|
* service: DisinfectionCtrlService
|
|
*
|
|
* 监听事件:
|
|
* 依赖状态:
|
|
* 依赖服务:
|
|
* 作用:
|
|
*
|
|
*/
|
|
|
|
namespace iflytop {
|
|
using namespace std;
|
|
using namespace core;
|
|
class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlService> {
|
|
ENABLE_LOGGER(DisinfectionCtrlService);
|
|
|
|
private:
|
|
recursive_mutex lock_;
|
|
|
|
unique_ptr<Thread> m_disinfectionThread;
|
|
shared_ptr<IF_DeviceIoContrlService> m_deviceIoControlService;
|
|
shared_ptr<DBService> m_dbService;
|
|
shared_ptr<DisinfectionLogsManager> m_disinfectionLogsManager;
|
|
shared_ptr<DisinfectionPrinterService> m_disinfectionPrinterService;
|
|
DValueComputer m_dvalueComputer;
|
|
|
|
int m_disinfectionWorkState = 0;
|
|
int m_replenishingFluidsWorkState = 0;
|
|
int m_drainingWorkState = 0; // 消毒工作状态,0:未工作,1:工作中
|
|
|
|
public:
|
|
DisinfectionContext m_context;
|
|
|
|
public:
|
|
DisinfectionCtrlService();
|
|
|
|
public:
|
|
void initialize();
|
|
/**
|
|
* @brief 开始消毒
|
|
*
|
|
* @param loglevel 消毒等级
|
|
*/
|
|
|
|
void startDisinfection(int loglevel, //
|
|
int injection_pump_speed, //
|
|
int stoped_gs, //
|
|
int continued_gs, //
|
|
int stoped_satur, //
|
|
int continued_satur, //
|
|
int stoped_humi, //
|
|
int continued_humi //
|
|
);
|
|
void changeDisinfectionParameter(int injection_pump_speed, //
|
|
int stoped_gs, //
|
|
int continued_gs, //
|
|
int stoped_satur, //
|
|
int continued_satur, //
|
|
int stoped_humi, //
|
|
int continued_humi //
|
|
);
|
|
|
|
void stopDisinfection();
|
|
|
|
int getDisinfectionWorkState();
|
|
int getReplenishingFluidsWorkState();
|
|
int getDrainingWorkState();
|
|
|
|
/*******************************************************************************
|
|
* 加液 *
|
|
*******************************************************************************/
|
|
void startReplenishingFluids(int stopatg);
|
|
void stopReplenishingFluids();
|
|
/*******************************************************************************
|
|
* 排液 *
|
|
*******************************************************************************/
|
|
void startDraining();
|
|
void stopDraining();
|
|
/*******************************************************************************
|
|
* State *
|
|
*******************************************************************************/
|
|
bool isDisinfectionRunning();
|
|
int32_t getEstimatedRemainingTimeS();
|
|
string getDisinfectionID();
|
|
bool isPreheatState();
|
|
int32_t getPreHeatRaminTimeS();
|
|
|
|
private:
|
|
string createDisinfectionID();
|
|
|
|
private:
|
|
float getDisinfectionDValue(float ppm);
|
|
|
|
void initContext(DisinfectionContext& context, //
|
|
int loglevel, //
|
|
float injection_pump_speed, //
|
|
float stoped_gs, //
|
|
float continued_gs, //
|
|
float stoped_satur, //
|
|
float continued_satur, //
|
|
float stoped_humi, //
|
|
float continued_humi //
|
|
);
|
|
|
|
void computeRemainTime(DisinfectionContext& context);
|
|
float computeNowLogLevel(DisinfectionContext& context);
|
|
void processPreheatState(DisinfectionContext& context);
|
|
void processDisinfectionState(DisinfectionContext& context);
|
|
void finishDisinfection(DisinfectionContext& context);
|
|
|
|
void disinfectionLoop(bool& breakflag);
|
|
|
|
void processState_Preheat(DisinfectionContext& context);
|
|
void processState_Disinfection(DisinfectionContext& context, bool& updatedval);
|
|
void processState_Degradation(DisinfectionContext& context);
|
|
|
|
private:
|
|
shared_ptr<DisinfectionLogger> createCSVLogger(string log_file_name);
|
|
void dumpDisinfectionLogsToCSV(DisinfectionContext& context);
|
|
|
|
void pushDisinfectionPrinterTask(DisinfectionContext& context);
|
|
|
|
void log(DisinfectionContext& context);
|
|
void takeStateSnapshot(DisinfectionContext& context);
|
|
void updateH2O2SensorData(DisinfectionContext& context);
|
|
};
|
|
} // namespace iflytop
|