Browse Source

update

master
zhaohe 2 years ago
parent
commit
0778d2cc34
  1. 2
      iflytoplinuxsdk
  2. 2
      src/main_control_service.cpp
  3. 44
      src/service/disinfection_ctl_service.cpp
  4. 4
      src/service/disinfection_ctl_service.hpp
  5. 25
      src/service/sensor_data_scan.cpp
  6. 2
      src/service/sensor_data_scan.hpp

2
iflytoplinuxsdk

@ -1 +1 @@
Subproject commit 7f3769013113fc2d60f0c2b50924d67ca138bc96
Subproject commit e7f29bc0cb917c9e17706e9c7666f9c9f47cefc1

2
src/main_control_service.cpp

@ -282,8 +282,8 @@ void MainControlService::processFrontEndMessage(weak_ptr<WebSocket> webSocket, j
#endif #endif
if (cmdstr == "startReplenishingFluids") { if (cmdstr == "startReplenishingFluids") {
logger->info("startReplenishingFluids");
int16_t stopAt = jsonGet<int>(cmd["stopAt"]); int16_t stopAt = jsonGet<int>(cmd["stopAt"]);
logger->info("startReplenishingFluids {}", stopAt);
m_disinfectionCtrlService->startReplenishingFluids(stopAt); m_disinfectionCtrlService->startReplenishingFluids(stopAt);
return; return;
} }

44
src/service/disinfection_ctl_service.cpp

@ -24,14 +24,14 @@ using namespace std;
#define PRE_HEAT_TIME (5 * 60) #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) { void DisinfectionCtrlService::airCompressor(bool val) {
if (val) { if (val) {
@ -95,6 +95,14 @@ string DisinfectionCtrlService::createDisinfectionID() {
void DisinfectionCtrlService::initialize() { void DisinfectionCtrlService::initialize() {
GET_TO_SERVICE(m_zcanHost); GET_TO_SERVICE(m_zcanHost);
GET_TO_SERVICE(m_sensorDataScan); 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) { void DisinfectionCtrlService::startDisinfection(int loglevel, float roomVol) {
lock_guard<recursive_mutex> lock(lock_); lock_guard<recursive_mutex> lock(lock_);
@ -104,18 +112,19 @@ void DisinfectionCtrlService::startDisinfection(int loglevel, float roomVol) {
} }
m_disinfectionID = createDisinfectionID(); 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]() { m_disinfectionThread.reset(new Thread("m_disinfectionThread", [this, roomVol, loglevel]() {
ThisThread thisThread; ThisThread thisThread;
bool preHeartFinishedFlag = false;
// bool preHeartFinishedFlag = false;
logger->info("startDisinfection {} {} {}", loglevel, roomVol, m_disinfectionID); logger->info("startDisinfection {} {} {}", loglevel, roomVol, m_disinfectionID);
auto starttime = zsteady_clock().now();
m_disinfectionWorkState = 1;
auto starttime = zsteady_clock().now();
heartingPlate_setPower(true); heartingPlate_setPower(true);
m_preheatFlag = 1;
while (!thisThread.getExitFlag()) { while (!thisThread.getExitFlag()) {
thisThread.sleepForMs(1000); thisThread.sleepForMs(1000);
if (m_disinfectionWorkState == 2) { if (m_disinfectionWorkState == 2) {
@ -129,16 +138,16 @@ void DisinfectionCtrlService::startDisinfection(int loglevel, float roomVol) {
break; 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); logger->info("preheat finished {}", m_disinfectionID);
blower_setPower(true); blower_setPower(true);
usleep(1000 * 1000); usleep(1000 * 1000);
airCompressor(true); airCompressor(true);
usleep(1000 * 1000); usleep(1000 * 1000);
sprayLiquidPump_open(); sprayLiquidPump_open();
preHeartFinishedFlag = true;
m_preheatFlag = false;
} }
} }
@ -166,6 +175,7 @@ void DisinfectionCtrlService::stopDisinfection() {
m_disinfectionThread->join(); m_disinfectionThread->join();
m_disinfectionThread = nullptr; m_disinfectionThread = nullptr;
} }
m_disinfectionWorkState = 0;
} }
int32_t DisinfectionCtrlService::getEstimatedRemainingTimeS() { int32_t DisinfectionCtrlService::getEstimatedRemainingTimeS() {
@ -193,8 +203,8 @@ void DisinfectionCtrlService::startReplenishingFluids(int stopatg) {
m_disinfectionThread.reset(new Thread("disinfectionThread", [this, stopatg]() { m_disinfectionThread.reset(new Thread("disinfectionThread", [this, stopatg]() {
ThisThread thisThread; ThisThread thisThread;
replenishingFluidsPump_open(); replenishingFluidsPump_open();
m_replenishingFluidsWorkState = 1;
while (thisThread.getExitFlag()) {
logger->info("startReplenishingFluids {}g", stopatg);
while (!thisThread.getExitFlag()) {
int32_t nowvolume = m_sensorDataScan->getDisinfectantVolume_g(); int32_t nowvolume = m_sensorDataScan->getDisinfectantVolume_g();
logger->info("replenishingFluids {}g", nowvolume); logger->info("replenishingFluids {}g", nowvolume);
if (nowvolume > stopatg) { if (nowvolume > stopatg) {
@ -214,7 +224,7 @@ void DisinfectionCtrlService::startReplenishingFluids(int stopatg) {
})); }));
// //
m_replenishingFluidsWorkState = 1;
logger->info("startReplenishingFluids "); logger->info("startReplenishingFluids ");
} }
// 停止加液 // 停止加液

4
src/service/disinfection_ctl_service.hpp

@ -41,13 +41,15 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
shared_ptr<SensorDataScan> m_sensorDataScan; shared_ptr<SensorDataScan> m_sensorDataScan;
string m_disinfectionID; string m_disinfectionID;
int m_remaintime = 0;
int m_remaintime = 0;
recursive_mutex lock_; recursive_mutex lock_;
int m_disinfectionWorkState = 0; int m_disinfectionWorkState = 0;
int m_replenishingFluidsWorkState = 0; int m_replenishingFluidsWorkState = 0;
int m_drainingWorkState = 0; int m_drainingWorkState = 0;
bool m_preheatFlag = false;
shared_ptr<ZCanHost> m_zcanHost; shared_ptr<ZCanHost> m_zcanHost;
public: public:

25
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_io1() { return m_zcanHost->read_writeio_state_cache(1); }
int SensorDataScan::getAirCompressor_io2() { return m_zcanHost->read_writeio_state_cache(2); } 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_io1() { return m_zcanHost->read_writeio_state_cache(3); }
int SensorDataScan::getAirBlower_io2() { return m_zcanHost->read_writeio_state_cache(4); } 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 // heatingStrip
int SensorDataScan::getHeatingStrip_io1() { return m_zcanHost->read_writeio_state_cache(5); } 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_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::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::getChargingPump_PumpRPM() { return m_zcanHost->pumpctrl_c1004_get_speed_cache(1); }
int SensorDataScan::getDisinfectantVolume_g() { int SensorDataScan::getDisinfectantVolume_g() {
// kpa; // 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) // m(kg)=2.11*P(kPa)
// pa = 1; // TODO 检查传感器异常,则不允许加液 // pa = 1; // TODO 检查传感器异常,则不允许加液
return 2.11 * pa * 1000;
return g;
} }
int SensorDataScan::getWaterImmersionSensor1() { return m_waterImmersionSensor1 ? 1 : 0; } int SensorDataScan::getWaterImmersionSensor1() { return m_waterImmersionSensor1 ? 1 : 0; }

2
src/service/sensor_data_scan.hpp

@ -42,7 +42,7 @@ class SensorDataScan : public enable_shared_from_this<SensorDataScan> {
// //
ZCanHost::hpp272_data_t m_hpp272_data_1; 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];
// //

Loading…
Cancel
Save