9 changed files with 566 additions and 383 deletions
-
2README.md
-
2iflytoplinuxsdk
-
523src/service/disfection_ctl/disinfection_service.cpp
-
36src/service/disfection_ctl/disinfection_service.hpp
-
53src/service/disfection_ctl/disinfection_service_config.hpp
-
245src/service/disfection_ctl/disinfection_service_port.cpp
-
85src/service/disfection_ctl/disinfection_service_port.hpp
-
1src/service/light_ctrl_service.hpp
-
2src/version.hpp
@ -1 +1 @@ |
|||
Subproject commit efa46c4c7dc2c30b0951ddff97de9473e2db00e5 |
|||
Subproject commit bdfc3246092f426a9b86f2a3fbf04dca4854ea3f |
@ -0,0 +1,53 @@ |
|||
//
|
|||
// Created by zwsd
|
|||
//
|
|||
|
|||
#pragma once
|
|||
#include <fstream>
|
|||
#include <iostream>
|
|||
#include <list>
|
|||
#include <map>
|
|||
#include <memory>
|
|||
#include <mutex>
|
|||
#include <set>
|
|||
#include <sstream>
|
|||
#include <string>
|
|||
#include <vector>
|
|||
|
|||
/**
|
|||
* @brief |
|||
* |
|||
* service: DisinfectionService |
|||
* |
|||
* 监听事件: |
|||
* 依赖状态: |
|||
* 依赖服务: |
|||
* 作用: |
|||
* |
|||
*/ |
|||
|
|||
namespace iflytop { |
|||
using namespace std; |
|||
typedef struct { |
|||
public: |
|||
int pre_heat_time_s = 5; // 预热时间
|
|||
int stoped_gs = 0; // 停止H2O2浓度
|
|||
int continued_gs = 0; // 继续H2O2浓度
|
|||
int stoped_satur = 0; // 停止饱和度
|
|||
int continued_satur = 0; // 继续饱和度
|
|||
int stoped_humi = 0; // 停止湿度
|
|||
int continued_humi = 0; // 继续湿度
|
|||
int injection_pump_speed; // 注液泵速度
|
|||
float targetLoglevel = 0; // 目标浓度
|
|||
|
|||
bool enable_bf_dinft_dehumidification = false; // 是否在消毒前开启除湿
|
|||
bool enable_af_dinft_dehumidification = false; // 是否在消毒后开启除湿
|
|||
bool enable_degradation = true; // 是否开启降解
|
|||
|
|||
int bf_dinft_dehumidification_target_val = 20; // 消毒前除湿目标湿度
|
|||
int af_dinft_dehumidification_target_val = 20; // 消毒后除湿目标湿度
|
|||
int degradation_target_val = 0; //
|
|||
|
|||
} DisinfectionServiceConfig_t; |
|||
|
|||
} // namespace iflytop
|
@ -0,0 +1,245 @@ |
|||
#include "disinfection_service_port.hpp"
|
|||
|
|||
#include <cstring>
|
|||
#include <iostream>
|
|||
|
|||
#include "configs/gconfig.hpp"
|
|||
#include "configs/project_setting.hpp"
|
|||
#include "iflytop/components/uart_printer/uart_printer.hpp"
|
|||
#include "iflytoplinuxsdk/src/iflytop/components/ziconv.hpp"
|
|||
#include "service/device_state_service.hpp"
|
|||
using namespace iflytop; |
|||
using namespace std; |
|||
|
|||
namespace iflytop { |
|||
extern bool g_in_test; |
|||
|
|||
} |
|||
|
|||
void DisinfectionServicePort::initialize(DisinfectionServiceConfig_t* cfg) { |
|||
GET_TO_SERVICE(m_deviceIoControlService); |
|||
GET_TO_SERVICE(m_dbService); |
|||
GET_TO_SERVICE(m_disinfectionLogsManager); |
|||
GET_TO_SERVICE(m_disinfectionPrinterService); |
|||
this->cfg = cfg; |
|||
} |
|||
void DisinfectionServicePort::doStateDehumidification_before_disinfection_enterEvent() { |
|||
auto dsio = m_deviceIoControlService; |
|||
|
|||
#if (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
dsio->DBDB__miniPwmBlowerCtrl(DBDB_MINI_PWM_BLOWER_VAL); // 风量
|
|||
usleep(100 * 1000); |
|||
dsio->DBDB__extValveCtrl(IF_DeviceIoContrlService::kExtValveChannel_dehumidificationChannel); |
|||
#endif
|
|||
} |
|||
void DisinfectionServicePort::doStateDehumidification_before_disinfection_exitEvent() { |
|||
auto dsio = m_deviceIoControlService; |
|||
|
|||
#if (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
dsio->DBDB__miniPwmBlowerCtrl(0); |
|||
usleep(100 * 1000); |
|||
dsio->DBDB__extValveCtrl(IF_DeviceIoContrlService::kExtValveChannel_disinfectionChannel); |
|||
#endif
|
|||
} |
|||
void DisinfectionServicePort::doStateIdle_enterEvent() {} |
|||
void DisinfectionServicePort::doStateIdle_exitEvent() {} |
|||
void DisinfectionServicePort::doStatePreheat_enterEvent() { |
|||
#if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
m_deviceIoControlService->heartingPlate_setPower(true); |
|||
m_deviceIoControlService->airBlower_setState(true); |
|||
#elif (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
m_deviceIoControlService->DBDB__miniPwmBlowerCtrl(DBDB_MINI_PWM_BLOWER_VAL); // 风量
|
|||
|
|||
usleep(1000 * 1000); |
|||
|
|||
m_deviceIoControlService->DBDB__heaterCtrl(true); |
|||
usleep(100 * 1000); |
|||
m_deviceIoControlService->DBDB__heaterCtrlSafeValve(true); |
|||
#else
|
|||
#endif
|
|||
} |
|||
void DisinfectionServicePort::doStatePreheat_exitEvent() { |
|||
#if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
m_deviceIoControlService->heartingPlate_setPower(false); |
|||
m_deviceIoControlService->airBlower_setState(false); |
|||
#elif (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
|
|||
m_deviceIoControlService->DBDB__miniPwmBlowerCtrl(0); // 风量
|
|||
usleep(1000 * 1000); |
|||
m_deviceIoControlService->DBDB__heaterCtrl(false); |
|||
usleep(100 * 1000); |
|||
m_deviceIoControlService->DBDB__heaterCtrlSafeValve(false); |
|||
#else
|
|||
#endif
|
|||
} |
|||
void DisinfectionServicePort::doStateDisinfection_enterEvent() { |
|||
#if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
|
|||
#if (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
|
|||
m_deviceIoControlService->airCompressor_channelSelect(1); |
|||
m_deviceIoControlService->airCompressor_setValve1(1); |
|||
m_deviceIoControlService->airCompressor_setValve2(1); |
|||
#endif
|
|||
m_deviceIoControlService->airBlower_setState(true); |
|||
usleep(1000 * 1000); |
|||
m_deviceIoControlService->airCompressor_setState(true); |
|||
usleep(1000 * 1000); |
|||
m_deviceIoControlService->heartingPlate_setPower(true); |
|||
#endif
|
|||
|
|||
#if (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
m_deviceIoControlService->DBDB__sprayAirCompressorPowerCtrl(1); |
|||
usleep(1000 * 1000); |
|||
m_deviceIoControlService->DBDB__heaterCtrl(1); |
|||
usleep(100 * 1000); |
|||
m_deviceIoControlService->DBDB__heaterCtrlSafeValve(1); |
|||
usleep(1000 * 1000); |
|||
m_deviceIoControlService->DBDB__miniPwmBlowerCtrl(DBDB_MINI_PWM_BLOWER_VAL); // 风量
|
|||
usleep(1000 * 1000); |
|||
m_deviceIoControlService->DBDB__extValveCtrl(IF_DeviceIoContrlService::kExtValveChannel_disinfectionChannel); |
|||
#endif
|
|||
|
|||
m_deviceIoControlService->sprayLiquidPump_open(cfg->injection_pump_speed); |
|||
} |
|||
void DisinfectionServicePort::doStateDisinfection_exitEvent() { |
|||
m_deviceIoControlService->sprayLiquidPump_close(); |
|||
|
|||
#if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
|
|||
#if (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
m_deviceIoControlService->airCompressor_channelSelect(1); |
|||
m_deviceIoControlService->airCompressor_setValve1(1); |
|||
m_deviceIoControlService->airCompressor_setValve2(1); |
|||
#endif
|
|||
m_deviceIoControlService->airBlower_setState(false); |
|||
usleep(1000 * 1000); |
|||
m_deviceIoControlService->airCompressor_setState(false); |
|||
usleep(1000 * 1000); |
|||
m_deviceIoControlService->heartingPlate_setPower(false); |
|||
#endif
|
|||
|
|||
#if (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
m_deviceIoControlService->DBDB__sprayAirCompressorPowerCtrl(0); |
|||
usleep(100 * 1000); |
|||
m_deviceIoControlService->DBDB__heaterCtrl(0); |
|||
usleep(100 * 1000); |
|||
m_deviceIoControlService->DBDB__heaterCtrlSafeValve(0); |
|||
usleep(100 * 1000); |
|||
m_deviceIoControlService->DBDB__miniPwmBlowerCtrl(0); |
|||
usleep(100 * 1000); |
|||
#endif
|
|||
} |
|||
|
|||
void DisinfectionServicePort::doStateDisinfection_whenPause() { |
|||
m_deviceIoControlService->sprayLiquidPump_close(); |
|||
usleep(1000 * 1000); |
|||
|
|||
#if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
m_deviceIoControlService->airCompressor_setState(false); |
|||
#elif (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
m_deviceIoControlService->DBDB__sprayAirCompressorPowerCtrl(0); |
|||
#endif
|
|||
} |
|||
void DisinfectionServicePort::doStateDisinfection_whenContinue() { |
|||
m_deviceIoControlService->sprayLiquidPump_open(cfg->injection_pump_speed); |
|||
usleep(1000 * 1000); |
|||
|
|||
#if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
m_deviceIoControlService->airCompressor_setState(true); |
|||
#elif (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
m_deviceIoControlService->DBDB__sprayAirCompressorPowerCtrl(1); |
|||
#endif
|
|||
} |
|||
|
|||
void DisinfectionServicePort::doStateEmpytLiquidFromTheLine_enterEvent() { m_deviceIoControlService->sprayLiquidPump_open(-SPRAYLIQUID_PUMP_MAX_GPM); } |
|||
void DisinfectionServicePort::doStateEmpytLiquidFromTheLine_exitEvent() { m_deviceIoControlService->sprayLiquidPump_close(); } |
|||
|
|||
void DisinfectionServicePort::doStateDehumidification_after_disinfection_enterEvent() { |
|||
auto dsio = m_deviceIoControlService; |
|||
#if (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
dsio->DBDB__miniPwmBlowerCtrl(DBDB_MINI_PWM_BLOWER_VAL); // 风量
|
|||
usleep(100 * 1000); |
|||
dsio->DBDB__extValveCtrl(IF_DeviceIoContrlService::kExtValveChannel_dehumidificationChannel); |
|||
#endif
|
|||
} |
|||
void DisinfectionServicePort::doStateDehumidification_after_disinfection_exitEvent() { |
|||
auto dsio = m_deviceIoControlService; |
|||
|
|||
|
|||
#if (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
dsio->DBDB__miniPwmBlowerCtrl(0); |
|||
usleep(100 * 1000); |
|||
dsio->DBDB__extValveCtrl(IF_DeviceIoContrlService::kExtValveChannel_disinfectionChannel); |
|||
#endif
|
|||
} |
|||
void DisinfectionServicePort::doStateDegradation_enterEvent() { |
|||
auto dsio = m_deviceIoControlService; |
|||
|
|||
|
|||
#if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
m_deviceIoControlService->airBlower_setState(true); |
|||
#elif (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
|
|||
if (dsio->DBDB__extValBoardIsOnline()) dsio->DBDB__extValveCtrl(IF_DeviceIoContrlService::kExtValveChannel_degradationChannel); |
|||
usleep(100 * 1000); |
|||
dsio->DBDB__miniPwmBlowerCtrl(DBDB_MINI_PWM_BLOWER_VAL); // 风量
|
|||
#endif
|
|||
} |
|||
void DisinfectionServicePort::doStateDegradation_exitEvent() { |
|||
auto dsio = m_deviceIoControlService; |
|||
|
|||
#if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
m_deviceIoControlService->airBlower_setState(false); |
|||
#elif (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
if (dsio->DBDB__extValBoardIsOnline()) dsio->DBDB__extValveCtrl(IF_DeviceIoContrlService::kExtValveChannel_disinfectionChannel); |
|||
usleep(100 * 1000); |
|||
dsio->DBDB__miniPwmBlowerCtrl(0); |
|||
|
|||
#endif
|
|||
} |
|||
|
|||
void DisinfectionServicePort::doStateFinished_enterEvent() { |
|||
#if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
m_deviceIoControlService->sprayLiquidPump_close(); |
|||
m_deviceIoControlService->airCompressor_setState(false); |
|||
m_deviceIoControlService->airBlower_setState(false); |
|||
m_deviceIoControlService->heartingPlate_setPower(false); |
|||
m_deviceIoControlService->warningLightCtrl(0, 1, 0, 0); |
|||
#elif (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
#endif
|
|||
} |
|||
|
|||
int DisinfectionServicePort::getDisinfectantVolume() { |
|||
#if (defined PROJECT_TYPE_LARGE_SPACE_DISINFECTION) || (defined PROJECT_TYPE_SMALL_SPACE_DISINFECTION) || (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
|||
return m_deviceIoControlService->getDisinfectantVolume_g(); |
|||
#elif (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
return 0; |
|||
#endif
|
|||
} |
|||
/**
|
|||
* @brief 除湿功能是否支持 |
|||
* |
|||
* @return true |
|||
* @return false |
|||
*/ |
|||
bool DisinfectionServicePort::equipmentCapacity_isSupportDehumidification() { |
|||
#if (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
return true; |
|||
#endif
|
|||
return false; |
|||
} |
|||
/**
|
|||
* @brief 除湿组件是否在线 |
|||
* |
|||
* @return true |
|||
* @return false |
|||
*/ |
|||
bool DisinfectionServicePort::equipmentCapacity_isDehumidificationComponentOnline() { |
|||
auto dsio = m_deviceIoControlService; |
|||
|
|||
#if (defined PROJECT_TYPE_DRAW_BAR_BOX)
|
|||
return dsio->DBDB__extValBoardIsOnline(); |
|||
#endif
|
|||
return false; |
|||
} |
@ -0,0 +1,85 @@ |
|||
//
|
|||
// Created by zwsd
|
|||
//
|
|||
|
|||
#pragma once
|
|||
#include <fstream>
|
|||
#include <iostream>
|
|||
#include <list>
|
|||
#include <map>
|
|||
#include <memory>
|
|||
#include <mutex>
|
|||
#include <set>
|
|||
#include <sstream>
|
|||
#include <string>
|
|||
#include <vector>
|
|||
|
|||
#include "db/db_service.hpp"
|
|||
#include "disinfection_service_config.hpp"
|
|||
#include "disinfection_state.hpp"
|
|||
#include "disinfection_state_machine.hpp"
|
|||
#include "iflytop/components/zcanreceiver/zcanhost.hpp"
|
|||
#include "iflytop/core/core.hpp"
|
|||
#include "service/device_io_control_service.hpp"
|
|||
#include "service/disinfection_logs_manager.hpp"
|
|||
#include "service/disinfection_printer_service.hpp"
|
|||
#include "utils/dvalue_computer.hpp"
|
|||
#include "zservice_container/zservice_container.hpp"
|
|||
/**
|
|||
* @brief |
|||
* |
|||
* service: DisinfectionServicePort |
|||
* |
|||
* 监听事件: |
|||
* 依赖状态: |
|||
* 依赖服务: |
|||
* 作用: |
|||
* |
|||
*/ |
|||
|
|||
namespace iflytop { |
|||
using namespace std; |
|||
using namespace core; |
|||
class DisinfectionServicePort : public enable_shared_from_this<DisinfectionServicePort> { |
|||
ENABLE_LOGGER(DisinfectionServicePort); |
|||
|
|||
private: |
|||
shared_ptr<IF_DeviceIoContrlService> m_deviceIoControlService; |
|||
shared_ptr<DBService> m_dbService; |
|||
shared_ptr<DisinfectionLogsManager> m_disinfectionLogsManager; |
|||
shared_ptr<DisinfectionPrinterService> m_disinfectionPrinterService; |
|||
DisinfectionServiceConfig_t* cfg; |
|||
|
|||
public: |
|||
void initialize(DisinfectionServiceConfig_t* cfg); |
|||
|
|||
void doStateIdle_enterEvent(); |
|||
void doStateIdle_exitEvent(); |
|||
void doStatePreheat_enterEvent(); |
|||
void doStatePreheat_exitEvent(); |
|||
void doStateDehumidification_before_disinfection_enterEvent(); |
|||
void doStateDehumidification_before_disinfection_exitEvent(); |
|||
|
|||
void doStateDisinfection_enterEvent(); |
|||
void doStateDisinfection_exitEvent(); |
|||
void doStateDisinfection_whenPause(); |
|||
void doStateDisinfection_whenContinue(); |
|||
|
|||
void doStateDegradation_enterEvent(); |
|||
void doStateDegradation_exitEvent(); |
|||
void doStateDehumidification_after_disinfection_enterEvent(); |
|||
void doStateDehumidification_after_disinfection_exitEvent(); |
|||
void doStateEmpytLiquidFromTheLine_enterEvent(); |
|||
void doStateEmpytLiquidFromTheLine_exitEvent(); |
|||
|
|||
/**
|
|||
* @brief Finished |
|||
*/ |
|||
void doStateFinished_enterEvent(); |
|||
|
|||
int getDisinfectantVolume(); |
|||
|
|||
bool equipmentCapacity_isSupportDehumidification(); |
|||
bool equipmentCapacity_isDehumidificationComponentOnline(); |
|||
}; |
|||
} // namespace iflytop
|
@ -1,2 +1,2 @@ |
|||
#pragma once
|
|||
#define VERSION "7.0"
|
|||
#define VERSION "8.0"
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue