From 2339f6adba233331b649d390a472368b080efe91 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 7 Aug 2024 17:36:05 +0800 Subject: [PATCH] update --- disinfection_iflytop_can_protocol | 2 +- iflytop_canbus/iflytop_canbus_master.hpp | 67 ++++++++++++-- src/mainwindow.cpp | 126 +++++++++++++++++++------- src/mainwindow.h | 15 ++-- src/mainwindow.ui | 148 ++----------------------------- 5 files changed, 165 insertions(+), 193 deletions(-) diff --git a/disinfection_iflytop_can_protocol b/disinfection_iflytop_can_protocol index 955c39e..a2f3e07 160000 --- a/disinfection_iflytop_can_protocol +++ b/disinfection_iflytop_can_protocol @@ -1 +1 @@ -Subproject commit 955c39e8b8aa1480b0846a1ae26aaa6ba4e38ce0 +Subproject commit a2f3e075a7025f157f41abdf7f3133b1450a6313 diff --git a/iflytop_canbus/iflytop_canbus_master.hpp b/iflytop_canbus/iflytop_canbus_master.hpp index 5159ecd..fb8d342 100644 --- a/iflytop_canbus/iflytop_canbus_master.hpp +++ b/iflytop_canbus/iflytop_canbus_master.hpp @@ -105,7 +105,6 @@ class IflytopCanbusMaster { void pump_stop(int boardid, int subid); void pump_set_ihold_irun_idelay(int boardid, int subid, int ihold, int irun, int idelay); void pump_set_acc(int boardid, int subid, int acc); - void pump_set_subic_reg(int boardid, int subid, int regadd, int val); int pump_get_subic_reg(int boardid, int subid, int regadd); void pump_ping(int32_t boardid); @@ -115,18 +114,13 @@ class IflytopCanbusMaster { // 气密性测试MINI真空泵 void atta_mini_air_compressor_ctrl(int boardid, int onoff) { callcmd1(boardid, kcmd_atta_mini_air_compressor_ctrl, onoff); } - // int32_t pressure_sensor_bus_read_data(int boardid, int subid) { - callcmd1(boardid, kcmd_pressure_sensor_bus_read_data,subid); + callcmd1(boardid, kcmd_pressure_sensor_bus_read_data, subid); return *(int32_t *)m_receipt_frame->params; } void pressure_sensor_bus_set_report_period_ms(int boardid, int periodms) { callcmd1(boardid, kcmd_pressure_sensor_bus_set_report_period_ms, periodms); } - - void triple_warning_light_ctl(int boardid, int r, int g, int b, int warning) { - callcmd4(boardid, kcmd_triple_warning_light_ctl, r, g, b, warning); - } - - int evaporation_bin_water_sensor_read_state(int boardid) { + void triple_warning_light_ctl(int boardid, int r, int g, int b, int warning) { callcmd4(boardid, kcmd_triple_warning_light_ctl, r, g, b, warning); } + int evaporation_bin_water_sensor_read_state(int boardid) { callcmd0(boardid, kcmd_evaporation_bin_water_sensor_read_state); return *(int32_t *)m_receipt_frame->params; } @@ -136,6 +130,61 @@ class IflytopCanbusMaster { return *(int32_t *)m_receipt_frame->params; } + /*********************************************************************************************************************** + * blower * + ***********************************************************************************************************************/ + void blower_ctrl(int boardid, int power) { callcmd1(boardid, kcmd_blower_ctrl, power); } + void blower_ctrl_safe_valve(int boardid, int valve_state) { callcmd1(boardid, kcmd_blower_ctrl_safe_valve, valve_state); } + int blower_read_electric_current(int boardid) { + callcmd0(boardid, kcmd_blower_read_electric_current); + return *(int32_t *)m_receipt_frame->params; + } + + /*********************************************************************************************************************** + * air_compressor * + ***********************************************************************************************************************/ + void air_compressor_ctrl(int boardid, int power) { callcmd1(boardid, kcmd_air_compressor_ctrl, power); } + void air_compressor_ctrl_safe_valve(int boardid, int valve_state) { callcmd1(boardid, kcmd_air_compressor_ctrl_safe_valve, valve_state); } + int air_compressor_read_electric_current(int boardid) { + callcmd0(boardid, kcmd_air_compressor_read_electric_current); + return *(int32_t *)m_receipt_frame->params; + } + + /*********************************************************************************************************************** + * heater * + ***********************************************************************************************************************/ + void heater_ctrl(int boardid, int power) { callcmd1(boardid, kcmd_heater_ctrl, power); } + void heater_ctrl_safe_valve(int boardid, int valve_state) { callcmd1(boardid, kcmd_heater_ctrl_safe_valve, valve_state); } + int heater_read_electric_current(int boardid) { + callcmd0(boardid, kcmd_heater_read_electric_current); + return *(int32_t *)m_receipt_frame->params; + } + int heater_read_temperature_data(int boardid) { + callcmd0(boardid, kcmd_heater_read_temperature_data); + return *(int32_t *)m_receipt_frame->params; + } + + /*********************************************************************************************************************** + * h2o2_sensor * + ***********************************************************************************************************************/ + + void h2o2_sensor_read_calibration_date(int boardid, int32_t *year, int32_t *month, int32_t *day) { // + callcmd0(boardid, kcmd_h2o2_sensor_read_calibration_date); + int32_t *p = (int32_t *)m_receipt_frame->params; + *year = *p; + *month = *(p + 1); + *day = *(p + 2); + } + + int h2o2_sensor_read_sub_ic_errorcode(int boardid) { + callcmd0(boardid, kcmd_h2o2_sensor_read_sub_ic_errorcode); + return *(int32_t *)m_receipt_frame->params; + } + + uint8_t *h2o2_sensor_read_sub_ic_reg(int boardid, int reg, int num) { + callcmd2(boardid, kcmd_h2o2_sensor_read_sub_ic_reg, reg, num); + return m_receipt_frame->params; + } private: void sendframe(int32_t from, int32_t to, uint8_t *frame, size_t len); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 7011c9d..bfae293 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -27,8 +27,6 @@ using namespace iflytop; static MainWindow *m_mainWindow; static QTDataChannel G_QTDataChannel; -static int PublicState_DeviceIDVal = 0; - QT_REQUIRE_CONFIG(groupbox); #define TAG "MainWindow" @@ -233,8 +231,6 @@ MainWindow::~MainWindow() { delete ui; } void MainWindow::processException(const zexception &e) { // ZQUI::ins()->ishow("%s", e.what()); } -int32_t MainWindow::getDeviceId() { return PublicState_DeviceIDVal; } - /*********************************************************************************************************************** * 泵机控制接口 * ***********************************************************************************************************************/ @@ -356,36 +352,98 @@ void MainWindow::constructDrawBarDisinfectionBoxTab() { // } } -void MainWindow::construct_largeSpaceDisinfectionTab() { +void MainWindow::construct_largeSpaceDisinfectionTab(bool smallSpace) { // - int targetId = kFixBoardId_LiquidCtrl; - - ZQVTabPage *tab = new ZQVTabPage(ui->buttonTabWidget, "大空间消毒机"); + ZQVTabPage *tab; + if (!smallSpace) { + tab = new ZQVTabPage(ui->buttonTabWidget, "大空间消毒机"); + } else { + tab = new ZQVTabPage(ui->buttonTabWidget, "小空间消毒机"); + } { - ZQFunctionListBox *minpowerboard_box = new ZQFunctionListBox(tab, "液路板", 4); + ZQFunctionListBox *liquid_board = new ZQFunctionListBox(tab, "液路板", 4); + + constructPumpControlUI(liquid_board, kFixBoardId_LiquidCtrl); // 泵机控制接口 + liquid_board->newFunc("压力传感器总线-读数据", {"subid"}, // + [this](int argn, const char **args) { + int32_t val = IflytopCanbusMaster::ins()->pressure_sensor_bus_read_data(kFixBoardId_LiquidCtrl, atoi(args[0])); + ZQUI::ins()->ishow("val:%d", val); + }); + liquid_board->newFunc("压力传感器总线-设置上报周期", {"periodms"}, // + [this](int argn, const char **args) { IflytopCanbusMaster::ins()->pressure_sensor_bus_set_report_period_ms(kFixBoardId_LiquidCtrl, atoi(args[0])); }); + liquid_board->newFunc("报警灯控制", {"r", "g", "b", "w"}, // + [this](int argn, const char **args) { IflytopCanbusMaster::ins()->triple_warning_light_ctl(kFixBoardId_LiquidCtrl, atoi(args[0]), atoi(args[1]), atoi(args[2]), atoi(args[3])); }); + liquid_board->newFunc("读取-蒸发桶水浸传感器-状态", {}, // + [this](int argn, const char **args) { + int state = IflytopCanbusMaster::ins()->evaporation_bin_water_sensor_read_state(kFixBoardId_LiquidCtrl); + ZQUI::ins()->ishow("state:%d", state); + }); + liquid_board->newFunc("读取-设备底部水浸传感器-状态", {}, // + [this](int argn, const char **args) { + int state = IflytopCanbusMaster::ins()->device_bottom_water_sensor_read_state(kFixBoardId_LiquidCtrl); + ZQUI::ins()->ishow("state:%d", state); + }); + + ZQFunctionListBox *powerboard = new ZQFunctionListBox(tab, "大功率板", 4); + powerboard->newFunc("风机控制", {"power"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->blower_ctrl(kFixBoardId_PowerControl, atoi(args[0])); }); + powerboard->newFunc("风机安全阀控制", {"valve_state"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->blower_ctrl_safe_valve(kFixBoardId_PowerControl, atoi(args[0])); }); + powerboard->newFunc("风机读取电流", {}, [this](int argn, const char **args) { + int val = IflytopCanbusMaster::ins()->blower_read_electric_current(kFixBoardId_PowerControl); + ZQUI::ins()->ishow("val:%d", val); + }); + powerboard->newFunc("空压机控制", {"power"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->air_compressor_ctrl(kFixBoardId_PowerControl, atoi(args[0])); }); + powerboard->newFunc("空压机安全阀控制", {"valve_state"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->air_compressor_ctrl_safe_valve(kFixBoardId_PowerControl, atoi(args[0])); }); + powerboard->newFunc("空压机读取电流", {}, [this](int argn, const char **args) { + int val = IflytopCanbusMaster::ins()->air_compressor_read_electric_current(kFixBoardId_PowerControl); + ZQUI::ins()->ishow("val:%d", val); + }); + powerboard->newFunc("加热器控制", {"power"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->heater_ctrl(kFixBoardId_PowerControl, atoi(args[0])); }); + powerboard->newFunc("加热器安全阀控制", {"valve_state"}, [this](int argn, const char **args) { IflytopCanbusMaster::ins()->heater_ctrl_safe_valve(kFixBoardId_PowerControl, atoi(args[0])); }); + powerboard->newFunc("加热器读取电流", {}, [this](int argn, const char **args) { + int val = IflytopCanbusMaster::ins()->heater_read_electric_current(kFixBoardId_PowerControl); + ZQUI::ins()->ishow("val:%d", val); + }); + powerboard->newFunc("加热器读取温度数据", {}, [this](int argn, const char **args) { + int val = IflytopCanbusMaster::ins()->heater_read_temperature_data(kFixBoardId_PowerControl); + ZQUI::ins()->ishow("val:%d", val); + }); + powerboard->newFunc("H2O2传感器读取校准日期", {}, [this](int argn, const char **args) { + int32_t year, month, day; + IflytopCanbusMaster::ins()->h2o2_sensor_read_calibration_date(kFixBoardId_PowerControl, &year, &month, &day); + ZQUI::ins()->ishow("year:%d,month:%d,day:%d", year, month, day); + }); + powerboard->newFunc("H2O2传感器读取IC错误码", {}, [this](int argn, const char **args) { + int val = IflytopCanbusMaster::ins()->h2o2_sensor_read_sub_ic_errorcode(kFixBoardId_PowerControl); + ZQUI::ins()->ishow("val:%d", val); + }); + powerboard->newFunc("H2O2传感器读取IC寄存器", {"reg", "num"}, [this](int argn, const char **args) { + uint8_t *val = IflytopCanbusMaster::ins()->h2o2_sensor_read_sub_ic_reg(kFixBoardId_PowerControl, atoi(args[0]), atoi(args[1])); + ZQUI::ins()->ishow("val:%s", zhex2str(val, atoi(args[1]) * 2).c_str()); + }); + } +} + +void MainWindow::construct_H2O2ExtSensorBoardTab() { + ZQVTabPage *tab; + tab = new ZQVTabPage(ui->buttonTabWidget, "远端探头"); - constructPumpControlUI(minpowerboard_box, targetId); // 泵机控制接口 - minpowerboard_box->newFunc("压力传感器总线-读数据", {"subid"}, // - [this, targetId](int argn, const char **args) { - int32_t val = IflytopCanbusMaster::ins()->pressure_sensor_bus_read_data(targetId, atoi(args[0])); - ZQUI::ins()->ishow("val:%d", val); - }); - minpowerboard_box->newFunc("压力传感器总线-设置上报周期", {"periodms"}, // - [this, targetId](int argn, const char **args) { IflytopCanbusMaster::ins()->pressure_sensor_bus_set_report_period_ms(targetId, atoi(args[0])); }); - minpowerboard_box->newFunc("报警灯控制", {"r", "g", "b", "w"}, // - [this, targetId](int argn, const char **args) { IflytopCanbusMaster::ins()->triple_warning_light_ctl(targetId, atoi(args[0]), atoi(args[1]), atoi(args[2]), atoi(args[3])); }); - minpowerboard_box->newFunc("读取-蒸发桶水浸传感器-状态", {}, // - [this, targetId](int argn, const char **args) { - int state = IflytopCanbusMaster::ins()->evaporation_bin_water_sensor_read_state(targetId); - ZQUI::ins()->ishow("state:%d", state); - }); - minpowerboard_box->newFunc("读取-设备底部水浸传感器-状态", {}, // - [this, targetId](int argn, const char **args) { - int state = IflytopCanbusMaster::ins()->device_bottom_water_sensor_read_state(targetId); - ZQUI::ins()->ishow("state:%d", state); - }); + { + ZQFunctionListBox *box = new ZQFunctionListBox(tab, "远端探头板", 4); + box->newFunc("H2O2传感器读取校准日期", {"boardid"}, [this](int argn, const char **args) { + int32_t year, month, day; + IflytopCanbusMaster::ins()->h2o2_sensor_read_calibration_date(atoi(args[0]), &year, &month, &day); + ZQUI::ins()->ishow("year:%d,month:%d,day:%d", year, month, day); + }); + box->newFunc("H2O2传感器读取IC错误码", {"boardid"}, [this](int argn, const char **args) { + int val = IflytopCanbusMaster::ins()->h2o2_sensor_read_sub_ic_errorcode(atoi(args[0])); + ZQUI::ins()->ishow("val:%d", val); + }); + box->newFunc("H2O2传感器读取IC寄存器", {"boardid", "reg", "num"}, [this](int argn, const char **args) { + uint8_t *val = IflytopCanbusMaster::ins()->h2o2_sensor_read_sub_ic_reg(atoi(args[0]), atoi(args[1]), atoi(args[2])); + ZQUI::ins()->ishow("val:%s", zhex2str(val, atoi(args[2]) * 2).c_str()); + }); } } @@ -393,7 +451,9 @@ void MainWindow::constructAppUI() { // constructCommonOperationTab(); constructDrawBarDisinfectionBoxTab(); - construct_largeSpaceDisinfectionTab(); + construct_largeSpaceDisinfectionTab(false); // 大空间 + construct_largeSpaceDisinfectionTab(true); // 小空间 + construct_H2O2ExtSensorBoardTab(); } void MainWindow::processReportPacket(packet_type_t type, uint8_t from, uint8_t to, uint8_t *hex, uint32_t hexlen) { @@ -425,8 +485,8 @@ void MainWindow::processReportPacket(packet_type_t type, uint8_t from, uint8_t t else if (frame->function_id == kreport_h2o2_sensor_data) { report_h2o2_data_t *ack = (report_h2o2_data_t *)frame->params; QString info; - info.append(fmt("[H2O2 ][FROM:%03d] suid:%d,err:%d h2o2:%d (x10ppm),humid:%d (x10),temp:%d (x10),saturation:%d (x10)", // - from, ack->subid, ack->sensor_error, ack->h2o2, ack->humid, ack->temp, ack->saturation)); + info.append(fmt("[H2O2 ][FROM:%03d] err:%d h2o2:%d (x10ppm),hum:%d (x10),temp:%d (x10),sat:%d (x10)", // + from, ack->sensor_error, ack->h2o2, ack->humid, ack->temp, ack->saturation)); ZQUI::ins()->rshow(info.toStdString().c_str()); } // @@ -441,8 +501,6 @@ void MainWindow::processReportPacket(packet_type_t type, uint8_t from, uint8_t t } } -void MainWindow::on_PublicState_ConfirmKey_clicked() { PublicState_DeviceIDVal = ui->PublicState_DeviceID->toPlainText().toInt(); } - void MainWindow::on_clearPreview_clicked() { // ZQUI()-> } diff --git a/src/mainwindow.h b/src/mainwindow.h index 48c93fd..3d844a0 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -91,9 +91,6 @@ class MainWindow : public QMainWindow { private slots: void doinui_slot(QFunction); - - void on_PublicState_ConfirmKey_clicked(); - void on_clearPreview_clicked(); signals: @@ -124,13 +121,13 @@ class MainWindow : public QMainWindow { void endAllocNewBox(QGroupBox *box); void endAllocNewTab(QWidget *tab); - int32_t getDeviceId(); - private: - void constructPumpControlUI(iflytop::ZQFunctionListBox *box, int targetDeviceId); // 泵机UI - void constructCommonOperationTab(); // 通用操作 - void constructDrawBarDisinfectionBoxTab(); // 消毒拉杆箱UI - void construct_largeSpaceDisinfectionTab(); // 构建大空间消毒UI + void constructPumpControlUI(iflytop::ZQFunctionListBox *box, int targetDeviceId); // 泵机UI + void constructCommonOperationTab(); // 通用操作 + void constructDrawBarDisinfectionBoxTab(); // 消毒拉杆箱UI + void construct_largeSpaceDisinfectionTab(bool smallSpace); // 构建大空间消毒UI + void construct_H2O2ExtSensorBoardTab(); // 构建 远端探头板UI + void processReportPacket(packet_type_t type, uint8_t from, uint8_t to, uint8_t *hex, uint32_t hexlen); // 上报报文处理 }; #endif // MAINWINDOW_H diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 6ec0632..47b45ed 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -598,7 +598,7 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - 200 + 250 0 @@ -659,143 +659,6 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - false - - - 通用参数 - - - - - - - 1 - 0 - - - - - 0 - 25 - - - - - 16777215 - 25 - - - - 设备ID - - - - - - - - 1 - 0 - - - - - 0 - 25 - - - - - 16777215 - 25 - - - - 2 - - - - - - - 提交 - - - - - - - - 1 - 0 - - - - - 0 - 25 - - - - - 16777215 - 25 - - - - 设备ID - - - - - - - - 1 - 0 - - - - - 0 - 25 - - - - - 16777215 - 25 - - - - 2 - - - - - - - @@ -916,7 +779,12 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">------------板子ID------------------</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Consolas','Courier New','monospace'; font-size:14px; color:#ff0000;">主机                    1</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Consolas','Courier New','monospace'; font-size:14px; color:#ff0000;">液路板                    2</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Consolas','Courier New','monospace'; font-size:14px; color:#ff0000;">电源板                    3</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Consolas','Courier New','monospace'; color:#ff0000;">拉杆箱箱消毒机</span><span style=" font-family:'Consolas','Courier New','monospace'; font-size:14px; color:#ff0000;">电源控制Mini板 4</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Consolas','Courier New','monospace'; font-size:14px; color:#ff0000;">外部球阀控制板             5</span></p></body></html> @@ -988,7 +856,7 @@ p, li { white-space: pre-wrap; } - 600 + 700 0