Browse Source

recode

storage-in-realtime
zhaohe 12 months ago
parent
commit
5abd4033e0
  1. 103
      appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp
  2. 40
      appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp
  3. 125
      appsrc/service/app/disinfection_ctrl_service_ext.cpp
  4. 61
      appsrc/service/app/disinfection_ctrl_service_ext.hpp
  5. 2
      appsrc/service/main_control_service.cpp

103
appsrc/service/app/disinfection_ctrl_service.cpp → appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp

@ -11,29 +11,6 @@ using namespace disinfection;
#define SETTING_DB SettingDBDao::ins() #define SETTING_DB SettingDBDao::ins()
#define FORMULA_DB FormulaDBDao::ins() #define FORMULA_DB FormulaDBDao::ins()
static string toDisplayName(DisinfectionState state) {
switch (state.id) {
case DisinfectionState::kidle:
return "空闲";
case DisinfectionState::kpreheat:
return "预热";
case DisinfectionState::kdisinfection:
return "消毒中";
case DisinfectionState::kdegradation:
return "降解中";
case DisinfectionState::kfinished:
return "消毒完成";
case DisinfectionState::kdehumidificationBeforeDisinfection:
return "消毒前除湿";
case DisinfectionState::kdehumidificationAfterDisinfection:
return "消毒后除湿";
case DisinfectionState::kemptyLiquidFromTheLine:
return "排空管路";
default:
return "未知";
}
}
string DisinfectionCtrlService::getSetting(SettingId sid) { string DisinfectionCtrlService::getSetting(SettingId sid) {
// 1. 从 realtimeCfg 中进行查找 // 1. 从 realtimeCfg 中进行查找
// 2. 从 系统配置 中进行查找 // 2. 从 系统配置 中进行查找
@ -130,13 +107,6 @@ void DisinfectionCtrlService::initialize() {
GET_TO_SERVICE(dcs); GET_TO_SERVICE(dcs);
GET_TO_SERVICE(dwus); GET_TO_SERVICE(dwus);
REGFNV2(DisinfectionCtrlService, start);
REGFNV2(DisinfectionCtrlService, startWithFormula);
REGFNV2(DisinfectionCtrlService, stop);
REGFNV2(DisinfectionCtrlService, getState);
REGFNV2(DisinfectionCtrlService, getRealtimeConfig);
REGFNV2(DisinfectionCtrlService, setRealtimeConfig);
REGFNV2(DisinfectionCtrlService, getServiceConfig);
sm.regStateProcesser(DisinfectionState::idle, bind(&DisinfectionCtrlService::processStateIdle, this, placeholders::_1)); sm.regStateProcesser(DisinfectionState::idle, bind(&DisinfectionCtrlService::processStateIdle, this, placeholders::_1));
sm.regStateProcesser(DisinfectionState::preheat, bind(&DisinfectionCtrlService::processStatePreheat, this, placeholders::_1)); sm.regStateProcesser(DisinfectionState::preheat, bind(&DisinfectionCtrlService::processStatePreheat, this, placeholders::_1));
@ -150,79 +120,6 @@ void DisinfectionCtrlService::initialize() {
sm.startProcess(); sm.startProcess();
} }
void DisinfectionCtrlService::fn_start(shared_ptr<MsgProcessContext> cxt) {
// 从setting中获取实时参数
m_formulaid = "";
auto allrealtimesetting = SETTING_DB->getRealtimeSetting();
m_realtimeCfg.clear();
for (auto& setting : allrealtimesetting) {
m_realtimeCfg[string(setting->setting_id)] = setting->val;
}
//
// m_state = DisinfectionState::preheat;
}
void DisinfectionCtrlService::fn_startWithFormula(shared_ptr<MsgProcessContext> cxt) { //
m_formulaid = cxt->params["formula_id"];
m_defaultFormulaJson = FORMULA_DB->getFormula(m_formulaid);
m_realtimeCfg.clear();
auto allrealtimesetting = SETTING_DB->getRealtimeSetting();
for (auto& setting : allrealtimesetting) {
m_realtimeCfg[string(setting->setting_id)] = m_defaultFormulaJson[string(setting->setting_id)];
}
// m_state = DisinfectionState::preheat;
}
void DisinfectionCtrlService::fn_stop(shared_ptr<MsgProcessContext> cxt) {
m_formulaid = "";
m_state = DisinfectionState::idle;
}
void DisinfectionCtrlService::fn_getRealtimeConfig(shared_ptr<MsgProcessContext> cxt) {
json& rely = cxt->content;
for (auto& cfg : m_realtimeCfg) {
rely[cfg.first] = cfg.second;
}
}
void DisinfectionCtrlService::fn_setRealtimeConfig(shared_ptr<MsgProcessContext> cxt) {
string key = cxt->params["key"];
string val = cxt->params;
m_realtimeCfg[key] = val;
}
void DisinfectionCtrlService::fn_getState(shared_ptr<MsgProcessContext> cxt) {
json& rely = cxt->content;
rely["statedisplayName"] = toDisplayName(m_state);
rely["state"] = string(m_state);
rely["curStateRemainTimeS"] = 60;
rely["tlog"] = "12.0";
rely["nlog"] = "3.0";
json sensordata;
sensordata[0]["h2o2"] = 11.1;
sensordata[0]["temp"] = 12.2;
sensordata[0]["rh"] = 13.3;
sensordata[0]["rs"] = 14.4;
sensordata[1]["h2o2"] = 21.1;
sensordata[1]["temp"] = 22.2;
sensordata[1]["rh"] = 23.3;
sensordata[1]["rs"] = 24.4;
sensordata[2]["h2o2"] = 31.1;
sensordata[2]["temp"] = 32.2;
sensordata[2]["rh"] = 33.3;
sensordata[2]["rs"] = 34.4;
rely["h2o2SensorData"] = sensordata;
}
void DisinfectionCtrlService::fn_getServiceConfig(shared_ptr<MsgProcessContext> cxt) {
json& rely = cxt->content;
rely["curveNum"] = 3;
rely["updatePeriodMs"] = 5000;
}
/******************************************************************************* /*******************************************************************************
* APP_IMPL * * APP_IMPL *
*******************************************************************************/ *******************************************************************************/

40
appsrc/service/app/disinfection_ctrl_service.hpp → appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp

@ -11,7 +11,7 @@
// //
#include "appbase/disinfection_state.hpp" #include "appbase/disinfection_state.hpp"
#include "baseservice/baseservice.hpp" #include "baseservice/baseservice.hpp"
#include "disinfection_ctrl/disinfection_state_machine.hpp"
#include "disinfection_state_machine.hpp"
#include "service/hardware/base/h2o2_sensor_data_mgr.hpp" #include "service/hardware/base/h2o2_sensor_data_mgr.hpp"
#include "service/hardware/device_ctrl_service.hpp" #include "service/hardware/device_ctrl_service.hpp"
#include "service/hardware/disinfectant_weight_update_service.hpp" #include "service/hardware/disinfectant_weight_update_service.hpp"
@ -19,24 +19,7 @@
namespace iflytop { namespace iflytop {
using namespace disinfection; using namespace disinfection;
class DisinfectionCtrlServiceContext {
public:
string id;
zsteady_tp start_steady_tp;
zsystem_tp start_tp;
zsystem_tp complete_tp;
zsteady_tp last_compute_dvalue_tp; // 上次计算dvalue时间
zsteady_tp lastlog_tp; // 上次日志时间
zsteady_tp last_log_printer_data_tp; // 上次日志时间
int remaintime = 0;
float now_loglevel = 0;
float dvalue = 0;
bool is_disinfection_take_break; // 消毒工作中是否因为RS,RH,PPM过大而暂停工作
int beforeDisinfectantVolume_g; // 消毒前消毒剂量
int afterDisinfectantVolume_g; // 消毒后消毒剂量
};
class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlService> { class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlService> {
THISCLASS(DisinfectionCtrlService); THISCLASS(DisinfectionCtrlService);
@ -57,8 +40,6 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
DisinfectionStateMachine sm; DisinfectionStateMachine sm;
shared_ptr<DisinfectionCtrlServiceContext> context;
// //
string s_sessionId; string s_sessionId;
zsystem_tp s_start_tp; zsystem_tp s_start_tp;
@ -90,23 +71,6 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
bool isTimeToResumeDisinfection(); bool isTimeToResumeDisinfection();
public: public:
public:
/*******************************************************************************
* *
*******************************************************************************/
void fn_start(shared_ptr<MsgProcessContext> cxt);
void fn_startWithFormula(shared_ptr<MsgProcessContext> cxt);
void fn_stop(shared_ptr<MsgProcessContext> cxt);
void fn_getRealtimeConfig(shared_ptr<MsgProcessContext> cxt);
void fn_setRealtimeConfig(shared_ptr<MsgProcessContext> cxt);
/*******************************************************************************
* *
*******************************************************************************/
void fn_getState(shared_ptr<MsgProcessContext> cxt);
void fn_getServiceConfig(shared_ptr<MsgProcessContext> cxt);
public:
// impl // impl
void start(); void start();

125
appsrc/service/app/disinfection_ctrl_service_ext.cpp

@ -0,0 +1,125 @@
#include "disinfection_ctrl_service_ext.hpp"
#include "appcomponents/algo/dvalue_computer.hpp"
#include "service/hardware/warning_light_controler.hpp"
using namespace iflytop;
using namespace disinfection;
#define DEFAULT_BLOWSER_LEVEL 90
#define DVALUE_COMPUTEPERIOD_TIME_S (10.0)
#define SETTING_DB SettingDBDao::ins()
#define FORMULA_DB FormulaDBDao::ins()
static string toDisplayName(DisinfectionState state) {
switch (state.id) {
case DisinfectionState::kidle:
return "空闲";
case DisinfectionState::kpreheat:
return "预热";
case DisinfectionState::kdisinfection:
return "消毒中";
case DisinfectionState::kdegradation:
return "降解中";
case DisinfectionState::kfinished:
return "消毒完成";
case DisinfectionState::kdehumidificationBeforeDisinfection:
return "消毒前除湿";
case DisinfectionState::kdehumidificationAfterDisinfection:
return "消毒后除湿";
case DisinfectionState::kemptyLiquidFromTheLine:
return "排空管路";
default:
return "未知";
}
}
void DisinfectionCtrlServiceExt::initialize() {
GET_TO_SERVICE(db);
GET_TO_SERVICE(ds);
GET_TO_SERVICE(gConfig);
GET_TO_SERVICE(dcs);
GET_TO_SERVICE(dwus);
REGFNV2(DisinfectionCtrlServiceExt, start);
REGFNV2(DisinfectionCtrlServiceExt, startWithFormula);
REGFNV2(DisinfectionCtrlServiceExt, stop);
REGFNV2(DisinfectionCtrlServiceExt, getState);
REGFNV2(DisinfectionCtrlServiceExt, getRealtimeConfig);
REGFNV2(DisinfectionCtrlServiceExt, setRealtimeConfig);
REGFNV2(DisinfectionCtrlServiceExt, getServiceConfig);
}
void DisinfectionCtrlServiceExt::fn_start(shared_ptr<MsgProcessContext> cxt) {
// 从setting中获取实时参数
m_formulaid = "";
auto allrealtimesetting = SETTING_DB->getRealtimeSetting();
m_realtimeCfg.clear();
for (auto& setting : allrealtimesetting) {
m_realtimeCfg[string(setting->setting_id)] = setting->val;
}
//
// m_state = DisinfectionState::preheat;
}
void DisinfectionCtrlServiceExt::fn_startWithFormula(shared_ptr<MsgProcessContext> cxt) { //
m_formulaid = cxt->params["formula_id"];
m_defaultFormulaJson = FORMULA_DB->getFormula(m_formulaid);
m_realtimeCfg.clear();
auto allrealtimesetting = SETTING_DB->getRealtimeSetting();
for (auto& setting : allrealtimesetting) {
m_realtimeCfg[string(setting->setting_id)] = m_defaultFormulaJson[string(setting->setting_id)];
}
// m_state = DisinfectionState::preheat;
}
void DisinfectionCtrlServiceExt::fn_stop(shared_ptr<MsgProcessContext> cxt) {
m_formulaid = "";
m_state = DisinfectionState::idle;
}
void DisinfectionCtrlServiceExt::fn_getRealtimeConfig(shared_ptr<MsgProcessContext> cxt) {
json& rely = cxt->content;
for (auto& cfg : m_realtimeCfg) {
rely[cfg.first] = cfg.second;
}
}
void DisinfectionCtrlServiceExt::fn_setRealtimeConfig(shared_ptr<MsgProcessContext> cxt) {
string key = cxt->params["key"];
string val = cxt->params;
m_realtimeCfg[key] = val;
}
void DisinfectionCtrlServiceExt::fn_getState(shared_ptr<MsgProcessContext> cxt) {
json& rely = cxt->content;
rely["statedisplayName"] = toDisplayName(m_state);
rely["state"] = string(m_state);
rely["curStateRemainTimeS"] = 60;
rely["tlog"] = "12.0";
rely["nlog"] = "3.0";
json sensordata;
sensordata[0]["h2o2"] = 11.1;
sensordata[0]["temp"] = 12.2;
sensordata[0]["rh"] = 13.3;
sensordata[0]["rs"] = 14.4;
sensordata[1]["h2o2"] = 21.1;
sensordata[1]["temp"] = 22.2;
sensordata[1]["rh"] = 23.3;
sensordata[1]["rs"] = 24.4;
sensordata[2]["h2o2"] = 31.1;
sensordata[2]["temp"] = 32.2;
sensordata[2]["rh"] = 33.3;
sensordata[2]["rs"] = 34.4;
rely["h2o2SensorData"] = sensordata;
}
void DisinfectionCtrlServiceExt::fn_getServiceConfig(shared_ptr<MsgProcessContext> cxt) {
json& rely = cxt->content;
rely["curveNum"] = 3;
rely["updatePeriodMs"] = 5000;
}

61
appsrc/service/app/disinfection_ctrl_service_ext.hpp

@ -0,0 +1,61 @@
#pragma once
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <vector>
//
#include "appbase/disinfection_state.hpp"
#include "disinfection_ctrl/disinfection_ctrl_service.hpp"
#include "baseservice/baseservice.hpp"
#include "disinfection_ctrl/disinfection_state_machine.hpp"
#include "service/hardware/base/h2o2_sensor_data_mgr.hpp"
#include "service/hardware/device_ctrl_service.hpp"
#include "service/hardware/disinfectant_weight_update_service.hpp"
//
namespace iflytop {
using namespace disinfection;
class DisinfectionCtrlServiceExt : public enable_shared_from_this<DisinfectionCtrlServiceExt> {
THISCLASS(DisinfectionCtrlServiceExt);
public:
shared_ptr<DBService> db;
shared_ptr<DeviceStateService> ds;
shared_ptr<GConfig> gConfig;
shared_ptr<DeviceIoControlService> dcs;
shared_ptr<DisinfectantWeightUpdateService> dwus;
DisinfectionState m_state = DisinfectionState::idle;
map<string, string> m_realtimeCfg;
json m_defaultFormulaJson;
string m_formulaid;
public:
void initialize();
public:
/*******************************************************************************
* *
*******************************************************************************/
void fn_start(shared_ptr<MsgProcessContext> cxt);
void fn_startWithFormula(shared_ptr<MsgProcessContext> cxt);
void fn_stop(shared_ptr<MsgProcessContext> cxt);
void fn_getRealtimeConfig(shared_ptr<MsgProcessContext> cxt);
void fn_setRealtimeConfig(shared_ptr<MsgProcessContext> cxt);
/*******************************************************************************
* *
*******************************************************************************/
void fn_getState(shared_ptr<MsgProcessContext> cxt);
void fn_getServiceConfig(shared_ptr<MsgProcessContext> cxt);
};
} // namespace iflytop

2
appsrc/service/main_control_service.cpp

@ -12,7 +12,7 @@
// //
#include "service/app/add_liquid_service.hpp" #include "service/app/add_liquid_service.hpp"
#include "service/app/air_leak_detect_test.hpp" #include "service/app/air_leak_detect_test.hpp"
#include "service/app/disinfection_ctrl_service.hpp"
#include "service/app/disinfection_ctrl_service_ext.hpp"
#include "service/app/drain_liquid_service.hpp" #include "service/app/drain_liquid_service.hpp"
#include "service/app/pipeline_pressure_control.hpp" #include "service/app/pipeline_pressure_control.hpp"
// //

Loading…
Cancel
Save