Browse Source

update

master
zhaohe 2 years ago
parent
commit
8fdd7e6670
  1. 16
      src/db/db_service.cpp
  2. 27
      src/main_control_service.cpp
  3. 17
      src/service/device_io_control_service.cpp
  4. 3
      src/service/device_io_control_service.hpp
  5. 212
      src/service/disinfection_ctl_service.cpp
  6. 29
      src/service/disinfection_ctl_service.hpp

16
src/db/db_service.cpp

@ -136,19 +136,19 @@ id setting_name setting_name_ch val_upper_limit val_lower_limi
storage.sync_schema();
if (storage.get_all<Setting>(where(c(&Setting::id) == 1)).size() == 0) //
storage.insert(Setting{1, "stoped_gs", "消毒停止过氧化氢溶度", 0, 2000, 1, 1800});
storage.insert(Setting{1, "stoped_gs", "消毒停止过氧化氢溶度", 0, 2000, 2, 1800});
if (storage.get_all<Setting>(where(c(&Setting::id) == 2)).size() == 0)
storage.insert(Setting{2, "continued_gs", "消毒继续过氧化氢溶度", 0, 2000, 1, 1500});
storage.insert(Setting{2, "continued_gs", "消毒继续过氧化氢溶度", 0, 2000, 2, 1500});
if (storage.get_all<Setting>(where(c(&Setting::id) == 3)).size() == 0)
storage.insert(Setting{3, "stoped_satur", "消毒停止过氧化氢相对饱和度", 0, 100, 1, 85});
storage.insert(Setting{3, "stoped_satur", "消毒停止过氧化氢相对饱和度", 0, 100, 2, 85});
if (storage.get_all<Setting>(where(c(&Setting::id) == 4)).size() == 0)
storage.insert(Setting{4, "continued_satur", "消毒继续过氧化氢相对饱和度", 0, 100, 1, 70});
storage.insert(Setting{4, "continued_satur", "消毒继续过氧化氢相对饱和度", 0, 100, 2, 70});
if (storage.get_all<Setting>(where(c(&Setting::id) == 5)).size() == 0) //
storage.insert(Setting{5, "max_humidity", "允许消毒最大湿度", 0, 100, 1, 90});
storage.insert(Setting{5, "max_humidity", "允许消毒最大湿度", 0, 100, 2, 90});
if (storage.get_all<Setting>(where(c(&Setting::id) == 6)).size() == 0)
storage.insert(Setting{6, "drainage_pump_speed", "排液蠕动泵转速", 0, 350, 2, 300});
@ -157,13 +157,13 @@ id setting_name setting_name_ch val_upper_limit val_lower_limi
storage.insert(Setting{7, "injection_pump_speed", "喷射蠕动泵转速", 0, 350, 2, 300});
if (storage.get_all<Setting>(where(c(&Setting::id) == 8)).size() == 0) //
storage.insert(Setting{8, "pre_heat_time_s", "预热时间", 0, 600, 1, 120});
storage.insert(Setting{8, "pre_heat_time_s", "预热时间", 0, 600, 2, 120});
if (storage.get_all<Setting>(where(c(&Setting::id) == 9)).size() == 0) //
storage.insert(Setting{9, "stoped_humi", "消毒停止相对湿度", 0, 100, 1, 85});
storage.insert(Setting{9, "stoped_humi", "消毒停止相对湿度", 0, 100, 2, 85});
if (storage.get_all<Setting>(where(c(&Setting::id) == 10)).size() == 0) //
storage.insert(Setting{10, "continued_humi", "消毒继续相对湿度", 0, 100, 1, 70});
storage.insert(Setting{10, "continued_humi", "消毒继续相对湿度", 0, 100, 2, 70});
suc = true;
} catch (const std::exception& e) {

27
src/main_control_service.cpp

@ -152,7 +152,7 @@ json MainControlService::createSensorDataJson() {
report["h2o2_1"] = m_deviceIoControlService->getH2O2SenSorData1().h2o2;
report["temp_1"] = m_deviceIoControlService->getH2O2SenSorData1().temp;
report["humid_1"] = m_deviceIoControlService->getH2O2SenSorData1().humid;
report["saturation_1"] = m_deviceIoControlService->getH2O2SenSorData1().saturation + 1; //为了让曲线不重叠
report["saturation_1"] = m_deviceIoControlService->getH2O2SenSorData1().saturation + 1; // 为了让曲线不重叠
// logger->info("m_deviceIoControlService->getH2O2SenSorData1().h2o2 {}", m_deviceIoControlService->getH2O2SenSorData1().h2o2);
@ -257,8 +257,29 @@ void MainControlService::processFrontEndMessage(weak_ptr<WebSocket> webSocket, j
if (cmdstr == "startDisinfection") {
int loglevel = jsonGet<int>(cmd["loglevel"]);
int roomVolume = jsonGet<int>(cmd["roomVolume"]); //
m_disinfectionCtrlService->startDisinfection(loglevel, roomVolume);
int injection_pump_speed = jsonGet<int>(cmd["injection_pump_speed"]); //
int stoped_gs = jsonGet<int>(cmd["stoped_gs"]); //
int continued_gs = jsonGet<int>(cmd["continued_gs"]); //
int stoped_satur = jsonGet<int>(cmd["stoped_satur"]); //
int continued_satur = jsonGet<int>(cmd["continued_satur"]); //
int stoped_humi = jsonGet<int>(cmd["stoped_humi"]); //
int continued_humi = jsonGet<int>(cmd["continued_humi"]); //
m_disinfectionCtrlService->startDisinfection(loglevel, //
injection_pump_speed, //
stoped_gs, //
continued_gs, //
stoped_satur, //
continued_satur, //
stoped_humi, //
continued_humi //
);
return;
}
if (cmdstr == "changeInjectionPumpSpeed") {
int injection_pump_speed = jsonGet<int>(cmd["injection_pump_speed"]); //
m_disinfectionCtrlService->changeInjectionPumpSpeed(injection_pump_speed);
return;
}

17
src/service/device_io_control_service.cpp

@ -170,23 +170,32 @@ void DeviceIoControlService::replenishingFluidsPump_close() {
logger->info("replenishingFluidsPump_close");
m_zcanHost->pumpctrl_c1004(1, 100, 0, 1, 20);
}
void DeviceIoControlService::sprayLiquidPump_open() {
/*******************************************************************************
* sprayLiquidPump *
*******************************************************************************/
void DeviceIoControlService::sprayLiquidPump_open(int gpm) {
logger->info("sprayLiquidPump_open");
m_zcanHost->pumpctrl_c1004(2, 100, 200, 1, 15);
int speed = gpm * 7.5;
if (speed > 300) {
speed = 300;
}
m_zcanHost->pumpctrl_c1004(2, 100, speed, 1, 15);
}
void DeviceIoControlService::sprayLiquidPump_close() {
logger->info("sprayLiquidPump_close");
m_zcanHost->pumpctrl_c1004(2, 100, 0, 1, 15);
}
int DeviceIoControlService::sprayLiquidPump_getRPM() { return m_zcanHost->pumpctrl_c1004_get_speed_cache(2); }
int DeviceIoControlService::sprayLiquidPump_getGPM() { return sprayLiquidPump_getRPM() / 7.5; }
int DeviceIoControlService::sprayLiquidPump_getState() { //
lock_guard<recursive_mutex> lock(lock_);
return (sprayLiquidPump_getRPM() != 0);
}
/*******************************************************************************
* SensorState *
*******************************************************************************/
int DeviceIoControlService::getDisinfectantVolume_g() {
// kpa;
lock_guard<recursive_mutex> lock(lock_);

3
src/service/device_io_control_service.hpp

@ -105,10 +105,11 @@ class DeviceIoControlService : public enable_shared_from_this<DeviceIoControlSer
void replenishingFluidsPump_open();
void replenishingFluidsPump_close();
// 喷液泵
void sprayLiquidPump_open();
void sprayLiquidPump_open(int gpm);
void sprayLiquidPump_close();
int sprayLiquidPump_getState();
int sprayLiquidPump_getRPM();
int sprayLiquidPump_getGPM();
/******************************************************************************
* *

212
src/service/disinfection_ctl_service.cpp

@ -53,7 +53,7 @@ static string getTime() {
time_t t = time(nullptr);
struct tm* tmp = localtime_r(&t, &tm);
return fmt::format("{:0>4}-{:0>2}{:0>2}-{:0>2}{:0>2}{:0>2}", tm.tm_year + 1900, //
return fmt::format("{:0>4}-{:0>2}{:0>2}-{:0>2}:{:0>2}:{:0>2}", tm.tm_year + 1900, //
tm.tm_mon + 1, //
tm.tm_mday, //
tm.tm_hour, //
@ -113,8 +113,7 @@ void DisinfectionCtrlService::computeRemainTime(DisinfectionContext& context) {
/**
* @brief Dvalue
*/
float dvalue = getDisinfectionDValue(context.h2o2data.min_h2o2);
context.dvalue = dvalue;
float dvalue = context.dvalue;
/**
* @brief m_nowLoglevel
@ -128,17 +127,28 @@ void DisinfectionCtrlService::computeRemainTime(DisinfectionContext& context) {
logger->info("computeRemainTime minh2o2 {} dvalue {}", context.h2o2data.min_h2o2, dvalue);
}
void DisinfectionCtrlService::initContext(DisinfectionContext& context, int loglevel, float roomVol) {
void DisinfectionCtrlService::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 //
) {
context.m_disinfectionID = createDisinfectionID();
context.pre_heat_time_s = m_dbService->getSettingVal("pre_heat_time_s");
context.stoped_gs = m_dbService->getSettingVal("stoped_gs");
context.continued_gs = m_dbService->getSettingVal("continued_gs");
context.stoped_satur = m_dbService->getSettingVal("stoped_satur");
context.continued_satur = m_dbService->getSettingVal("continued_satur");
context.stoped_humi = m_dbService->getSettingVal("stoped_humi");
context.continued_humi = m_dbService->getSettingVal("continued_humi");
logger->info("startDisinfection {} {} {}", m_context.m_loglevel, m_context.m_roomvol, m_context.m_disinfectionID);
context.stoped_gs = stoped_gs;
context.continued_gs = continued_gs;
context.stoped_satur = stoped_satur;
context.continued_satur = continued_satur;
context.stoped_humi = stoped_humi;
context.continued_humi = continued_humi;
context.injection_pump_speed = injection_pump_speed;
context.injection_pump_speed_changed = true;
logger->info("startDisinfection {} {}", m_context.m_loglevel, m_context.m_disinfectionID);
logger->info(" stoped_gs {}", context.stoped_gs);
logger->info(" continued_gs {}", context.continued_gs);
logger->info(" stoped_satur {}", context.stoped_satur);
@ -154,7 +164,6 @@ void DisinfectionCtrlService::initContext(DisinfectionContext& context, int logl
context.m_targetLoglevel = loglevel;
context.m_nowLoglevel = 0;
context.m_loglevel = loglevel;
context.m_roomvol = roomVol;
// m_context.m_preheatFlag = true;
m_context.dvalue = 0;
// m_context.stopedflag = false;
@ -176,18 +185,58 @@ void DisinfectionCtrlService::initContext(DisinfectionContext& context, int logl
// ds->getPressureSensorData(1), ds->getPressureSensorData(2), ds->getPressureSensorData(3), ds->getPressureSensorData(4), //
// m_deviceIoControlService->getDisinfectantVolume_g(), //
// m_context.m_remaintime
context.csvlogger->write(
"time," //
"h2o21,temp1,humi1,saturation1," //
"h2o22,temp2,humi2,saturation2," //
"h2o23,temp3,humi3,saturation3," //
"hydrogen_peroxide_volume[1],temperature[1],relative_humidity[1],h2o_h2o2_rs[1]," //
// "h2o22,temp2,humi2,saturation2," //
// "h2o23,temp3,humi3,saturation3," //
"dvalue,loglevel,targetloglevel," //
"heating,blower,compressor,pump," //
"pressure1,pressure2,pressure3,pressure4," //
"disinfectantVolume," //
"remaintime\n" //
);
}
// logger->info("hydrogen_peroxide_volume :{}", m_hpp272_data_1.hydrogen_peroxide_volume);
// logger->info("h2o_h2o2_rs :{}", m_hpp272_data_1.h2o_h2o2_rs);
// logger->info("temperature1 :{}", m_hpp272_data_1.temperature1);
// logger->info("relative_humidity :{}", m_hpp272_data_1.relative_humidity);
// logger->info("absolute_hydrogen_peroxide :{}", m_hpp272_data_1.absolute_hydrogen_peroxide);
// logger->info("h2o_h2o2dew_point_temperature :{}", m_hpp272_data_1.h2o_h2o2dew_point_temperature);
// logger->info("reserved1 :{}", m_hpp272_data_1.reserved1);
// logger->info("water_volume :{}", m_hpp272_data_1.water_volume);
// logger->info("water_vapor_pressure :{}", m_hpp272_data_1.water_vapor_pressure);
// logger->info("absolute_humidity :{}", m_hpp272_data_1.absolute_humidity);
// logger->info("water_vapor_saturation_pressure_h2o:{}", m_hpp272_data_1.water_vapor_saturation_pressure_h2o);
// logger->info("temperature2 :{}", m_hpp272_data_1.temperature2);
// logger->info("h2o2_vapor_pressure :{}", m_hpp272_data_1.h2o2_vapor_pressure);
// logger->info("water_vapor_saturation_pressure_h2o_h2o2:{}", m_hpp272_data_1.water_vapor_saturation_pressure_h2o_h2o2);
void DisinfectionCtrlService::dumpDisinfectionLogsToCSV(DisinfectionContext& context) {
auto* sensors = &m_context.h2o2data.h2o2sensor_data[0];
auto ds = m_deviceIoControlService;
context.csvlogger->write(
fmt::format("{}," //
"{},{},{},{}," //
// "{},{},{},{}," //
// "{},{},{},{}," //
"{},{},{}," //
"{},{},{},{}," //
"{},{},{},{}," //
"{}," //
"{}\n" //
,
getTime(), //
sensors[0].h2o2, sensors[0].temp, sensors[0].humid, sensors[0].saturation, //
// sensors[1].h2o2, sensors[1].temp, sensors[1].humid, sensors[1].saturation, //
// sensors[2].h2o2, sensors[2].temp, sensors[2].humid, sensors[2].saturation, //
m_context.dvalue, m_context.m_nowLoglevel, (int)m_context.m_targetLoglevel, //
ds->heatingStrip_getstate(), ds->airBlower_getstate(), ds->airCompressor_getstate(), ds->sprayLiquidPump_getGPM(), //
m_deviceIoControlService->getDisinfectantVolume_g(), //
m_context.m_remaintime));
}
void DisinfectionCtrlService::finishDisinfection(DisinfectionContext& context) {
context.m_remaintime = 0;
logger->info("stop disinfection {}", context.m_disinfectionID);
@ -221,7 +270,7 @@ void DisinfectionCtrlService::processPreheatState(DisinfectionContext& context)
m_deviceIoControlService->airCompressor_setState(true);
usleep(1000 * 1000);
// sprayLiquidPump_open();
m_deviceIoControlService->sprayLiquidPump_open();
m_deviceIoControlService->sprayLiquidPump_open(context.injection_pump_speed);
context.m_state = kdisinfection;
// context.m_preheatFlag = false;
// context.sprayLiquidFlag = true;
@ -230,75 +279,8 @@ void DisinfectionCtrlService::processPreheatState(DisinfectionContext& context)
}
}
void DisinfectionCtrlService::dumpDisinfectionLogsToCSV(DisinfectionContext& context) {
#if 0
context.csvlogger->write(fmt::format("{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}\n",
zsteady_clock().elapsedTimeS(m_context.m_starttp), //
m_context.h2o2data.h2o2sensor_data[0].h2o2, //
m_context.h2o2data.h2o2sensor_data[0].temp, //
m_context.h2o2data.h2o2sensor_data[0].humid, //
m_context.h2o2data.h2o2sensor_data[0].saturation, //
m_context.h2o2data.h2o2sensor_data[1].h2o2, //
m_context.h2o2data.h2o2sensor_data[1].temp, //
m_context.h2o2data.h2o2sensor_data[1].humid, //
m_context.h2o2data.h2o2sensor_data[1].saturation, //
m_context.h2o2data.h2o2sensor_data[2].h2o2, //
m_context.h2o2data.h2o2sensor_data[2].temp, //
m_context.h2o2data.h2o2sensor_data[2].humid, //
m_context.h2o2data.h2o2sensor_data[2].saturation, //
m_context.dvalue, //
m_context.m_nowLoglevel, //
m_context.m_targetLoglevel, //
m_context.m_remaintime //
));
#endif
auto* sensors = &m_context.h2o2data.h2o2sensor_data[0];
auto ds = m_deviceIoControlService;
context.csvlogger->write(
fmt::format("{}," //
"{},{},{},{}," //
"{},{},{},{}," //
"{},{},{},{}," //
"{},{},{}," //
"{},{},{},{}," //
"{},{},{},{}," //
"{}," //
"{}\n" //
,
getTime(), //
sensors[0].h2o2, sensors[0].temp, sensors[0].humid, sensors[0].saturation, //
sensors[1].h2o2, sensors[1].temp, sensors[1].humid, sensors[1].saturation, //
sensors[2].h2o2, sensors[2].temp, sensors[2].humid, sensors[2].saturation, //
m_context.dvalue, m_context.m_nowLoglevel, (int)m_context.m_targetLoglevel, //
ds->heatingStrip_getstate(), ds->airBlower_getstate(), ds->airCompressor_getstate(), ds->sprayLiquidPump_getRPM(), //
ds->getPressureSensorData(1), ds->getPressureSensorData(2), ds->getPressureSensorData(3), ds->getPressureSensorData(4), //
m_deviceIoControlService->getDisinfectantVolume_g(), //
m_context.m_remaintime));
}
void DisinfectionCtrlService::dumpDisinfectionLogs(DisinfectionContext& context) {
float h2o2_g = m_deviceIoControlService->getDisinfectantVolume_g();
#if 0
logger->info("T:{},ho1:{},t1:{},hu1:{},s1:{},ho2:{},t2:{},hu2:{},s2:{},ho3:{},t3:{},hu3:{},s3:{},dv:{},log:{},tlog:{},rt:{}",
zsteady_clock().elapsedTimeS(m_context.m_starttp), //
m_context.h2o2data.h2o2sensor_data[0].h2o2, //
m_context.h2o2data.h2o2sensor_data[0].temp, //
m_context.h2o2data.h2o2sensor_data[0].humid, //
m_context.h2o2data.h2o2sensor_data[0].saturation, //
m_context.h2o2data.h2o2sensor_data[1].h2o2, //
m_context.h2o2data.h2o2sensor_data[1].temp, //
m_context.h2o2data.h2o2sensor_data[1].humid, //
m_context.h2o2data.h2o2sensor_data[1].saturation, //
m_context.h2o2data.h2o2sensor_data[2].h2o2, //
m_context.h2o2data.h2o2sensor_data[2].temp, //
m_context.h2o2data.h2o2sensor_data[2].humid, //
m_context.h2o2data.h2o2sensor_data[2].saturation, //
m_context.dvalue, //
m_context.m_nowLoglevel, //
m_context.m_targetLoglevel, //
m_context.m_remaintime //
);
#endif
// float h2o2_g = m_deviceIoControlService->getDisinfectantVolume_g();
auto* sensors = &m_context.h2o2data.h2o2sensor_data[0];
auto ds = m_deviceIoControlService;
logger->info(
@ -323,23 +305,20 @@ void DisinfectionCtrlService::dumpDisinfectionLogs(DisinfectionContext& context)
m_context.m_remaintime);
}
/**
* @brief
*
*/
void DisinfectionCtrlService::processDisinfectionState(DisinfectionContext& context) {
ZCHECK(context.m_state == kdisinfection || context.m_state == kdisinfection_take_a_break, "state error");
/**
* @brief
*/
m_deviceIoControlService->getAllSensorData(m_context.h2o2data);
if (zsteady_clock().elapsedTimeS(m_context.m_lastComputeDvalueTp) > DVALUE_COMPUTEPERIOD_TIME_S) {
m_context.m_lastComputeDvalueTp = zsteady_clock().now();
/**
* @brief
*/
if (zsteady_clock().elapsedTimeS(m_context.m_lastComputeDvalueTp) > DVALUE_COMPUTEPERIOD_TIME_S) {
m_context.m_lastComputeDvalueTp = zsteady_clock().now();
computeRemainTime(m_context);
// dumpDisinfectionLogsToCSV(m_context);
}
dumpDisinfectionLogs(m_context);
/**
* @brief 湿
*/
@ -351,6 +330,11 @@ void DisinfectionCtrlService::processDisinfectionState(DisinfectionContext& cont
float nowh2o2 = m_context.h2o2data.max_h2o2;
float humid = m_context.h2o2data.max_humid;
if (m_context.injection_pump_speed_changed) {
m_deviceIoControlService->sprayLiquidPump_open(context.injection_pump_speed);
m_context.injection_pump_speed_changed = false;
}
// humid > m_context.stoped_satur
if (nowSatur > m_context.stoped_satur || nowh2o2 > m_context.stoped_gs || humid > m_context.stoped_humi) {
logger->info("stop sprayLiquid");
@ -371,7 +355,7 @@ void DisinfectionCtrlService::processDisinfectionState(DisinfectionContext& cont
if (nowSatur < m_context.continued_satur && nowh2o2 < m_context.continued_gs && humid < context.continued_humi) {
logger->info("start sprayLiquid");
m_deviceIoControlService->sprayLiquidPump_open();
m_deviceIoControlService->sprayLiquidPump_open(context.injection_pump_speed);
usleep(1000 * 1000);
m_deviceIoControlService->airCompressor_setState(true);
m_context.m_state = kdisinfection;
@ -382,8 +366,19 @@ void DisinfectionCtrlService::processDisinfectionState(DisinfectionContext& cont
void DisinfectionCtrlService::disinfectionLoop(bool& breakflag) {
// logger->info("disinfection running {} {}s preheatFlag:{}", m_context.m_disinfectionID, m_context.m_remaintime, m_context.m_preheatFlag);
m_context.m_remaintime--;
if (m_context.m_remaintime < 0) {
m_context.m_remaintime = 0;
}
/**
* @brief
*/
m_deviceIoControlService->getAllSensorData(m_context.h2o2data);
/**
* @brief D值
*/
m_context.dvalue = getDisinfectionDValue(m_context.h2o2data.min_h2o2);
if (m_context.m_state == kpreheat) {
/**
* @brief
@ -405,12 +400,13 @@ void DisinfectionCtrlService::disinfectionLoop(bool& breakflag) {
m_deviceIoControlService->heartingPlate_setPower(false);
m_context.m_state = kwait_for_h2o2_down;
}
} else if (m_context.m_state == kwait_for_h2o2_down) {
/**
* @brief h2o2浓度下降
*/
logger->info("waitting for h2o2 concentration to safe value {}=>{}", m_context.h2o2data.min_h2o2, 1);
if (m_context.h2o2data.min_h2o2 <= 1) {
if (m_context.h2o2data.min_h2o2 < 1) {
logger->info("h2o2 concentration to safe value");
breakflag = true;
m_context.m_state = kfinished;
@ -419,13 +415,29 @@ void DisinfectionCtrlService::disinfectionLoop(bool& breakflag) {
ZCHECK(false, "state error");
}
if (zsteady_clock().elapsedTimeS(m_context.m_lastlogTp) > DVALUE_COMPUTEPERIOD_TIME_S) {
if (breakflag || zsteady_clock().elapsedTimeS(m_context.m_lastlogTp) > DVALUE_COMPUTEPERIOD_TIME_S) {
m_context.m_lastlogTp = zsteady_clock().now();
dumpDisinfectionLogs(m_context);
dumpDisinfectionLogsToCSV(m_context);
}
}
void DisinfectionCtrlService::startDisinfection(int loglevel, float roomVol) {
void DisinfectionCtrlService::changeInjectionPumpSpeed(int speed) {
lock_guard<recursive_mutex> lock(lock_);
logger->info("changeInjectionPumpSpeed {}=>{}", m_context.injection_pump_speed, speed);
m_context.injection_pump_speed = speed;
m_context.injection_pump_speed_changed = true;
}
void DisinfectionCtrlService::startDisinfection(int loglevel, //
float injection_pump_speed, //
float stoped_gs, //
float continued_gs, //
float stoped_satur, //
float continued_satur, //
float stoped_humi, //
float continued_humi //
) {
lock_guard<recursive_mutex> lock(lock_);
/**
@ -436,7 +448,7 @@ void DisinfectionCtrlService::startDisinfection(int loglevel, float roomVol) {
if (m_disinfectionThread) {
stopDisinfection();
}
initContext(m_context, loglevel, roomVol);
initContext(m_context, loglevel, injection_pump_speed, stoped_gs, continued_gs, stoped_satur, continued_satur, stoped_humi, continued_humi);
m_disinfectionThread.reset(new Thread("m_disinfectionThread", [this]() {
ThisThread thisThread;

29
src/service/disinfection_ctl_service.hpp

@ -65,7 +65,6 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
class DisinfectionContext {
public:
string m_disinfectionID;
float m_roomvol = 0;
float m_loglevel = 0;
zsteady_tp m_starttp;
@ -84,6 +83,10 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
state_t m_state = kidle;
// bool sprayLiquidFlag = false;
int injection_pump_speed;
bool injection_pump_speed_changed = false;
int pre_heat_time_s = 0;
int stoped_gs = 0;
int continued_gs = 0;
@ -107,7 +110,18 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
*
* @param loglevel
*/
void startDisinfection(int loglevel, float roomVol);
void startDisinfection(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 changeInjectionPumpSpeed(int speed);
void stopDisinfection();
int getDisinfectionWorkState();
@ -139,7 +153,16 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
private:
float getDisinfectionDValue(float ppm);
void initContext(DisinfectionContext& context, int loglevel, float roomVol);
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);
void processPreheatState(DisinfectionContext& context);
void processDisinfectionState(DisinfectionContext& context);

Loading…
Cancel
Save