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