diff --git a/iflytoplinuxsdk b/iflytoplinuxsdk index 7f37690..e7f29bc 160000 --- a/iflytoplinuxsdk +++ b/iflytoplinuxsdk @@ -1 +1 @@ -Subproject commit 7f3769013113fc2d60f0c2b50924d67ca138bc96 +Subproject commit e7f29bc0cb917c9e17706e9c7666f9c9f47cefc1 diff --git a/src/main_control_service.cpp b/src/main_control_service.cpp index 8fed7a4..d4e1f1d 100644 --- a/src/main_control_service.cpp +++ b/src/main_control_service.cpp @@ -282,8 +282,8 @@ void MainControlService::processFrontEndMessage(weak_ptr webSocket, j #endif if (cmdstr == "startReplenishingFluids") { - logger->info("startReplenishingFluids"); int16_t stopAt = jsonGet(cmd["stopAt"]); + logger->info("startReplenishingFluids {}", stopAt); m_disinfectionCtrlService->startReplenishingFluids(stopAt); return; } diff --git a/src/service/disinfection_ctl_service.cpp b/src/service/disinfection_ctl_service.cpp index b38186c..33dabda 100644 --- a/src/service/disinfection_ctl_service.cpp +++ b/src/service/disinfection_ctl_service.cpp @@ -24,14 +24,14 @@ using namespace std; #define PRE_HEAT_TIME (5 * 60) -void DisinfectionCtrlService::drainingPump_open() { m_zcanHost->pumpctrl_c1004(2, 100, -300, 1, 20); } -void DisinfectionCtrlService::drainingPump_close() { m_zcanHost->pumpctrl_c1004(2, 100, 0, 1, 20); } +void DisinfectionCtrlService::drainingPump_open() { m_zcanHost->pumpctrl_c1004(1, 100, -300, 1, 20); } +void DisinfectionCtrlService::drainingPump_close() { m_zcanHost->pumpctrl_c1004(1, 100, 0, 1, 20); } -void DisinfectionCtrlService::replenishingFluidsPump_open() { m_zcanHost->pumpctrl_c1004(2, 100, 300, 1, 20); } -void DisinfectionCtrlService::replenishingFluidsPump_close() { m_zcanHost->pumpctrl_c1004(2, 100, 0, 1, 20); } +void DisinfectionCtrlService::replenishingFluidsPump_open() { m_zcanHost->pumpctrl_c1004(1, 100, 300, 1, 20); } +void DisinfectionCtrlService::replenishingFluidsPump_close() { m_zcanHost->pumpctrl_c1004(1, 100, 0, 1, 20); } -void DisinfectionCtrlService::sprayLiquidPump_open() { m_zcanHost->pumpctrl_c1004(1, 100, 200, 1, 15); } -void DisinfectionCtrlService::sprayLiquidPump_close() { m_zcanHost->pumpctrl_c1004(1, 100, 0, 1, 15); } +void DisinfectionCtrlService::sprayLiquidPump_open() { m_zcanHost->pumpctrl_c1004(2, 100, 200, 1, 15); } +void DisinfectionCtrlService::sprayLiquidPump_close() { m_zcanHost->pumpctrl_c1004(2, 100, 0, 1, 15); } void DisinfectionCtrlService::airCompressor(bool val) { if (val) { @@ -95,6 +95,14 @@ string DisinfectionCtrlService::createDisinfectionID() { void DisinfectionCtrlService::initialize() { GET_TO_SERVICE(m_zcanHost); GET_TO_SERVICE(m_sensorDataScan); + + drainingPump_close(); + replenishingFluidsPump_close(); + sprayLiquidPump_close(); + + heartingPlate_setPower(false); + blower_setPower(false); + airCompressor(false); } void DisinfectionCtrlService::startDisinfection(int loglevel, float roomVol) { lock_guard lock(lock_); @@ -104,18 +112,19 @@ void DisinfectionCtrlService::startDisinfection(int loglevel, float roomVol) { } m_disinfectionID = createDisinfectionID(); - m_remaintime = loglevel * 20 * 60; // 计算总的加热时间 + // m_remaintime = loglevel * 20 * 60; // 计算总的加热时间 + m_remaintime = PRE_HEAT_TIME + loglevel * 20 * 60 * (roomVol / 20.0); // 计算总的加热时间 + m_disinfectionWorkState = 1; m_disinfectionThread.reset(new Thread("m_disinfectionThread", [this, roomVol, loglevel]() { ThisThread thisThread; - bool preHeartFinishedFlag = false; + // bool preHeartFinishedFlag = false; logger->info("startDisinfection {} {} {}", loglevel, roomVol, m_disinfectionID); - auto starttime = zsteady_clock().now(); - m_disinfectionWorkState = 1; + auto starttime = zsteady_clock().now(); heartingPlate_setPower(true); - + m_preheatFlag = 1; while (!thisThread.getExitFlag()) { thisThread.sleepForMs(1000); if (m_disinfectionWorkState == 2) { @@ -129,16 +138,16 @@ void DisinfectionCtrlService::startDisinfection(int loglevel, float roomVol) { break; } - logger->info("disinfection running {} {}s preheatFlag:{}", m_disinfectionID, m_remaintime, preHeartFinishedFlag); + logger->info("disinfection running {} {}s preheatFlag:{}", m_disinfectionID, m_remaintime, m_preheatFlag); - if (!preHeartFinishedFlag && zsteady_clock().elapsedTimeS(starttime) > PRE_HEAT_TIME) { + if (m_preheatFlag && zsteady_clock().elapsedTimeS(starttime) > PRE_HEAT_TIME) { logger->info("preheat finished {}", m_disinfectionID); blower_setPower(true); usleep(1000 * 1000); airCompressor(true); usleep(1000 * 1000); sprayLiquidPump_open(); - preHeartFinishedFlag = true; + m_preheatFlag = false; } } @@ -166,6 +175,7 @@ void DisinfectionCtrlService::stopDisinfection() { m_disinfectionThread->join(); m_disinfectionThread = nullptr; } + m_disinfectionWorkState = 0; } int32_t DisinfectionCtrlService::getEstimatedRemainingTimeS() { @@ -193,8 +203,8 @@ void DisinfectionCtrlService::startReplenishingFluids(int stopatg) { m_disinfectionThread.reset(new Thread("disinfectionThread", [this, stopatg]() { ThisThread thisThread; replenishingFluidsPump_open(); - m_replenishingFluidsWorkState = 1; - while (thisThread.getExitFlag()) { + logger->info("startReplenishingFluids {}g", stopatg); + while (!thisThread.getExitFlag()) { int32_t nowvolume = m_sensorDataScan->getDisinfectantVolume_g(); logger->info("replenishingFluids {}g", nowvolume); if (nowvolume > stopatg) { @@ -214,7 +224,7 @@ void DisinfectionCtrlService::startReplenishingFluids(int stopatg) { })); // - + m_replenishingFluidsWorkState = 1; logger->info("startReplenishingFluids "); } // 停止加液 diff --git a/src/service/disinfection_ctl_service.hpp b/src/service/disinfection_ctl_service.hpp index 8f1d12f..b4f3e4f 100644 --- a/src/service/disinfection_ctl_service.hpp +++ b/src/service/disinfection_ctl_service.hpp @@ -41,13 +41,15 @@ class DisinfectionCtrlService : public enable_shared_from_this m_sensorDataScan; string m_disinfectionID; - int m_remaintime = 0; + int m_remaintime = 0; recursive_mutex lock_; int m_disinfectionWorkState = 0; int m_replenishingFluidsWorkState = 0; int m_drainingWorkState = 0; + bool m_preheatFlag = false; + shared_ptr m_zcanHost; public: diff --git a/src/service/sensor_data_scan.cpp b/src/service/sensor_data_scan.cpp index f0e9b65..37c7f24 100644 --- a/src/service/sensor_data_scan.cpp +++ b/src/service/sensor_data_scan.cpp @@ -58,26 +58,41 @@ void SensorDataScan::startScan() { int SensorDataScan::getAirCompressor_io1() { return m_zcanHost->read_writeio_state_cache(1); } int SensorDataScan::getAirCompressor_io2() { return m_zcanHost->read_writeio_state_cache(2); } -int SensorDataScan::getAirCompressor_currentValue() { return m_adc_0; } +int SensorDataScan::getAirCompressor_currentValue() { return m_adc_0 * 0.00167 - 1.25; } int SensorDataScan::getAirBlower_io1() { return m_zcanHost->read_writeio_state_cache(3); } int SensorDataScan::getAirBlower_io2() { return m_zcanHost->read_writeio_state_cache(4); } -int SensorDataScan::getAirBlower_currentValue() { return m_adc_1; } +int SensorDataScan::getAirBlower_currentValue() { return m_adc_1 * 0.00167 - 1.25; } // heatingStrip int SensorDataScan::getHeatingStrip_io1() { return m_zcanHost->read_writeio_state_cache(5); } int SensorDataScan::getHeatingStrip_io2() { return m_zcanHost->read_writeio_state_cache(6); } -int SensorDataScan::getHeatingStrip_currentValue() { return m_adc_2; } +int SensorDataScan::getHeatingStrip_currentValue() { return m_adc_2 * 0.00336 - 2.5; } int SensorDataScan::getSprinkler_PumpRPM() { return m_zcanHost->pumpctrl_c1004_get_speed_cache(2); } int SensorDataScan::getChargingPump_PumpRPM() { return m_zcanHost->pumpctrl_c1004_get_speed_cache(1); } int SensorDataScan::getDisinfectantVolume_g() { // kpa; - int pa = m_zcanHost->huacheng_pressure_sensor_get_pa(&m_pressure_sensor_data[0]); + + // logger->info("m_pressure_sensor_data[1].pressure: {}", m_pressure_sensor_data[1].precision); + // logger->info("m_pressure_sensor_data[1].unit: {}", m_pressure_sensor_data[1].unit); + // logger->info("m_pressure_sensor_data[1].value: {}", m_pressure_sensor_data[1].value); + + float kpa = m_pressure_sensor_data[1].value / 1000.0; + int g = 2.11 * kpa * 1000; + + // logger->info("g: {}", g); + if (g < 450) { /*零点*/ + return 0; + } + // logger->info("pa: {}", pa); + // if (pa < 0) { + // return 0; + // } // m(kg)=2.11*P(kPa) // pa = 1; // TODO 检查传感器异常,则不允许加液 - return 2.11 * pa * 1000; + return g; } int SensorDataScan::getWaterImmersionSensor1() { return m_waterImmersionSensor1 ? 1 : 0; } diff --git a/src/service/sensor_data_scan.hpp b/src/service/sensor_data_scan.hpp index 21a2f05..0c8f037 100644 --- a/src/service/sensor_data_scan.hpp +++ b/src/service/sensor_data_scan.hpp @@ -42,7 +42,7 @@ class SensorDataScan : public enable_shared_from_this { // ZCanHost::hpp272_data_t m_hpp272_data_1; - ZCanHost::huacheng_pressure_sensor_read_c1005_t m_pressure_sensor_data[4]; + ZCanHost::huacheng_pressure_sensor_read_c1005_t m_pressure_sensor_data[5]; //