Browse Source

Dvalue系数支持修改

storage-in-realtime
zhaohe 1 year ago
parent
commit
16c2f55e74
  1. 3
      src/configs/gconfig.hpp
  2. 33
      src/service/disinfection_ctl_service.cpp
  3. 38
      src/service/disinfection_ctl_service.hpp
  4. 54
      src/utils/dvalue_computer.cpp
  5. 16
      src/utils/dvalue_computer.hpp

3
src/configs/gconfig.hpp

@ -19,7 +19,8 @@
marco(string /* */, iflytopSubDeviceCanIFName, "can0") /*子设备Can设备名称*/ \
marco(int32_t /* */, iflytopSubDeviceCanBitrate, 500000) /*子设备Can设备波特率*/ \
marco(string /* */, pipettingRobotCanIFName, "can1") /*移液臂Can设备名称*/ \
marco(int32_t /* */, pipettingRobotCanBitrate, 500000) /*移液臂Can设备波特率*/
marco(int32_t /* */, pipettingRobotCanBitrate, 500000) /*移液臂Can设备波特率*/ \
marco(float /* */, dvalueCoefficient, 1) /*数值越小,相对消毒时间越长*/
configTemplateDEFILE_CONFIG_SERVICE2( //
GConfig, //

33
src/service/disinfection_ctl_service.cpp

@ -47,6 +47,7 @@ void DisinfectionCtrlService::initialize() {
m_deviceIoControlService->heartingPlate_setPower(false);
m_deviceIoControlService->airBlower_setState(false);
m_deviceIoControlService->airCompressor_setState(false);
m_dvalueComputer.initialize();
}
static string getTime() {
@ -88,36 +89,8 @@ static bool zfeq(float a, float b, float eps = 0.01) {
}
return false;
}
float DisinfectionCtrlService::getDisinfectionDValue(float ppm) {
/**
* @brief
*
* D值的计算公式是根据美国竞品的数据记录计算得来的
*
* 150,y=-0.5269X+97.868
* 150,y=-0.1405X+40.369
*/
if (zfeq(ppm, 0)) {
return -1;
}
float dvalue = 0;
if (ppm < 150) {
dvalue = -0.5251 * ppm + 98.154;
} else if (ppm >= 150 && ppm < 240) {
dvalue = -0.125 * ppm + 38.913;
} else if (ppm >= 240) {
// 240 -> 8.913
// 1400 -> 2
// y = -0.00603x + 10.4472
dvalue = -0.00596 * ppm + 10.3434;
}
if (dvalue < 2) {
dvalue = 2;
}
return dvalue;
float DisinfectionCtrlService::getDisinfectionDValue(float ppm) { //
return m_dvalueComputer.computeDValue(ppm);
}
float DisinfectionCtrlService::computeNowLogLevel(DisinfectionContext& context) {
float dvalue = context.dvalue;

38
src/service/disinfection_ctl_service.hpp

@ -19,6 +19,7 @@
#include "iflytop/components/zcanreceiver/zcanhost.hpp"
#include "iflytop/core/core.hpp"
#include "service/device_io_control_service.hpp"
#include "utils/dvalue_computer.hpp"
#include "zservice_container/zservice_container.hpp"
/**
* @brief
@ -54,6 +55,8 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
shared_ptr<DBService> m_dbService;
shared_ptr<DisinfectionLogsManager> m_disinfectionLogsManager;
DValueComputer m_dvalueComputer;
recursive_mutex lock_;
int m_disinfectionWorkState = 0;
@ -96,7 +99,8 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
shared_ptr<DisinfectionLogger> csvlogger;
};
public:
public:
DisinfectionContext m_context;
public:
@ -159,23 +163,23 @@ public:
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);
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 dumpDisinfectionLogs(DisinfectionContext& context);
void dumpDisinfectionLogsToCSV(DisinfectionContext& context);
void finishDisinfection(DisinfectionContext& context);
void processPreheatState(DisinfectionContext& context);
void processDisinfectionState(DisinfectionContext& context);
void dumpDisinfectionLogs(DisinfectionContext& context);
void dumpDisinfectionLogsToCSV(DisinfectionContext& context);
void finishDisinfection(DisinfectionContext& context);
void disinfectionLoop(bool& breakflag);
};

54
src/utils/dvalue_computer.cpp

@ -0,0 +1,54 @@
#include "dvalue_computer.hpp"
#include <cmath>
#include "zservice_container/zservice_container.hpp"
using namespace iflytop;
using namespace std;
static bool zfeq(float a, float b, float eps = 0.01) {
if (fabs(a - b) < eps) {
return true;
}
return false;
}
void DValueComputer::initialize() {
/**
* @brief
*/
m_config = GET_SERVICE(GConfig);
}
float DValueComputer::computeDValue(float h2o2ppm) {
/**
* @brief
*
* D值的计算公式是根据美国竞品的数据记录计算得来的
*
* 150,y=-0.5269X+97.868
* 150,y=-0.1405X+40.369
*/
if (zfeq(h2o2ppm, 0)) {
return -1;
}
float dvalue = 0;
if (h2o2ppm < 150) {
//
dvalue = -0.5251 * h2o2ppm * m_config->get_dvalueCoefficient() + 98.154;
} else if (h2o2ppm >= 150 && h2o2ppm < 240) {
//
dvalue = -0.125 * h2o2ppm * m_config->get_dvalueCoefficient() + 38.913;
} else if (h2o2ppm >= 240) {
//
dvalue = -0.00596 * h2o2ppm * m_config->get_dvalueCoefficient() + 10.3434;
}
if (dvalue < 2) {
dvalue = 2;
}
return dvalue;
}

16
src/utils/dvalue_computer.hpp

@ -0,0 +1,16 @@
#pragma once
#include <stdio.h>
#include "configs/gconfig.hpp"
namespace iflytop {
class DValueComputer {
ENABLE_LOGGER(DValueComputer);
shared_ptr<GConfig> m_config;
public:
void initialize();
float computeDValue(float h2o2ppm);
};
} // namespace iflytop
Loading…
Cancel
Save