From 2b63964b0fdeaf1dce24c31037f984c8da0252c0 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 17 Aug 2024 20:29:47 +0800 Subject: [PATCH] update --- .../canchannel/com/zscanprotocol_com.cpp | 5 +- appsrc/appsetting/project_port/project_port.cpp | 41 ++- appsrc/appsetting/project_port/project_port.hpp | 1 + .../disinfection_ctrl_service.cpp | 3 +- .../service/hardware/base/h2o2_sensor_data_mgr.cpp | 3 +- appsrc/service/hardware/device_ctrl_service.cpp | 302 ++++++++++++--------- appsrc/service/hardware/device_ctrl_service.hpp | 5 +- .../disinfectant_weight_update_service.cpp | 13 +- .../service/hardware/warning_light_controler.cpp | 57 ++-- 9 files changed, 269 insertions(+), 161 deletions(-) diff --git a/appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp b/appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp index 482e27f..e465657 100644 --- a/appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp +++ b/appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp @@ -198,7 +198,7 @@ shared_ptr ZSCanProtocolCom::callcmd(int32_t to, int32_t cmdid, uint8_t for (size_t i = 0; i <= 3; i++) { try { - if (i != 0) logger->warn("callcmd overtime, retry %d", i); + if (i != 0) logger->warn("callcmd overtime, retry {}", i); receipt = base_callcmd(to, cmdid, param, paramLen, overtime); } catch (const appexception &e) { if (e.ecode() == err::kerr_overtime) { @@ -206,8 +206,9 @@ shared_ptr ZSCanProtocolCom::callcmd(int32_t to, int32_t cmdid, uint8_t } throw; } + break; } - if(receipt == nullptr) THROW_APP_EXCEPTION(err::kerr_overtime, "overtime"); + if (receipt == nullptr) THROW_APP_EXCEPTION(err::kerr_overtime, "overtime"); return receipt; } shared_ptr ZSCanProtocolCom::callcmd0(int32_t to, int32_t cmdid, int32_t overtime) { return callcmd(to, cmdid, nullptr, 0, overtime); } diff --git a/appsrc/appsetting/project_port/project_port.cpp b/appsrc/appsetting/project_port/project_port.cpp index 2f06f96..e88abd9 100644 --- a/appsrc/appsetting/project_port/project_port.cpp +++ b/appsrc/appsetting/project_port/project_port.cpp @@ -44,7 +44,7 @@ void ProjectPort::initProjectSetting(int projectTypeInt) { // 设备ID初始化 if (isLageSpaceDM() || isSmallSpaceDM() || isPipeDM()) { - // 加液泵 + // 加液泵 INSERT(HardwareComponent::kAddLiquidPump, kFixBoardId_LiquidCtrl, kpumpid_add_liquid); // 喷雾泵 INSERT(HardwareComponent::kSprayPump, kFixBoardId_LiquidCtrl, kpumpid_spray); @@ -62,7 +62,7 @@ void ProjectPort::initProjectSetting(int projectTypeInt) { INSERT(HardwareComponent::kDeviceBottomWS, kFixBoardId_LiquidCtrl, 0); // 主H2O2传感器 INSERT(HardwareComponent::kMainH2O2Sensor, kFixBoardId_PowerControl, 0); - // 液体重量传感器 + // 液体重量传感器 INSERT(HardwareComponent::kLiquidWeightPS, kFixBoardId_LiquidCtrl, 1); // 空压机后压力传感器 INSERT(HardwareComponent::kACPostPS, kFixBoardId_LiquidCtrl, 2); @@ -83,12 +83,41 @@ void ProjectPort::initProjectSetting(int projectTypeInt) { if (isDrawBarDM()) { } } +// 00003069 INFO [PxxSensor] Sensor[1] id:1 ptype:DP600 detected:1 +// 00003070 INFO [PxxSensor] Sensor[2] id:2 ptype:P100 precision:1 unit:kpa zero:0 full:8000 空压机 +// 00003071 INFO [PxxSensor] Sensor[3] id:3 ptype:P100 precision:1 unit:kpa zero:-900 full:1000 喷液 +// 00003072 INFO [PxxSensor] Sensor[4] id:4 ptype:P100 precision:1 unit:kpa zero:-900 full:1000 加液 + +float ProjectPort::ACPostPS_To_Pa(int rawval) { + if (isLageSpaceDM() || isSmallSpaceDM() || isPipeDM()) { + return rawval / 10.0 * 1000; + } else { + THROW_APP_EXCEPTION(err::kappe_code_error, "project [%s(%d)] not support: ", to_string(projectTypeInt).c_str(), projectTypeInt); + } +} +float ProjectPort::LiquidWeightPS_To_Pa(int rawval) { + if (isLageSpaceDM() || isSmallSpaceDM() || isPipeDM()) { + return rawval; + } else { + THROW_APP_EXCEPTION(err::kappe_code_error, "project [%s(%d)] not support: ", to_string(projectTypeInt).c_str(), projectTypeInt); + } +} +float ProjectPort::SprayPumpPostPS_To_Pa(int rawval) { + if (isLageSpaceDM() || isSmallSpaceDM() || isPipeDM()) { + return rawval / 10.0 * 1000; + } else { + THROW_APP_EXCEPTION(err::kappe_code_error, "project [%s(%d)] not support: ", to_string(projectTypeInt).c_str(), projectTypeInt); + } +} +float ProjectPort::AddLiquidPumpPostPS_To_Pa(int rawval) { + if (isLageSpaceDM() || isSmallSpaceDM() || isPipeDM()) { + return rawval / 10.0 * 1000; + } else { + THROW_APP_EXCEPTION(err::kappe_code_error, "project [%s(%d)] not support: ", to_string(projectTypeInt).c_str(), projectTypeInt); + } +} -float ProjectPort::ACPostPS_To_Pa(int rawval) { return rawval; } float ProjectPort::AirLeakDetectPS_To_Pa(int rawval) { return rawval; } -float ProjectPort::LiquidWeightPS_To_Pa(int rawval) { return rawval; } -float ProjectPort::SprayPumpPostPS_To_Pa(int rawval) { return rawval; } -float ProjectPort::AddLiquidPumpPostPS_To_Pa(int rawval) { return rawval; } double ProjectPort::getGpm2SpeedRadio() { float gpmToSpeedRadio = 0; diff --git a/appsrc/appsetting/project_port/project_port.hpp b/appsrc/appsetting/project_port/project_port.hpp index 831223b..bf3e777 100644 --- a/appsrc/appsetting/project_port/project_port.hpp +++ b/appsrc/appsetting/project_port/project_port.hpp @@ -102,6 +102,7 @@ class ProjectPort { int32_t getSprayLiquidPumpMaxRPM(); int32_t getDisinfectantBucketCapacity(); int32_t getExtH2O2SensorNum(); + // int emptyPipeSprayPumpRPM = 700; int32_t getEmptyPipeSprayPumpRPM(); private: diff --git a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp index ed831e8..712c576 100644 --- a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp +++ b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp @@ -480,7 +480,8 @@ void DisinfectionCtrlService::processStateFinished(DisinfectionEvent* event) { s_remaintime = 0; s_complete_tp = zsystem_clock().now(); if (PORT.isLageSpaceDM() || PORT.isSmallSpaceDM() || PORT.isPipeDM()) { - s_afterDisinfectantVolume_g = dcs->DisinfectantVolume_readVal(); + s_afterDisinfectantVolume_g = GET_SERVICE(DisinfectantWeightUpdateService)->getWeight(); + } else if (PORT.isDrawBarDM()) { s_afterDisinfectantVolume_g = 0; } diff --git a/appsrc/service/hardware/base/h2o2_sensor_data_mgr.cpp b/appsrc/service/hardware/base/h2o2_sensor_data_mgr.cpp index 18ec05c..5f13628 100644 --- a/appsrc/service/hardware/base/h2o2_sensor_data_mgr.cpp +++ b/appsrc/service/hardware/base/h2o2_sensor_data_mgr.cpp @@ -11,7 +11,7 @@ int H2O2SensorDataMgr::getMaxSaturation() { return m_maxSaturation; } shared_ptr H2O2SensorDataMgr::getCacheData(uint8_t sensorId) { return getSensorDataCache(sensorId); } shared_ptr H2O2SensorDataMgr::takeSnapshot() { - lock_guard lock(m_lock); + lock_guard lock(m_lock); shared_ptr snapshot = make_shared(); ZASSERT(PORT.getExtH2O2SensorNum() <= 2); @@ -66,6 +66,7 @@ shared_ptr H2O2SensorDataMgr::getSensorDataCache(uint8_t se void H2O2SensorDataMgr::updateH2o2SensorData(uint8_t sensorId, report_h2o2_data_t* h2o2data) { lock_guard lock(m_lock); + logger->info("update h2o2 : sensorId = {}, h2o2 = {}, temp = {}, humid = {}, saturation = {}", sensorId, h2o2data->h2o2, h2o2data->temp, h2o2data->humid, h2o2data->saturation); auto dataCache = getSensorDataCache(sensorId); dataCache->updatetime = zsys_get_ticket(); diff --git a/appsrc/service/hardware/device_ctrl_service.cpp b/appsrc/service/hardware/device_ctrl_service.cpp index 7c6b78d..30ab6c4 100644 --- a/appsrc/service/hardware/device_ctrl_service.cpp +++ b/appsrc/service/hardware/device_ctrl_service.cpp @@ -16,11 +16,11 @@ using namespace core; * */ -static bool isInPc() { +static bool isInDevice() { #if (defined BUILD_ON_PC) // x86平台 - return true; -#else return false; +#else + return true; #endif } @@ -36,7 +36,7 @@ static bool isInPc() { void DeviceIoControlService::initialize() { GET_TO_SERVICE(m_config); - if (isInPc()) { + if (!isInDevice()) { logger->warn("run in pc, skip initialize device io control service"); return; } else { @@ -49,6 +49,7 @@ void DeviceIoControlService::initialize() { processReportMsg(from, hex, hexlen); } }); + REGFNV2(DeviceIoControlService, test); } void DeviceIoControlService::processReportMsg(uint8_t from, uint8_t *hex, uint32_t hexlen) { // zcanbus_packet_t *packet = (zcanbus_packet_t *)hex; @@ -67,126 +68,109 @@ void DeviceIoControlService::processReportMsg(uint8_t from, uint8_t *hex, uint32 // 加液泵控制 #define COMPONENT HardwareComponent::AddLiquidPump void DeviceIoControlService::AddLiquidPump_addLiquid() { - if (isInPc()) return; - int pumpspeed = GET_SETTING(int, SettingId::drainage_pump_speed); - CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), pumpspeed); + logger->info("AddLiquidPump_addLiquid, pumpspeed={}", pumpspeed); + + if (isInDevice()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), pumpspeed); } void DeviceIoControlService::AddLiquidPump_drainLiquid() { - if (isInPc()) return; - int pumpspeed = GET_SETTING(int, SettingId::drainage_pump_speed); - CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), -pumpspeed); + logger->info("AddLiquidPump_drainLiquid, pumpspeed={}", -pumpspeed); + + if (isInDevice()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), -pumpspeed); } void DeviceIoControlService::AddLiquidPump_run(int rpm) { - if (isInPc()) return; - - CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), rpm); + logger->info("AddLiquidPump_run, rpm={}", rpm); + if (isInDevice()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), rpm); } void DeviceIoControlService::AddLiquidPump_stop() { - if (isInPc()) return; - - CAN_MASTER->pumpStop(GET_BOARDID(), GET_SUBID()); + logger->info("AddLiquidPump_stop"); + if (isInDevice()) CAN_MASTER->pumpStop(GET_BOARDID(), GET_SUBID()); } #undef COMPONENT // 喷雾泵控制 #define COMPONENT HardwareComponent::SprayPump void DeviceIoControlService::SprayPump_start(int32_t gpm) { - if (isInPc()) return; - int pumpspeed_rpm = ProjectPort::ins().gpm2speed(gpm); - CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), pumpspeed_rpm); + logger->info("SprayPump_start, gpm={}, rpm={}", gpm, pumpspeed_rpm); + if (isInDevice()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), pumpspeed_rpm); } void DeviceIoControlService::SprayPump_stop() { - if (isInPc()) return; - - CAN_MASTER->pumpStop(GET_BOARDID(), GET_SUBID()); + logger->info("SprayPump_stop"); + if (isInDevice()) CAN_MASTER->pumpStop(GET_BOARDID(), GET_SUBID()); } void DeviceIoControlService::SprayPump_startInRPM(int32_t rpm) { - if (isInPc()) return; - - CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), rpm); + logger->info("SprayPump_startInRPM, rpm={}", rpm); + if (isInDevice()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), rpm); } #undef COMPONENT // 鼓风机控制 #define COMPONENT HardwareComponent::Blower void DeviceIoControlService::Blower_ctrl(int power) { - if (isInPc()) return; - CAN_MASTER->blowerCtrl(GET_BOARDID(), power); + logger->info("Blower_ctrl, power={}", power); + if (isInDevice()) CAN_MASTER->blowerCtrl(GET_BOARDID(), power); usleep(1000 * 1000); } void DeviceIoControlService::Blower_close() { - if (isInPc()) return; - - CAN_MASTER->blowerCtrl(GET_BOARDID(), 0); + logger->info("Blower_close"); + if (isInDevice()) CAN_MASTER->blowerCtrl(GET_BOARDID(), 0); } float DeviceIoControlService::Blower_readEI() { - if (isInPc()) return 0; - - return CAN_MASTER->blowerReadEI(GET_BOARDID()) / 1000.0; + logger->info("Blower_readEI"); + if (isInDevice()) return CAN_MASTER->blowerReadEI(GET_BOARDID()) / 1000.0; + return 0; } #undef COMPONENT // 空压机控制 #define COMPONENT HardwareComponent::AirCompressor void DeviceIoControlService::AC_ctrl(int power) { - if (isInPc()) return; - - CAN_MASTER->airCompressorCtrl(GET_BOARDID(), power); + logger->info("AC_ctrl, power={}", power); + if (isInDevice()) CAN_MASTER->airCompressorCtrl(GET_BOARDID(), power); usleep(1000 * 1000); } void DeviceIoControlService::AC_close() { - if (isInPc()) { - return; - } - CAN_MASTER->airCompressorCtrl(GET_BOARDID(), 0); + logger->info("AC_close"); + if (isInDevice()) CAN_MASTER->airCompressorCtrl(GET_BOARDID(), 0); } float DeviceIoControlService::AC_readEI() { - if (isInPc()) { - return 0; - } - return CAN_MASTER->airCompressorReadEI(GET_BOARDID()) / 1000.0; + logger->info("AC_readEI"); + if (isInDevice()) return CAN_MASTER->airCompressorReadEI(GET_BOARDID()) / 1000.0; + return 0; } #undef COMPONENT // 加热器控制 #define COMPONENT HardwareComponent::Heater void DeviceIoControlService::Heater_ctrl(int power) { - if (isInPc()) { - return; - } - CAN_MASTER->heaterCtrl(GET_BOARDID(), power); + logger->info("Heater_ctrl, power={}", power); + if (isInDevice()) CAN_MASTER->heaterCtrl(GET_BOARDID(), power); usleep(1000 * 1000); } void DeviceIoControlService::Heater_close() { - if (isInPc()) { - return; - } - CAN_MASTER->heaterCtrl(GET_BOARDID(), 0); + logger->info("Heater_close"); + if (isInDevice()) CAN_MASTER->heaterCtrl(GET_BOARDID(), 0); } float DeviceIoControlService::Heater_readEI() { - if (isInPc()) { - return 0; - } - return CAN_MASTER->heaterReadEI(GET_BOARDID()) / 1000.0; + logger->info("Heater_readEI"); + if (isInDevice()) return CAN_MASTER->heaterReadEI(GET_BOARDID()) / 1000.0; + return 0; } float DeviceIoControlService::Heater_readTemperature() { - if (isInPc()) { - return 0; - } - return CAN_MASTER->heaterReadTemperature(GET_BOARDID()) / 10.0; + logger->info("Heater_readTemperature"); + if (isInDevice()) return CAN_MASTER->heaterReadTemperature(GET_BOARDID()) / 10.0; + return 0; } #undef COMPONENT // 三色指示灯控制 #define COMPONENT HardwareComponent::WarningLight void DeviceIoControlService::WarningLight_setState(int r, int g, int b, int warning) { // - if (isInPc()) return; - - CAN_MASTER->warningLightSetState(GET_BOARDID(), r, g, b, warning); + logger->info("WarningLight_setState, r={}, g={}, b={}, warning={}", r, g, b, warning); + if (isInDevice()) CAN_MASTER->warningLightSetState(GET_BOARDID(), r, g, b, warning); } #undef COMPONENT @@ -197,50 +181,53 @@ void DeviceIoControlService::WarningLight_setState(int r, int g, int b, int warn #define COMPONENT HardwareComponent::PositivePressureProportional void DeviceIoControlService::PosiPressureProp_setValve(int valveValue) { // - if (isInPc()) return; valveValue = valveValue / 100.0 * 255; - CAN_MASTER->proportionalSetValve(GET_BOARDID(), GET_SUBID(), valveValue); + logger->info("PosiPressureProp_setValve, valveValue={}", valveValue); + if (isInDevice()) CAN_MASTER->proportionalSetValve(GET_BOARDID(), GET_SUBID(), valveValue); } int DeviceIoControlService::PosiPressureProp_readPos() { - if (isInPc()) return 0; - int pos = CAN_MASTER->proportionalReadPos(GET_BOARDID(), GET_SUBID()); - pos = pos / 255.0 * 100; - return pos; + if (isInDevice()) { + int pos = CAN_MASTER->proportionalReadPos(GET_BOARDID(), GET_SUBID()); + pos = pos / 255.0 * 100; + return pos; + } + return 0; } bool DeviceIoControlService::PosiPressureProp_isBusy() { - if (isInPc()) return false; - return CAN_MASTER->proportionalIsBusy(GET_BOARDID(), GET_SUBID()); + if (isInDevice()) return CAN_MASTER->proportionalIsBusy(GET_BOARDID(), GET_SUBID()); + return false; } #undef COMPONENT #define COMPONENT HardwareComponent::NegativePressureProportional void DeviceIoControlService::NegaPressureProp_setValve(int valveValue) { - if (isInPc()) return; valveValue = valveValue / 100.0 * 255; - CAN_MASTER->proportionalSetValve(GET_BOARDID(), GET_SUBID(), valveValue); + logger->info("NegaPressureProp_setValve, valveValue={}", valveValue); + if (isInDevice()) CAN_MASTER->proportionalSetValve(GET_BOARDID(), GET_SUBID(), valveValue); } int DeviceIoControlService::NegaPressureProp_readPos() { - if (isInPc()) return 0; - - int pos = CAN_MASTER->proportionalReadPos(GET_BOARDID(), GET_SUBID()); - pos = pos / 255.0 * 100; - return pos; + if (isInDevice()) { + int pos = CAN_MASTER->proportionalReadPos(GET_BOARDID(), GET_SUBID()); + pos = pos / 255.0 * 100; + return pos; + } + return 0; } bool DeviceIoControlService::NegaPressureProp_isBusy() { - if (isInPc()) return false; - return CAN_MASTER->proportionalIsBusy(GET_BOARDID(), GET_SUBID()); + if (isInDevice()) return CAN_MASTER->proportionalIsBusy(GET_BOARDID(), GET_SUBID()); + return false; } #undef COMPONENT #define COMPONENT HardwareComponent::AirLeakDetectTestModeCtrl void DeviceIoControlService::AirLeakDetectTestModeCtrl_setMode(int mode) { - if (isInPc()) return; - CAN_MASTER->airLeakDetectTestSetMode(GET_BOARDID(), mode); + logger->info("AirLeakDetectTestModeCtrl_setMode, mode={}", mode); + if (isInDevice()) CAN_MASTER->airLeakDetectTestSetMode(GET_BOARDID(), mode); } int DeviceIoControlService::AirLeakDetectTestModeCtrl_getMode() { - if (isInPc()) return 0; - return CAN_MASTER->airLeakDetectTestGetMode(GET_BOARDID()); + if (isInDevice()) return CAN_MASTER->airLeakDetectTestGetMode(GET_BOARDID()); + return 0; } #undef COMPONENT @@ -248,23 +235,28 @@ int DeviceIoControlService::AirLeakDetectTestModeCtrl_getMode() { // ExtChSelector #define COMPONENT HardwareComponent::ExtChSelector void DeviceIoControlService::ExtChSelector_selectCh(int ch) { - if (isInPc()) return; - CAN_MASTER->extChSelectorSetCh(GET_BOARDID(), ch); + logger->info("ExtChSelector_selectCh, ch={}", ch); + if (isInDevice()) CAN_MASTER->extChSelectorSetCh(GET_BOARDID(), ch); } bool DeviceIoControlService::ExtChSelector_isOnline() { - if (isInPc()) return false; - try { - CAN_MASTER->extChSelectorGetCh(GET_BOARDID()); - return true; - } catch (const std::exception &e) { - return false; + if (isInDevice()) { + try { + CAN_MASTER->extChSelectorGetCh(GET_BOARDID()); + return true; + } catch (const std::exception &e) { + return false; + } } + return false; } void DeviceIoControlService::ExtChSelector_trySelectCh(int ch) { - try { - ExtChSelector_selectCh(GET_BOARDID()); - } catch (const std::exception &e) { + logger->info("ExtChSelector_trySelectCh, ch={}", ch); + if (isInDevice()) { + try { + ExtChSelector_selectCh(GET_BOARDID()); + } catch (const std::exception &e) { + } } } @@ -275,66 +267,128 @@ void DeviceIoControlService::ExtChSelector_trySelectCh(int ch) { // 蒸发仓水浸 #define COMPONENT HardwareComponent::EvaporationBinWS bool DeviceIoControlService::WaterSensor_readEvaporationBin() { - if (isInPc()) return false; - return CAN_MASTER->evaporationTankWSReadState(GET_BOARDID()); + if (isInDevice()) return CAN_MASTER->evaporationTankWSReadState(GET_BOARDID()); + return false; } #undef COMPONENT #define COMPONENT HardwareComponent::DeviceBottomWS bool DeviceIoControlService::WaterSensor_readDeviceBottom() { - if (isInPc()) return false; - return CAN_MASTER->bottomWSReadState(GET_BOARDID()); + if (isInDevice()) return CAN_MASTER->bottomWSReadState(GET_BOARDID()); + return false; } // 设备底部水浸 #undef COMPONENT #define COMPONENT HardwareComponent::ACPostPS int DeviceIoControlService::ACPostPS_readPa() { // - if (isInPc()) return 0; - - int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); - return ProjectPort::ins().ACPostPS_To_Pa(val); + if (isInDevice()) { + int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); + return ProjectPort::ins().ACPostPS_To_Pa(val); + } + return 0; } #undef COMPONENT #define COMPONENT HardwareComponent::AirLeakDetectPS int DeviceIoControlService::AirLeakDetectPS_readPa() { // - if (isInPc()) return 0; - - int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); - return ProjectPort::ins().AirLeakDetectPS_To_Pa(val); + if (isInDevice()) { + int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); + return ProjectPort::ins().AirLeakDetectPS_To_Pa(val); + } + return 0; } #undef COMPONENT #define COMPONENT HardwareComponent::LiquidWeightPS int DeviceIoControlService::LiquidWeightPS_readPa() { // - if (isInPc()) return 0; - - int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); - return ProjectPort::ins().LiquidWeightPS_To_Pa(val); + if (isInDevice()) { + int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); + return ProjectPort::ins().LiquidWeightPS_To_Pa(val); + } + return 0; } #undef COMPONENT #define COMPONENT HardwareComponent::SprayPumpPostPS int DeviceIoControlService::SprayPumpPostPS_readPa() { // - if (isInPc()) return 0; - - int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); - return ProjectPort::ins().SprayPumpPostPS_To_Pa(val); + if (isInDevice()) { + int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); + return ProjectPort::ins().SprayPumpPostPS_To_Pa(val); + } + return 0; } #undef COMPONENT #define COMPONENT HardwareComponent::AddLiquidPumpPostPS int DeviceIoControlService::AddLiquidPumpPostPS_readPa() { // - if (isInPc()) return 0; - - int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); - return ProjectPort::ins().AddLiquidPumpPostPS_To_Pa(val); + if (isInDevice()) { + int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); + return ProjectPort::ins().AddLiquidPumpPostPS_To_Pa(val); + } + return 0; } #undef COMPONENT -int DeviceIoControlService::DisinfectantVolume_readVal() { - if (isInPc()) return 0; +// int DeviceIoControlService::DisinfectantVolume_readVal() { +// if (isInDevice()) { +// int pa = LiquidWeightPS_readPa(); +// return ProjectPort::ins().pressurePa2VolumeG(pa); +// } +// return 0; +// } // g + +#define PROCESS_CMD(fnName, ...) \ + if (testFnName == #fnName) { \ + fnName(__VA_ARGS__); \ + return; \ + } + +#define PROCESS_CMD_WITH_RET(fnName, ...) \ + if (testFnName == #fnName) { \ + auto ret = fnName(__VA_ARGS__); \ + cxt->content = ret; \ + return; \ + } - int pa = LiquidWeightPS_readPa(); - return ProjectPort::ins().pressurePa2VolumeG(pa); -} // g \ No newline at end of file +void DeviceIoControlService::fn_test(shared_ptr cxt) { + // + string testFnName = cxt->params["testFnName"]; + json param = cxt->params["testFnParams"]; + + PROCESS_CMD(AddLiquidPump_addLiquid); + PROCESS_CMD(AddLiquidPump_run, param[0]); + PROCESS_CMD(AddLiquidPump_drainLiquid); + PROCESS_CMD(AddLiquidPump_stop); + PROCESS_CMD(SprayPump_start, param[0]); + PROCESS_CMD(SprayPump_startInRPM, param[0]); + PROCESS_CMD(SprayPump_stop); + PROCESS_CMD(Blower_ctrl, param[0]); + PROCESS_CMD(Blower_close); + PROCESS_CMD_WITH_RET(Blower_readEI); + PROCESS_CMD(AC_ctrl, param[0]); + PROCESS_CMD(AC_close); + PROCESS_CMD_WITH_RET(AC_readEI); + PROCESS_CMD(Heater_ctrl, param[0]); + PROCESS_CMD(Heater_close); + PROCESS_CMD_WITH_RET(Heater_readEI); + PROCESS_CMD_WITH_RET(Heater_readTemperature); + PROCESS_CMD(WarningLight_setState, param[0], param[1], param[2], param[3]); + PROCESS_CMD(PosiPressureProp_setValve, param[0]); + PROCESS_CMD_WITH_RET(PosiPressureProp_readPos); + PROCESS_CMD_WITH_RET(PosiPressureProp_isBusy); + PROCESS_CMD(NegaPressureProp_setValve, param[0]); + PROCESS_CMD_WITH_RET(NegaPressureProp_readPos); + PROCESS_CMD_WITH_RET(NegaPressureProp_isBusy); + PROCESS_CMD(AirLeakDetectTestModeCtrl_setMode, param[0]); + PROCESS_CMD_WITH_RET(AirLeakDetectTestModeCtrl_getMode); + PROCESS_CMD(ExtChSelector_selectCh, param[0]); + PROCESS_CMD(ExtChSelector_trySelectCh, param[0]); + PROCESS_CMD_WITH_RET(ExtChSelector_isOnline); + PROCESS_CMD_WITH_RET(WaterSensor_readEvaporationBin); + PROCESS_CMD_WITH_RET(WaterSensor_readDeviceBottom); + PROCESS_CMD_WITH_RET(ACPostPS_readPa); + PROCESS_CMD_WITH_RET(AirLeakDetectPS_readPa); + PROCESS_CMD_WITH_RET(LiquidWeightPS_readPa); + PROCESS_CMD_WITH_RET(SprayPumpPostPS_readPa); + PROCESS_CMD_WITH_RET(AddLiquidPumpPostPS_readPa); +} diff --git a/appsrc/service/hardware/device_ctrl_service.hpp b/appsrc/service/hardware/device_ctrl_service.hpp index 5ab3b30..3536931 100644 --- a/appsrc/service/hardware/device_ctrl_service.hpp +++ b/appsrc/service/hardware/device_ctrl_service.hpp @@ -96,7 +96,7 @@ class DeviceIoControlService : public enable_shared_from_this getH2O2SensorMgr() { return m_h2o2SensorDataMgr; } + + private: + void fn_test(shared_ptr cxt) ; }; } // namespace iflytop \ No newline at end of file diff --git a/appsrc/service/hardware/disinfectant_weight_update_service.cpp b/appsrc/service/hardware/disinfectant_weight_update_service.cpp index 33dbaf0..ea567b5 100644 --- a/appsrc/service/hardware/disinfectant_weight_update_service.cpp +++ b/appsrc/service/hardware/disinfectant_weight_update_service.cpp @@ -17,9 +17,16 @@ float DisinfectantWeightUpdateService::getWeight() { // void DisinfectantWeightUpdateService::updateWeightThread() { while (true) { try { - float weightCache = deviceIoControlService->DisinfectantVolume_readVal(); - weightCache = filter.filter(weightCache); - logger->info("weight {} g", weightCache); + float pa = deviceIoControlService->LiquidWeightPS_readPa(); + pa = filter.filter(pa); + pa = pa - 300; + if (pa < 0) { + pa = 0; + } + + float weight_g = ProjectPort::ins().pressurePa2VolumeG(pa); + weightCache = weight_g; + logger->debug("updateWeightThread: pa={}, weight_g={}", pa, weight_g); } catch (const std::exception& e) { logger->error("updateWeightThread error: {}", e.what()); } diff --git a/appsrc/service/hardware/warning_light_controler.cpp b/appsrc/service/hardware/warning_light_controler.cpp index 052d9b7..6e974c4 100644 --- a/appsrc/service/hardware/warning_light_controler.cpp +++ b/appsrc/service/hardware/warning_light_controler.cpp @@ -29,35 +29,46 @@ void WarningLightControler::initialize() { } void WarningLightControler::beepCtrl(lightState_t state) { - switch (state) { - case kstate_warning: - m_beepState = !m_beepState; - ctrlLightNoEx(255, 0, 0, m_beepState ? 255 : 0); - break; - default: - break; + if (PORT.isLageSpaceDM() || PORT.isSmallSpaceDM() || PORT.isPipeDM()) { + switch (state) { + case kstate_warning: + m_beepState = !m_beepState; + ctrlLightNoEx(255, 0, 0, m_beepState ? 255 : 0); + break; + default: + break; + } } } void WarningLightControler::changeLightState(lightState_t state) { m_nowState = state; - - switch (m_nowState) { - case kstate_idle: - // 绿色 - ctrlLightNoEx(0, 255, 0, 0); - break; - case kstate_work: - // 黄色 - ctrlLightNoEx(0, 0, 255, 0); - break; - case kstate_warning: - // 红色 - ctrlLightNoEx(255, 0, 0, 0); - break; - default: - break; + if (PORT.isLageSpaceDM() || PORT.isSmallSpaceDM() || PORT.isPipeDM()) { + switch (m_nowState) { + case kstate_idle: + // 绿色 + ctrlLightNoEx(0, 255, 0, 0); + break; + case kstate_work: + // 黄色 + if (PORT.isPipeDM()) { + ctrlLightNoEx(255, 255, 0, 0); + } else { + ctrlLightNoEx(0, 0, 255, 0); + } + break; + case kstate_warning: + // 红色 + ctrlLightNoEx(255, 0, 0, 0); + break; + default: + break; + } } + + // bool isLageSpaceDM() + // bool isSmallSpaceDM() + // bool isPipeDM() } WarningLightControler::lightState_t WarningLightControler::inferTheCurrentLightingState() {