Browse Source

update

storage-in-realtime
zhaohe 12 months ago
parent
commit
2b63964b0f
  1. 5
      appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp
  2. 41
      appsrc/appsetting/project_port/project_port.cpp
  3. 1
      appsrc/appsetting/project_port/project_port.hpp
  4. 3
      appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp
  5. 3
      appsrc/service/hardware/base/h2o2_sensor_data_mgr.cpp
  6. 302
      appsrc/service/hardware/device_ctrl_service.cpp
  7. 5
      appsrc/service/hardware/device_ctrl_service.hpp
  8. 13
      appsrc/service/hardware/disinfectant_weight_update_service.cpp
  9. 57
      appsrc/service/hardware/warning_light_controler.cpp

5
appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp

@ -198,7 +198,7 @@ shared_ptr<Receipt> 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<Receipt> 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<Receipt> ZSCanProtocolCom::callcmd0(int32_t to, int32_t cmdid, int32_t overtime) { return callcmd(to, cmdid, nullptr, 0, overtime); }

41
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;

1
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:

3
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;
}

3
appsrc/service/hardware/base/h2o2_sensor_data_mgr.cpp

@ -11,7 +11,7 @@ int H2O2SensorDataMgr::getMaxSaturation() { return m_maxSaturation; }
shared_ptr<H2O2SensorDataCache> H2O2SensorDataMgr::getCacheData(uint8_t sensorId) { return getSensorDataCache(sensorId); }
shared_ptr<H2O2SensorDataSnapshot> H2O2SensorDataMgr::takeSnapshot() {
lock_guard<recursive_mutex> lock(m_lock);
lock_guard<recursive_mutex> lock(m_lock);
shared_ptr<H2O2SensorDataSnapshot> snapshot = make_shared<H2O2SensorDataSnapshot>();
ZASSERT(PORT.getExtH2O2SensorNum() <= 2);
@ -66,6 +66,7 @@ shared_ptr<H2O2SensorDataCache> H2O2SensorDataMgr::getSensorDataCache(uint8_t se
void H2O2SensorDataMgr::updateH2o2SensorData(uint8_t sensorId, report_h2o2_data_t* h2o2data) {
lock_guard<recursive_mutex> 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();

302
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
void DeviceIoControlService::fn_test(shared_ptr<MsgProcessContext> 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);
}

5
appsrc/service/hardware/device_ctrl_service.hpp

@ -96,7 +96,7 @@ class DeviceIoControlService : public enable_shared_from_this<DeviceIoControlSer
bool ExtChSelector_isOnline();
// 消毒液体积传感器
int DisinfectantVolume_readVal(); // g
// int DisinfectantVolume_readVal(); // g
// 蒸发仓水浸
bool WaterSensor_readEvaporationBin();
// 设备底部水浸
@ -111,5 +111,8 @@ class DeviceIoControlService : public enable_shared_from_this<DeviceIoControlSer
int AddLiquidPumpPostPS_readPa(); // pa
shared_ptr<H2O2SensorDataMgr> getH2O2SensorMgr() { return m_h2o2SensorDataMgr; }
private:
void fn_test(shared_ptr<MsgProcessContext> cxt) ;
};
} // namespace iflytop

13
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());
}

57
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() {

Loading…
Cancel
Save