diff --git a/iflytoplinuxsdk b/iflytoplinuxsdk index d3f953a..7c49f67 160000 --- a/iflytoplinuxsdk +++ b/iflytoplinuxsdk @@ -1 +1 @@ -Subproject commit d3f953abc7412dacab027d4af3bef0958724e879 +Subproject commit 7c49f67b539e76c7b6417bc121a242ea43621a65 diff --git a/src/configs/project_setting.hpp b/src/configs/project_setting.hpp index b3d32bd..9ac76cf 100644 --- a/src/configs/project_setting.hpp +++ b/src/configs/project_setting.hpp @@ -11,6 +11,7 @@ // #define PROJECT_TYPE_LARGE_SPACE_DISINFECTION 1 // 大空间 #define PROJECT_TYPE_SMALL_SPACE_DISINFECTION 1 // 小空间 +// #define PROJECT_TYPE_PIPE_DISINFECTION 1 // 管道消毒机 #ifdef PROJECT_TYPE_SMALL_SPACE_DISINFECTION #define DISINFECTANT_BUCKET_CAPACITY 2300 @@ -24,5 +25,11 @@ #define MAX_H2O2_SENSOR_NUM (3) #endif -#define MAX_DISINFECTIONLOGGER_FILE_NUM 5 // 最大日志文件数量 +#ifdef PROJECT_TYPE_PIPE_DISINFECTION +#define DISINFECTANT_BUCKET_CAPACITY 2300 +#define PROJECT_NAME "pipe_disinfection" +#define MAX_H2O2_SENSOR_NUM (1) +#endif + +#define MAX_DISINFECTIONLOGGER_FILE_NUM 5 // 最大日志文件数量 #define USER_BEHAVIOR_RECORD_DB_MAX_RECORDS 3000 diff --git a/src/service/device_io_control_service.cpp b/src/service/device_io_control_service.cpp index 0a131d8..45091cc 100644 --- a/src/service/device_io_control_service.cpp +++ b/src/service/device_io_control_service.cpp @@ -415,3 +415,67 @@ void DeviceIoControlService::H2O2Sensor_updateSensorData(int32_t sensorid, repor sensor_data->sensorId = data->sensorid; sensor_data->updatetime = zsys_get_ticket(); } +#ifdef PROJECT_TYPE_PIPE_DISINFECTION + +void DeviceIoControlService::AirInletProportionalValve_setState(int32_t val) { + m_AirInletProportionalValve_state = val; + m_zcanHost->call(kcmd_proportional_set_valve, 1, val); +} +void DeviceIoControlService::AirOutletProportionalValve_setState(int32_t val) { + m_AirOutletProportionalValve_state = val; + m_zcanHost->call(kcmd_proportional_set_valve, 2, val); +} +int32_t DeviceIoControlService::AirInletProportionalValve_getState() { return m_AirInletProportionalValve_state; } +int32_t DeviceIoControlService::AirOutletProportionalValve_getState() { return m_AirOutletProportionalValve_state; } + +int32_t DeviceIoControlService::AirProportionalValve_setState(int32_t inlet, int32_t outlet) { + m_zcanHost->call(kcmd_proportional_set_valve, 1, inlet); + m_zcanHost->call(kcmd_proportional_set_valve, 2, outlet); + m_AirInletProportionalValve_state = inlet; + m_AirOutletProportionalValve_state = outlet; + return 0; +} +int32_t DeviceIoControlService::AirProportionalValve_getState(int32_t* inlet, int32_t* outlet) { + *inlet = m_AirInletProportionalValve_state; + *outlet = m_AirOutletProportionalValve_state; + return 0; +} + +int32_t DeviceIoControlService::AirProportionalValve_isBusy(int32_t* isbusy) { + *isbusy = 0; + return m_zcanHost->call(kcmd_proportional_read_state, isbusy); +} +#endif + +#ifdef PROJECT_TYPE_PIPE_DISINFECTION +int DeviceIoControlService::airCompressor_channelSelect(int32_t val) { + m_airCompressor_channelIndex = val; + if (m_airCompressor_channelIndex == 1) { + m_zcanHost->call(kcmd_air_compressor_ch_select, 1); + } else if (m_airCompressor_channelIndex == 2) { + m_zcanHost->call(kcmd_air_compressor_ch_select, 2); + } else { + return err::kfail; + } + return 0; +} + +int DeviceIoControlService::airCompressor_setValve1(int32_t val) { + m_airCompressor_valve1State = val; + return m_zcanHost->call(kcmd_air_compressor_valve1_set, val); +} +int DeviceIoControlService::airCompressor_setValve2(int32_t val) { + m_airCompressor_valve2State = val; + return m_zcanHost->call(kcmd_air_compressor_valve2_set, val); +} +int DeviceIoControlService::airCompressor_getValve1() { return m_airCompressor_valve1State; } +int DeviceIoControlService::airCompressor_getValve2() { return m_airCompressor_valve2State; } +int DeviceIoControlService::airCompressor_getChannelIndex() { return m_airCompressor_channelIndex; } +float DeviceIoControlService::airCompressor_getPressure() { return m_pressure_sensor_data[2].value / 10.0; } +float DeviceIoControlService::airCompressor_getPressureDirect() { + int32_t ack = 0; + m_zcanHost->call(kcmd_air_compressor_read_pressure, &ack); + return ack / 10.0; +} + +#endif \ No newline at end of file diff --git a/src/service/device_io_control_service.hpp b/src/service/device_io_control_service.hpp index a0a68e1..e8d877e 100644 --- a/src/service/device_io_control_service.hpp +++ b/src/service/device_io_control_service.hpp @@ -83,6 +83,17 @@ class DeviceIoControlService : public IF_DeviceIoContrlService { h2o2_sensor_data_t m_h2o2_sensor_data[MAX_H2O2_SENSOR_NUM] = {0}; std::mutex m_h2o2_sensor_data_lock_; +#ifdef PROJECT_TYPE_PIPE_DISINFECTION + /******************************************************************************* + * 比例法阀门状态 * + *******************************************************************************/ + int32_t m_AirInletProportionalValve_state = 0; + int32_t m_AirOutletProportionalValve_state = 0; + + int32_t m_airCompressor_valve1State = 0; + int32_t m_airCompressor_valve2State = 0; + int32_t m_airCompressor_channelIndex = 0; +#endif public: DeviceIoControlService(); @@ -127,6 +138,17 @@ class DeviceIoControlService : public IF_DeviceIoContrlService { virtual int airCompressor_getstate() override; virtual int airCompressor_getcurrentValue() override; +#ifdef PROJECT_TYPE_PIPE_DISINFECTION + virtual int airCompressor_channelSelect(int32_t val); + virtual int airCompressor_getChannelIndex(); + virtual int airCompressor_setValve1(int32_t val); // 0关闭通道 1打开通道 + virtual int airCompressor_setValve2(int32_t val); // 0关闭通道 1打开通道 + virtual int airCompressor_getValve1(); + virtual int airCompressor_getValve2(); + virtual float airCompressor_getPressure(); + virtual float airCompressor_getPressureDirect(); +#endif + /******************************************************************************* * 泵控制 * *******************************************************************************/ @@ -162,6 +184,21 @@ class DeviceIoControlService : public IF_DeviceIoContrlService { virtual void warningLightCtrl(int r, int g, int b, int w) override; +#ifdef PROJECT_TYPE_PIPE_DISINFECTION + /******************************************************************************* + * 比例阀控制 * + *******************************************************************************/ + virtual void AirInletProportionalValve_setState(int32_t val); + virtual void AirOutletProportionalValve_setState(int32_t val); + + virtual int32_t AirInletProportionalValve_getState(); + virtual int32_t AirOutletProportionalValve_getState(); + + virtual int32_t AirProportionalValve_setState(int32_t inlet, int32_t outlet); + virtual int32_t AirProportionalValve_getState(int32_t* inlet, int32_t* outlet); + virtual int32_t AirProportionalValve_isBusy(int32_t* isbusy); +#endif + private: void updateDisinfectantVolumeSample(float kpa); void processReportPacket(uint8_t* packet, size_t len); diff --git a/src/utils/volume_convertor.hpp b/src/utils/volume_convertor.hpp index 5fc0698..67f7786 100644 --- a/src/utils/volume_convertor.hpp +++ b/src/utils/volume_convertor.hpp @@ -74,6 +74,26 @@ class VolumeConvertor { #endif +#ifdef PROJECT_TYPE_PIPE_DISINFECTION + float container_h4 = 1.83; + float container_ru4 = 0.64; + float container_rb4 = 0.64; + + float container_h3 = 0.17; + float container_ru3 = 0.64; + float container_rb3 = 0.47; + + float container_h2 = 0.0737; + float container_ru2 = 0.47; + float container_rb2 = 0.47; + + float container_h1 = 0.0376; + float container_ru1 = 0.47; + float container_rb1 = 0.04; + + float density = 1000; // kg/m^3 +#endif + public: float pressurePa2VolumeG(float _pa);