diff --git a/appsrc/service/app/disinfection_ctrl_service.cpp b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp similarity index 83% rename from appsrc/service/app/disinfection_ctrl_service.cpp rename to appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp index ac8554b..6892f1f 100644 --- a/appsrc/service/app/disinfection_ctrl_service.cpp +++ b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp @@ -11,29 +11,6 @@ using namespace disinfection; #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 "未知"; - } -} - string DisinfectionCtrlService::getSetting(SettingId sid) { // 1. 从 realtimeCfg 中进行查找 // 2. 从 系统配置 中进行查找 @@ -130,13 +107,6 @@ void DisinfectionCtrlService::initialize() { GET_TO_SERVICE(dcs); 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::preheat, bind(&DisinfectionCtrlService::processStatePreheat, this, placeholders::_1)); @@ -150,79 +120,6 @@ void DisinfectionCtrlService::initialize() { sm.startProcess(); } -void DisinfectionCtrlService::fn_start(shared_ptr 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 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 cxt) { - m_formulaid = ""; - m_state = DisinfectionState::idle; -} - -void DisinfectionCtrlService::fn_getRealtimeConfig(shared_ptr cxt) { - json& rely = cxt->content; - for (auto& cfg : m_realtimeCfg) { - rely[cfg.first] = cfg.second; - } -} -void DisinfectionCtrlService::fn_setRealtimeConfig(shared_ptr cxt) { - string key = cxt->params["key"]; - string val = cxt->params; - m_realtimeCfg[key] = val; -} - -void DisinfectionCtrlService::fn_getState(shared_ptr 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 cxt) { - json& rely = cxt->content; - rely["curveNum"] = 3; - rely["updatePeriodMs"] = 5000; -} - /******************************************************************************* * APP_IMPL * *******************************************************************************/ diff --git a/appsrc/service/app/disinfection_ctrl_service.hpp b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp similarity index 64% rename from appsrc/service/app/disinfection_ctrl_service.hpp rename to appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp index 4d13a8e..12f8f6f 100644 --- a/appsrc/service/app/disinfection_ctrl_service.hpp +++ b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp @@ -11,7 +11,7 @@ // #include "appbase/disinfection_state.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/device_ctrl_service.hpp" #include "service/hardware/disinfectant_weight_update_service.hpp" @@ -19,24 +19,7 @@ namespace iflytop { 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 { THISCLASS(DisinfectionCtrlService); @@ -57,8 +40,6 @@ class DisinfectionCtrlService : public enable_shared_from_this context; - // string s_sessionId; zsystem_tp s_start_tp; @@ -90,23 +71,6 @@ class DisinfectionCtrlService : public enable_shared_from_this cxt); - void fn_startWithFormula(shared_ptr cxt); - void fn_stop(shared_ptr cxt); - - void fn_getRealtimeConfig(shared_ptr cxt); - void fn_setRealtimeConfig(shared_ptr cxt); - /******************************************************************************* - * 状态 * - *******************************************************************************/ - void fn_getState(shared_ptr cxt); - void fn_getServiceConfig(shared_ptr cxt); - - public: // impl void start(); diff --git a/appsrc/service/app/disinfection_ctrl_service_ext.cpp b/appsrc/service/app/disinfection_ctrl_service_ext.cpp new file mode 100644 index 0000000..8f018be --- /dev/null +++ b/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 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 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 cxt) { + m_formulaid = ""; + m_state = DisinfectionState::idle; +} + +void DisinfectionCtrlServiceExt::fn_getRealtimeConfig(shared_ptr cxt) { + json& rely = cxt->content; + for (auto& cfg : m_realtimeCfg) { + rely[cfg.first] = cfg.second; + } +} +void DisinfectionCtrlServiceExt::fn_setRealtimeConfig(shared_ptr cxt) { + string key = cxt->params["key"]; + string val = cxt->params; + m_realtimeCfg[key] = val; +} + +void DisinfectionCtrlServiceExt::fn_getState(shared_ptr 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 cxt) { + json& rely = cxt->content; + rely["curveNum"] = 3; + rely["updatePeriodMs"] = 5000; +} diff --git a/appsrc/service/app/disinfection_ctrl_service_ext.hpp b/appsrc/service/app/disinfection_ctrl_service_ext.hpp new file mode 100644 index 0000000..8fd9193 --- /dev/null +++ b/appsrc/service/app/disinfection_ctrl_service_ext.hpp @@ -0,0 +1,61 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +// +#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 { + THISCLASS(DisinfectionCtrlServiceExt); + + public: + shared_ptr db; + shared_ptr ds; + shared_ptr gConfig; + + shared_ptr dcs; + shared_ptr dwus; + + DisinfectionState m_state = DisinfectionState::idle; + + map m_realtimeCfg; + json m_defaultFormulaJson; + string m_formulaid; + + public: + void initialize(); + + public: + /******************************************************************************* + * 控制 * + *******************************************************************************/ + void fn_start(shared_ptr cxt); + void fn_startWithFormula(shared_ptr cxt); + void fn_stop(shared_ptr cxt); + + void fn_getRealtimeConfig(shared_ptr cxt); + void fn_setRealtimeConfig(shared_ptr cxt); + /******************************************************************************* + * 状态 * + *******************************************************************************/ + void fn_getState(shared_ptr cxt); + void fn_getServiceConfig(shared_ptr cxt); + +}; + +} // namespace iflytop diff --git a/appsrc/service/main_control_service.cpp b/appsrc/service/main_control_service.cpp index 3d75d06..b58772c 100644 --- a/appsrc/service/main_control_service.cpp +++ b/appsrc/service/main_control_service.cpp @@ -12,7 +12,7 @@ // #include "service/app/add_liquid_service.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/pipeline_pressure_control.hpp" //