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.
140 lines
3.6 KiB
140 lines
3.6 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 "configs/project_setting.hpp"
|
|
#include "iflytop/core/components/timeutils.hpp"
|
|
/**
|
|
* @brief
|
|
*
|
|
* service: DisinfectionCtrlService
|
|
*
|
|
* 监听事件:
|
|
* 依赖状态:
|
|
* 依赖服务:
|
|
* 作用:
|
|
*
|
|
*/
|
|
|
|
namespace iflytop {
|
|
using namespace std;
|
|
using namespace core;
|
|
|
|
class DisinfectionLogger;
|
|
|
|
typedef enum {
|
|
kstate_idle = 0, // 空闲
|
|
kstate_preheat = 1, // 预热
|
|
kstate_disinfection = 2, // 消毒中-工作
|
|
kstate_degradation = 4, // 降解中
|
|
kstate_finished = 5, // 结束
|
|
} disinfection_state_t;
|
|
|
|
class StateSnapshot {
|
|
public:
|
|
disinfection_state_t state;
|
|
zsystem_tp time;
|
|
|
|
int32_t h2o2[MAX_H2O2_SENSOR_NUM]; // ppm
|
|
int32_t humid[MAX_H2O2_SENSOR_NUM]; // %RH
|
|
int32_t temp[MAX_H2O2_SENSOR_NUM]; // °C
|
|
int32_t saturation[MAX_H2O2_SENSOR_NUM]; // %RS
|
|
|
|
int min_h2o2;
|
|
int max_h2o2;
|
|
int max_humid;
|
|
int max_saturation;
|
|
|
|
float dloglevel;
|
|
};
|
|
|
|
class DisinfectionPrinterTask {
|
|
public:
|
|
string disinfection_id;
|
|
string usr;
|
|
|
|
vector<shared_ptr<StateSnapshot>> stateSnapshotList; // 状态快照I
|
|
|
|
int disinfectantUsage; // 消毒剂使用量
|
|
|
|
zsystem_tp start_tp;
|
|
zsystem_tp complete_tp;
|
|
|
|
int targetLog;
|
|
int actualLog;
|
|
|
|
int disinfectantVolume; // g
|
|
};
|
|
|
|
class DisinfectionContext {
|
|
public:
|
|
string m_disinfectionID;
|
|
disinfection_state_t m_state = kstate_idle;
|
|
zsteady_tp start_steady_tp;
|
|
zsystem_tp start_tp;
|
|
zsystem_tp complete_tp;
|
|
|
|
/**
|
|
* @brief 消毒中配置
|
|
*/
|
|
int pre_heat_time_s = 0; // 预热时间
|
|
int stoped_gs = 0; // 停止H2O2浓度
|
|
int continued_gs = 0; // 继续H2O2浓度
|
|
int stoped_satur = 0; // 停止饱和度
|
|
int continued_satur = 0; // 继续饱和度
|
|
int stoped_humi = 0; // 停止湿度
|
|
int continued_humi = 0; // 继续湿度
|
|
|
|
int injection_pump_speed;
|
|
bool injection_pump_speed_changed = false;
|
|
|
|
float cfg_targetLoglevel = 0;
|
|
|
|
/**
|
|
* @brief 运行状态
|
|
*/
|
|
zsteady_tp state_last_compute_dvalue_tp; // 上次计算dvalue时间
|
|
zsteady_tp state_lastlog_tp; // 上次日志时间
|
|
int state_remaintime = 0;
|
|
float state_now_loglevel = 0;
|
|
float state_dvalue = 0;
|
|
bool state_is_disinfection_take_break; // 消毒工作中是否暂停工作
|
|
/*******************************************************************************
|
|
* 传感器信息 *
|
|
*******************************************************************************/
|
|
|
|
int32_t h2o2[MAX_H2O2_SENSOR_NUM]; // ppm
|
|
int32_t humid[MAX_H2O2_SENSOR_NUM]; // %RH
|
|
int32_t temp[MAX_H2O2_SENSOR_NUM]; // °C
|
|
int32_t saturation[MAX_H2O2_SENSOR_NUM]; // %RS
|
|
|
|
int min_h2o2;
|
|
int max_h2o2;
|
|
int max_humid;
|
|
int max_saturation;
|
|
|
|
/*******************************************************************************
|
|
* 日志与统计 *
|
|
*******************************************************************************/
|
|
shared_ptr<DisinfectionLogger> csvlogger; // 日志记录器
|
|
vector<shared_ptr<StateSnapshot>> stateSnapshotList; // 状态快照I
|
|
|
|
int beforeDisinfectantVolume_g; // 消毒前消毒剂量
|
|
int afterDisinfectantVolume_g; // 消毒后消毒剂量
|
|
|
|
bool firstLog;
|
|
};
|
|
|
|
} // namespace iflytop
|