diff --git a/appsrc/appconfig/basic/zappversion.hpp b/appsrc/appconfig/basic/zappversion.hpp index 0b746ae..3281a7d 100644 --- a/appsrc/appconfig/basic/zappversion.hpp +++ b/appsrc/appconfig/basic/zappversion.hpp @@ -1,3 +1,3 @@ #pragma once -#define VERSION "3.0.8" +#define VERSION "3.0.9" #define PROJECT_NAME "TRANSMIT_DM" \ No newline at end of file diff --git a/appsrc/baseservice/db/calibrate_info_dao.cpp b/appsrc/baseservice/db/calibrate_info_dao.cpp index 7bb3c33..c3fc35f 100644 --- a/appsrc/baseservice/db/calibrate_info_dao.cpp +++ b/appsrc/baseservice/db/calibrate_info_dao.cpp @@ -33,17 +33,17 @@ void CalibrationInfoDao::initialize() { } } -CalibrationInfo CalibrationInfoDao::getCalibrationInfo() { - CalibrationInfo info = {0}; - info.h2O2LiquidWeightSensorZeroBias = get("h2O2LiquidWeightSensorZeroBias", 0.0); - return info; -} -json CalibrationInfoDao::getCalibrationInfoJson() { - CalibrationInfo info = getCalibrationInfo(); - json j; - j["h2O2LiquidWeightSensorZeroBias"] = info.h2O2LiquidWeightSensorZeroBias; - return j; -} - void CalibrationInfoDao::setH2O2LiquidWeightSensorZeroBias(float bias) { set("h2O2LiquidWeightSensorZeroBias", bias); } float CalibrationInfoDao::getH2O2LiquidWeightSensorZeroBias() { return get("h2O2LiquidWeightSensorZeroBias", 0.0); } + +void CalibrationInfoDao::setACPressureSensorZeroBiasKpa(float bias) { set("acPressureSensorZeroBiasKpa", bias); } +float CalibrationInfoDao::getACPressureSensorZeroBiasKpa() { return get("acPressureSensorZeroBiasKpa", 0.0); } + +float CalibrationInfoDao::acPressureSensorTare(float rawval) { + float bias = getACPressureSensorZeroBiasKpa(); + float tareVal = rawval - bias; + if (tareVal < 0) { + tareVal = 0; // 确保去皮后的值不小于0 + } + return tareVal; +} diff --git a/appsrc/baseservice/db/calibrate_info_dao.hpp b/appsrc/baseservice/db/calibrate_info_dao.hpp index 75ae6ea..65706dc 100644 --- a/appsrc/baseservice/db/calibrate_info_dao.hpp +++ b/appsrc/baseservice/db/calibrate_info_dao.hpp @@ -34,10 +34,7 @@ using namespace nlohmann; *******************************************************************************/ namespace db { -typedef struct { - int id; - float h2O2LiquidWeightSensorZeroBias; // H2O2液体重量传感器零点偏差 -} CalibrationInfo; + } // namespace db using namespace db; /******************************************************************************* @@ -59,14 +56,14 @@ class CalibrationInfoDao : public KeyValDBV2Dao { static void daoInit() { ins(); } public: - CalibrationInfo getCalibrationInfo(); - json getCalibrationInfoJson(); void setH2O2LiquidWeightSensorZeroBias(float bias); float getH2O2LiquidWeightSensorZeroBias(); + void setACPressureSensorZeroBiasKpa(float bias); + float getACPressureSensorZeroBiasKpa(); - + float acPressureSensorTare(float rawval); private: diff --git a/appsrc/service/app/air_leak_detect_test.cpp b/appsrc/service/app/air_leak_detect_test.cpp index 44fa470..47a4c70 100644 --- a/appsrc/service/app/air_leak_detect_test.cpp +++ b/appsrc/service/app/air_leak_detect_test.cpp @@ -1,5 +1,6 @@ #include "air_leak_detect_test.hpp" +#include "baseservice/db/calibrate_info_dao.hpp" #include "pipeline_pressure_control.hpp" using namespace iflytop; @@ -125,7 +126,7 @@ void AirLeakDetectTest::airLeakDetectTestThread(int inflationTimeMs) { logger->info("stabilizing pressure....."); m_workstate = kstabilizingPressure; for (int i = 0; i < leakTestStabilizationTimeS; ++i) { - pressurePa = m_dics->ACPostPS_readPa(); + pressurePa = readPressurePa(); thisThread.sleepForMs(1000); logger->info(" waiting for stabilizing pressure, current pressure: {} kPa", pressurePa / 1000.0); if (thisThread.getExitFlag()) { @@ -140,7 +141,7 @@ void AirLeakDetectTest::airLeakDetectTestThread(int inflationTimeMs) { logger->info("leak testing....."); m_workstate = kleakTesting; while (!thisThread.getExitFlag()) { - pressurePa = m_dics->ACPostPS_readPa(); + pressurePa = readPressurePa(); thisThread.sleepForMs(1000); } } @@ -187,10 +188,12 @@ void AirLeakDetectTest::stopStateReport(shared_ptr cxt) {} json AirLeakDetectTest::getState() { json state; if (getWorkstate() == kidle) { - pressurePa = m_dics->ACPostPS_readPa(); + pressurePa = readPressurePa(); } state["pressure"] = pressurePa / 1000.0; state["workState"] = state2str(getWorkstate()); state["workStateDisplay"] = state2chstr(getWorkstate()); return state; -} \ No newline at end of file +} + +float AirLeakDetectTest::readPressurePa() { return CalibrationInfoDao::ins()->acPressureSensorTare(m_dics->ACPostPS_readPa() / 1000.0) * 1000; } diff --git a/appsrc/service/app/air_leak_detect_test.hpp b/appsrc/service/app/air_leak_detect_test.hpp index 70b0c5e..0076621 100644 --- a/appsrc/service/app/air_leak_detect_test.hpp +++ b/appsrc/service/app/air_leak_detect_test.hpp @@ -90,6 +90,8 @@ class AirLeakDetectTest : public enable_shared_from_this { void stopStateReport(shared_ptr cxt); json getState(); + float readPressurePa(); + private: void airLeakDetectTestThread(int inflationTimeMs); }; diff --git a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp index 30cb698..6c13c89 100644 --- a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp +++ b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp @@ -268,6 +268,15 @@ void DisinfectionCtrlService::updateCfg() { sm.pushEvent(event); } +void DisinfectionCtrlService::injectPumpSet(int velocityGPM) { + s_injectPumpRealtimeVelocityGPM = velocityGPM; + dics->SprayPump_start(velocityGPM); +} +void DisinfectionCtrlService::injectPumpStop() { + s_injectPumpRealtimeVelocityGPM = 0; + dics->SprayPump_stop(); +} + void DisinfectionCtrlService::tryLogState(bool forceLog) { // 每隔离10秒记录一次 if (forceLog || zsteady_clock().elapsedTimeS(s_lastTakeSnapt) > 10) { @@ -502,12 +511,16 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event) dics->AC_ctrl(1); dics->Blower_ctrl(DEFAULT_BLOWSER_LEVEL); dics->Heater_ctrl(1); - dics->SprayPump_start(getSettingAsInt(SettingId::injection_pump_speed)); + injectPumpSet(getSettingAsInt(SettingId::injection_pump_speed)); + + + + s_remaintime = m_tlog * 60 * 60 * 2; } else if (event->event == kevent_exit_state) { s_isDisinfectionTakeBreak = false; - dics->SprayPump_stop(); + injectPumpStop(); dics->Blower_close(); dics->Heater_close(); dics->AC_close(); @@ -541,7 +554,7 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event) if (!s_isDisinfectionTakeBreak) { if (isTimeToPauseDisinfection()) { logger->info("pauseDisinfection"); - dics->SprayPump_stop(); + injectPumpStop(); dics->AC_close(); s_isDisinfectionTakeBreak = true; tryLogState(true); @@ -551,7 +564,7 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event) logger->info("resumeDisinfection"); if (!handlePumpStopFlag) { dics->AC_ctrl(1); - dics->SprayPump_start(getSettingAsInt(SettingId::injection_pump_speed)); + injectPumpSet(getSettingAsInt(SettingId::injection_pump_speed)); } s_isDisinfectionTakeBreak = false; tryLogState(true); @@ -599,10 +612,10 @@ void DisinfectionCtrlService::processStateDisinfection(DisinfectionEvent* event) } else if (event->event == kevent_update_cfg) { if (!s_isDisinfectionTakeBreak && !handlePumpStopFlag) { dics->AC_ctrl(1); - dics->SprayPump_start(getSettingAsInt(SettingId::injection_pump_speed)); + injectPumpSet(getSettingAsInt(SettingId::injection_pump_speed)); } if (handlePumpStopFlag) { - dics->SprayPump_stop(); + injectPumpStop(); dics->AC_close(); } } diff --git a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp index 70a794b..12729e9 100644 --- a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp +++ b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.hpp @@ -46,20 +46,21 @@ class DisinfectionCtrlService : public enable_shared_from_this m_thread; // 实时任务状态 - string s_sessionId = {}; - zsystem_tp s_start_tp = {}; - zsystem_tp s_complete_tp = {}; - zsteady_tp s_start_steady_tp = {}; - zsteady_tp s_lastTakeSnapt = {}; // 上次日志时间 - zsteady_tp s_lastComputeDvalueTp = {}; // 上次计算dvalue时间 - bool s_isDisinfectionTakeBreak = false; - shared_ptr s_h2o2Snapshot = {}; - int32_t s_dvalue = 0; - int32_t s_remaintime = 0; - float s_nlog = {}; - int s_beforeDisinfectantVolume_g = {}; // 消毒前消毒剂量 - int s_afterDisinfectantVolume_g = {}; // 消毒后消毒剂量 - int s_disinfectantVolumeLevel = {}; // 消毒液位级别 + string s_sessionId = {}; + zsystem_tp s_start_tp = {}; + zsystem_tp s_complete_tp = {}; + zsteady_tp s_start_steady_tp = {}; + zsteady_tp s_lastTakeSnapt = {}; // 上次日志时间 + zsteady_tp s_lastComputeDvalueTp = {}; // 上次计算dvalue时间 + bool s_isDisinfectionTakeBreak = false; + shared_ptr s_h2o2Snapshot = {}; + int32_t s_dvalue = 0; + int32_t s_remaintime = 0; + float s_nlog = {}; + int s_beforeDisinfectantVolume_g = {}; // 消毒前消毒剂量 + int s_afterDisinfectantVolume_g = {}; // 消毒后消毒剂量 + int s_disinfectantVolumeLevel = {}; // 消毒液位级别 + int s_injectPumpRealtimeVelocityGPM = 0; bool handlePumpStopFlag = false; // @@ -95,7 +96,6 @@ class DisinfectionCtrlService : public enable_shared_from_this& getRealtimeCfg() { return m_realtimeCfg; } @@ -105,32 +105,28 @@ class DisinfectionCtrlService : public enable_shared_from_this getH2O2Snapshot() { return h2o2SensorStateSyncService->takeSnapshot(); } private: void resetState() { - s_sessionId = {}; - s_start_tp = {}; - s_complete_tp = {}; - s_start_steady_tp = {}; - s_lastTakeSnapt = {}; // 上次日志时间 - s_lastComputeDvalueTp = {}; // 上次计算dvalue时间 - s_isDisinfectionTakeBreak = false; - s_h2o2Snapshot = {}; - s_dvalue = 0; - s_remaintime = 0; - s_nlog = {}; - s_beforeDisinfectantVolume_g = {}; // 消毒前消毒剂量 - s_afterDisinfectantVolume_g = {}; // 消毒后消毒剂量 - s_disinfectantVolumeLevel = {}; // 消毒液位级别 + s_sessionId = {}; + s_start_tp = {}; + s_complete_tp = {}; + s_start_steady_tp = {}; + s_lastTakeSnapt = {}; // 上次日志时间 + s_lastComputeDvalueTp = {}; // 上次计算dvalue时间 + s_isDisinfectionTakeBreak = false; + s_h2o2Snapshot = {}; + s_dvalue = 0; + s_remaintime = 0; + s_nlog = {}; + s_beforeDisinfectantVolume_g = {}; // 消毒前消毒剂量 + s_afterDisinfectantVolume_g = {}; // 消毒后消毒剂量 + s_disinfectantVolumeLevel = {}; // 消毒液位级别 + s_injectPumpRealtimeVelocityGPM = 0; } void beforeStateProcess(); @@ -148,6 +144,10 @@ class DisinfectionCtrlService : public enable_shared_from_this createSnapshot(bool forceLog); diff --git a/appsrc/service/app_core.cpp b/appsrc/service/app_core.cpp index 001768f..603a9f6 100644 --- a/appsrc/service/app_core.cpp +++ b/appsrc/service/app_core.cpp @@ -24,7 +24,7 @@ #include "hardware/warning_light_controler.hpp" // #include "baseservice/db/device_ext_setting_dao.hpp" -#include "calibration/h2o2_liquid_weight_sensor_calibration_service.hpp" +#include "calibration/sensor_calibration_service.hpp" #include "equipment_usage_info_mgr_service.hpp" #include "service/h2o2_sensor_mgr.hpp" #include "service/hardware/h2o2_sensor_state_sync.hpp" @@ -175,7 +175,7 @@ void AppCore::initialize() { BUILD_AND_REG_SERRVICE(DisinfectionCtrlServiceExt); BUILD_AND_REG_SERRVICE(DrainLiquidService); BUILD_AND_REG_SERRVICE(DebugPageTestService); - BUILD_AND_REG_SERRVICE(H2O2LiquidWeightSensorCalibrationService); // H2O2液体重量传感器校准 + BUILD_AND_REG_SERRVICE(SensorCalibrationService); // H2O2液体重量传感器校准 BUILD_AND_REG_SERRVICE(ExtSettingMgrService); BUILD_AND_REG_SERRVICE(EquipmentUsageInfoMgrService); diff --git a/appsrc/service/calibration/h2o2_liquid_weight_sensor_calibration_service.cpp b/appsrc/service/calibration/h2o2_liquid_weight_sensor_calibration_service.cpp deleted file mode 100644 index cec9f1a..0000000 --- a/appsrc/service/calibration/h2o2_liquid_weight_sensor_calibration_service.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "h2o2_liquid_weight_sensor_calibration_service.hpp" - -using namespace iflytop; -using namespace std; -using namespace core; - -void H2O2LiquidWeightSensorCalibrationService::initialize() { - GET_TO_SERVICE(m_disinfectantWeightUpdateService); - REG_EXTFN_VOID(getWeight, json(void)); // - - REG_EXTFN_VOID(tare, void(void)); // 去皮 - REG_EXTFN(setBiasDirect, void(float), bias); // - REG_EXTFN_VOID(getBias, void(void)); // -} -void H2O2LiquidWeightSensorCalibrationService::tare(shared_ptr cxt) { // - float weight = m_disinfectantWeightUpdateService->getRoughWeight(); - CalibrationInfoDao::ins()->setH2O2LiquidWeightSensorZeroBias(weight + 10); -} -void H2O2LiquidWeightSensorCalibrationService::getWeight(shared_ptr cxt) { - float weight = m_disinfectantWeightUpdateService->getWeight(); - float roughWeight = m_disinfectantWeightUpdateService->getRoughWeight(); - cxt->rely["weight"] = weight; - cxt->rely["roughWeight"] = roughWeight; -} - -void H2O2LiquidWeightSensorCalibrationService::getBias(shared_ptr cxt) { - float bias = CalibrationInfoDao::ins()->getH2O2LiquidWeightSensorZeroBias(); - cxt->rely["bias"] = bias; -} - -void H2O2LiquidWeightSensorCalibrationService::setBiasDirect(shared_ptr cxt, float bias) { CalibrationInfoDao::ins()->setH2O2LiquidWeightSensorZeroBias(bias); } diff --git a/appsrc/service/calibration/sensor_calibration_service.cpp b/appsrc/service/calibration/sensor_calibration_service.cpp new file mode 100644 index 0000000..78d2415 --- /dev/null +++ b/appsrc/service/calibration/sensor_calibration_service.cpp @@ -0,0 +1,48 @@ +#include "sensor_calibration_service.hpp" + +using namespace iflytop; +using namespace std; +using namespace core; + +void SensorCalibrationService::initialize() { + GET_TO_SERVICE(m_disinfectantWeightUpdateService); + REG_EXTFN_VOID(getWeight, json(void)); // + + REG_EXTFN_VOID(tare, void(void)); // 去皮 + REG_EXTFN(setBiasDirect, void(float), bias); // + REG_EXTFN_VOID(getBias, void(void)); // + + REG_EXTFN(setACPressureSensorZeroBiasKpa, void(float), val); // 设置AC压力传感器零点偏置 + REG_EXTFN_VOID(getACPressureSensorZeroBiasKpa, void(void)); // 获取AC压力传感器零点偏置 + REG_EXTFN_VOID(getACPressureSensorVal, void(void)); // 获取AC压力传感器去皮后的值 +} +void SensorCalibrationService::tare(shared_ptr cxt) { // + float weight = m_disinfectantWeightUpdateService->getRoughWeight(); + CalibrationInfoDao::ins()->setH2O2LiquidWeightSensorZeroBias(weight + 10); +} +void SensorCalibrationService::getWeight(shared_ptr cxt) { + float weight = m_disinfectantWeightUpdateService->getWeight(); + float roughWeight = m_disinfectantWeightUpdateService->getRoughWeight(); + cxt->rely["weight"] = weight; + cxt->rely["roughWeight"] = roughWeight; +} + +void SensorCalibrationService::getBias(shared_ptr cxt) { + float bias = CalibrationInfoDao::ins()->getH2O2LiquidWeightSensorZeroBias(); + cxt->rely["bias"] = bias; +} + +void SensorCalibrationService::setBiasDirect(shared_ptr cxt, float bias) { CalibrationInfoDao::ins()->setH2O2LiquidWeightSensorZeroBias(bias); } + +void SensorCalibrationService::setACPressureSensorZeroBiasKpa(shared_ptr cxt, float val) { CalibrationInfoDao::ins()->setACPressureSensorZeroBiasKpa(val); } +void SensorCalibrationService::getACPressureSensorZeroBiasKpa(shared_ptr cxt) { + float bias = CalibrationInfoDao::ins()->getACPressureSensorZeroBiasKpa(); + cxt->rely["bias"] = bias; // +} + +void SensorCalibrationService::getACPressureSensorVal(shared_ptr cxt) { + float weight = GET_SERVICE(DeviceIoControlService)->ACPostPS_readPa() / 1000.0; + float aftare = CalibrationInfoDao::ins()->acPressureSensorTare(weight); + cxt->rely["afterTare"] = aftare; // 去皮后的值 + cxt->rely["rawVal"] = weight; // 原始值 +} diff --git a/appsrc/service/calibration/h2o2_liquid_weight_sensor_calibration_service.hpp b/appsrc/service/calibration/sensor_calibration_service.hpp similarity index 60% rename from appsrc/service/calibration/h2o2_liquid_weight_sensor_calibration_service.hpp rename to appsrc/service/calibration/sensor_calibration_service.hpp index bc75a7c..3c35116 100644 --- a/appsrc/service/calibration/h2o2_liquid_weight_sensor_calibration_service.hpp +++ b/appsrc/service/calibration/sensor_calibration_service.hpp @@ -12,8 +12,8 @@ #include "baseservice/baseservice.hpp" #include "service/hardware/disinfectant_weight_update_service.hpp" namespace iflytop { -class H2O2LiquidWeightSensorCalibrationService : public enable_shared_from_this { - THISCLASS(H2O2LiquidWeightSensorCalibrationService); +class SensorCalibrationService : public enable_shared_from_this { + THISCLASS(SensorCalibrationService); shared_ptr m_udiskMgr; shared_ptr m_disinfectantWeightUpdateService; @@ -25,7 +25,11 @@ class H2O2LiquidWeightSensorCalibrationService : public enable_shared_from_this< void tare(shared_ptr cxt); void getWeight(shared_ptr cxt); void getBias(shared_ptr cxt); - void setBiasDirect(shared_ptr cxt,float val); + void setBiasDirect(shared_ptr cxt, float val); + + void setACPressureSensorZeroBiasKpa(shared_ptr cxt, float val); + void getACPressureSensorZeroBiasKpa(shared_ptr cxt); + void getACPressureSensorVal(shared_ptr cxt) ; }; } // namespace iflytop