Browse Source

V6.3

master
zhaohe 1 year ago
parent
commit
5765c1f95a
  1. 3
      README.md
  2. 4
      h2o2_computer/zh2o2_computer.c
  3. 25
      src/api/cmds/disinfection_cmd_impl.cpp
  4. 16
      src/db/db_service.cpp
  5. 2
      src/service/disfection_ctl/add_liquid_service.cpp
  6. 144
      src/service/disfection_ctl/disinfection_service.hpp.bak
  7. 2
      src/version.hpp

3
README.md

@ -12,6 +12,9 @@
1.添加配置恢复出场设置接口
V5.3
添加加液时排空管路的逻辑
V6.3
修改小消毒机的喷液默认速率为4,上限为8
修改其他消毒机的喷液默认速率为15,上限为40
```

4
h2o2_computer/zh2o2_computer.c

@ -193,11 +193,11 @@ int zh2o2_computer_self_test() {
ZCHECK_EQ(zh2o2_compute_pms(500, t2k(20), 101325), 1063.920083, 0.01);
ZCHECK_EQ(zh2o2_compute_rs(500, t2k(20), 42, 101325), 92.345718, 0.01);
float temperatureC = 20;
float temperatureC = 26;
float AirPressure = 101325;
float rh = 50;
printf("T AirPressure RH H2O2(ppm) RS\n");
for (size_t i = 0; i < 500; i += 50) {
for (size_t i = 0; i < 500; i += 1) {
float rs = zh2o2_compute_rs(i, zh2o2_t2k(temperatureC), rh, AirPressure);
printf("%d %d %d %d %d\n", (int) temperatureC, (int)AirPressure, (int)rh, (int) i, (int)rs);
}

25
src/api/cmds/disinfection_cmd_impl.cpp

@ -103,14 +103,24 @@ void DisinfectionCmdImpl::startDisinfection(json& cmd, json& receipt) {
receipt["ackDisplayInfo"] = "蒸发仓有积水,请排水后再进行消毒";
return;
}
#if 0
int disinfectantVolumeG = m_deviceIoControlService->getDisinfectantVolume_g();
if (disinfectantVolumeG < MIN_DISINFECTANT_VOLUME) {
if (disinfectantVolumeG < (MIN_DISINFECTANT_VOLUME)) {
logger->error("start disinfection failed, disinfectant volume not enough {} < {}", disinfectantVolumeG, MIN_DISINFECTANT_VOLUME);
receipt["ackcode"] = err::zecode(err::kce_disinfectant_insufficient);
receipt["ackcodeInfo"] = err::zecode2str(err::kce_disinfectant_insufficient);
receipt["ackDisplayInfo"] = fmt::format("消毒剂小于{}g,请补充消毒剂", MIN_DISINFECTANT_VOLUME);
return;
}
#endif
int disinfectantVolumeG = m_deviceIoControlService->getDisinfectantVolume_g();
if (disinfectantVolumeG <= 0) {
logger->error("start disinfection failed, disinfectant volume not enough {} < {}", disinfectantVolumeG, 0);
receipt["ackcode"] = err::zecode(err::kce_disinfectant_insufficient);
receipt["ackcodeInfo"] = err::zecode2str(err::kce_disinfectant_insufficient);
receipt["ackDisplayInfo"] = fmt::format("没有消毒剂,请添加消毒剂");
return;
}
#endif
@ -164,9 +174,9 @@ void DisinfectionCmdImpl::startFormula(json& cmd, json& receipt) {
receipt["ackDisplayInfo"] = "蒸发仓有积水,请排水后再进行消毒";
return;
}
#if 0
int disinfectantVolumeG = m_deviceIoControlService->getDisinfectantVolume_g();
if (disinfectantVolumeG < (MIN_DISINFECTANT_VOLUME)) {
if (disinfectantVolumeG < (MIN_DISINFECTANT_VOLUME)) {
logger->error("start disinfection failed, disinfectant volume not enough {} < {}", disinfectantVolumeG, MIN_DISINFECTANT_VOLUME);
receipt["ackcode"] = err::zecode(err::kce_disinfectant_insufficient);
receipt["ackcodeInfo"] = err::zecode2str(err::kce_disinfectant_insufficient);
@ -174,6 +184,15 @@ void DisinfectionCmdImpl::startFormula(json& cmd, json& receipt) {
return;
}
#endif
int disinfectantVolumeG = m_deviceIoControlService->getDisinfectantVolume_g();
if (disinfectantVolumeG <= 0) {
logger->error("start disinfection failed, disinfectant volume not enough {} < {}", disinfectantVolumeG, 0);
receipt["ackcode"] = err::zecode(err::kce_disinfectant_insufficient);
receipt["ackcodeInfo"] = err::zecode2str(err::kce_disinfectant_insufficient);
receipt["ackDisplayInfo"] = fmt::format("没有消毒剂,请添加消毒剂");
return;
}
#endif
auto dfs = m_disinfectionCtrlService->getDisinfectionService();

16
src/db/db_service.cpp

@ -7,6 +7,7 @@
#include "db_service.hpp"
//
#include "iflytop/components/sqlite_orm/sqlite_orm.hpp"
#include "configs/project_setting.hpp"
using namespace std;
using namespace iflytop;
@ -80,6 +81,19 @@ using namespace nlohmann;
// {.id = 10, .name = "continued_humi", .name_ch = "消毒继续相对湿度", .val_lower_limit = 0, .val_upper_limit = 100, .permission_level = 0, .val = 70},
// };
#if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
#define INJECTION_PUMP_SPEED_DEFAULT 15
#define INJECTION_PUMP_SPEED_LIMIT_VAL 40
#endif
#ifdef PROJECT_TYPE_DRAW_BAR_BOX
#define INJECTION_PUMP_SPEED_DEFAULT 4
#define INJECTION_PUMP_SPEED_LIMIT_VAL 8
#endif
static Setting config_settings_table[] = {
SETTING_ITEM(1, "stoped_gs", /*************/ "消毒停止过氧化氢溶度", /**********/ 0, 2000, 300), //
SETTING_ITEM(2, "continued_gs", /**********/ "消毒继续过氧化氢溶度", /**********/ 0, 2000, 200), //
@ -87,7 +101,7 @@ static Setting config_settings_table[] = {
SETTING_ITEM(4, "continued_satur", /*******/ "消毒继续过氧化氢相对饱和度", /*****/ 0, 100, 60), //
SETTING_ITEM(5, "max_humidity", /**********/ "允许消毒最大湿度", /*************/ 0, 100, 90), //
SETTING_ITEM(6, "drainage_pump_speed", /***/ "排液蠕动泵最大转速", /************/ 0, 400, 400), //
SETTING_ITEM(7, "injection_pump_speed", /**/ "喷射蠕动泵转速", /***************/ 0, 40, 15), //
SETTING_ITEM(7, "injection_pump_speed", /**/ "喷射蠕动泵转速", /***************/ 0, INJECTION_PUMP_SPEED_LIMIT_VAL, INJECTION_PUMP_SPEED_DEFAULT), //
SETTING_ITEM(8, "pre_heat_time_s", /*******/ "预热时间", /*******************/ 0, 1200, 120), //
SETTING_ITEM(9, "stoped_humi", /***********/ "消毒停止相对湿度", /************/ 0, 100, 85), //
SETTING_ITEM(10, "continued_humi", /*******/ "消毒继续相对湿度", /************/ 0, 100, 60), //

2
src/service/disfection_ctl/add_liquid_service.cpp

@ -41,7 +41,7 @@ void AddLiquidService::startReplenishingFluids(int stopatg) {
int32_t nowvolume = m_deviceIoControlService->getDisinfectantVolume_g();
int maxg = DISINFECTANT_BUCKET_CAPACITY;
stopatg += 30; // 由于加液过程中,测量到的液体要比真实的小,所以这里要比预设值大100
stopatg += 0; // 由于加液过程中,测量到的液体要比真实的小,所以这里要比预设值大100
if (stopatg > maxg) {
logger->warn("start Replenishing fail, stopatg {} > maxg {}", stopatg, maxg);

144
src/service/disfection_ctl/disinfection_service.hpp.bak

@ -1,144 +0,0 @@
//
// 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 "service/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: DisinfectionService
*
* 监听事件:
* 依赖状态:
* 依赖服务:
* 作用:
*
*/
namespace iflytop {
using namespace std;
using namespace core;
class DisinfectionService : public enable_shared_from_this<DisinfectionService> {
ENABLE_LOGGER(DisinfectionService);
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:
DisinfectionService();
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();
/*******************************************************************************
* 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);
private:
};
} // namespace iflytop

2
src/version.hpp

@ -1,2 +1,2 @@
#pragma once
#define VERSION "6.1"
#define VERSION "6.2"
Loading…
Cancel
Save