Browse Source

支持消毒拉杆箱液路板

master
zhaohe 1 year ago
parent
commit
7a9889a39a
  1. 3
      .vscode/settings.json
  2. 2
      disinfection_iflytop_can_protocol
  3. 16
      iflytop_canbus/iflytop_canbus_master.cpp
  4. 16
      iflytop_canbus/iflytop_canbus_master.hpp
  5. 2
      libzqt/zui/zqui.cpp
  6. 2
      libzqt/zui/zqui.hpp
  7. 188
      src/mainwindow.cpp
  8. 17
      src/mainwindow.h

3
.vscode/settings.json

@ -97,7 +97,8 @@
"qtextbrowser": "cpp",
"qchartview": "cpp",
"qgroupbox": "cpp",
"qmenubar": "cpp"
"qmenubar": "cpp",
"qwidget": "cpp"
},
"files.autoGuessEncoding": false,
}

2
disinfection_iflytop_can_protocol

@ -1 +1 @@
Subproject commit c01f84e2ad44f02f615ceec55762e9eda995c0a1
Subproject commit 702ffbcb82fa62e2cef6621ac49ede8f913273c8

16
iflytop_canbus/iflytop_canbus_master.cpp

@ -253,3 +253,19 @@ int IflytopCanbusMaster::pump_get_subic_reg(int boardid, int subid, int regadd)
callcmd2(boardid, kcmd_pump_get_subic_reg, subid, regadd, DEFUALT_OVERTIME);
return *(int32_t *)m_receipt_frame->params;
}
void IflytopCanbusMaster::pump_ping(int32_t boardid) { callcmd1(boardid, kcmd_pump_ping, boardid, DEFUALT_OVERTIME); }
void IflytopCanbusMaster::pingAllBoard() {
m_txindex++;
if (m_txindex < 200) m_txindex = 200;
zcanbus_packet_t *frame = (zcanbus_packet_t *)m_txbuf;
frame->ptype = kcmd;
frame->index = m_txindex;
frame->function_id = kcmd_heart_ping;
int32_t val = 0xabcd;
memcpy(frame->params, &val, 4);
sendframe(1, 0xff, (uint8_t *)frame, 4 + sizeof(zcanbus_packet_t));
return;
}

16
iflytop_canbus/iflytop_canbus_master.hpp

@ -15,6 +15,7 @@
#include "disinfection_iflytop_can_protocol/iflytop_canbus_protocol.hpp"
#include "idatachannel.hpp"
#include "waveshare_can.hpp"
namespace iflytop {
using namespace std;
@ -97,6 +98,8 @@ class IflytopCanbusMaster {
ack_read_board_info_data_t readboardinfo(int to);
ack_sysinfo_t readsysinfo(int to);
ask_taskinfo_t readtaskinfo(int to, int32_t taskoff);
void clear_reset_flag(int32_t to) { callcmd0(to, kcmd_clear_reset_flag); }
void pingAllBoard();
void pump_rotate(int boardid, int subid, int rpm);
void pump_stop(int boardid, int subid);
@ -105,6 +108,19 @@ class IflytopCanbusMaster {
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);
// 喷液MINI真空泵
void sl_mini_ac_ctrl(int boardid, int onoff) { callcmd1(boardid, kcmd_sl_mini_ac_ctrl, onoff); }
// 气密性测试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) {
callcmd0(boardid, kcmd_pressure_sensor_bus_read_data);
return *(int32_t *)m_rxReceiptContext.receipt;
}
void pressure_sensor_bus_set_report_period_ms(int boardid, int periodms) { callcmd1(boardid, kcmd_pressure_sensor_bus_set_report_period_ms, periodms); }
private:
void sendframe(int32_t from, int32_t to, uint8_t *frame, size_t len);

2
libzqt/zui/zqui.cpp

@ -25,7 +25,7 @@ void ZQUI::instructionPreviewClear() {
if (m_instructionPreviewClear) m_instructionPreviewClear();
}
void ZQUI::reportPreviewShow(const char *fmt, ...) {
void ZQUI::rshow(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
char buf[1024] = {0};

2
libzqt/zui/zqui.hpp

@ -54,7 +54,7 @@ class ZQUI : public QObject {
void doinui(std::function<void()> dowhat);
void ishow(const char *fmt, ...);
void reportPreviewShow(const char *fmt, ...);
void rshow(const char *fmt, ...);
void blockDataUploadPreviewShow(const char *fmt, ...);
void rawDataPreviewShow(const char *fmt, ...);
void instructionPreviewClear();

188
src/mainwindow.cpp

@ -226,6 +226,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
} else if (type == kreport) {
ZQUI::ins()->rawDataPreviewShow("[REPORT ] [%d->%d],%s", from, to, zhex2str(hex, hexlen).c_str()); //
}
processReportPacket(type, from, to, hex, hexlen);
});
}
MainWindow::~MainWindow() { delete ui; }
@ -234,79 +235,146 @@ void MainWindow::processException(const zexception &e) { //
ZQUI::ins()->ishow("%s", e.what());
}
int32_t MainWindow::getDeviceId() { return PublicState_DeviceIDVal; }
void MainWindow::constructAppUI() {
void MainWindow::constructPumpControlUI(ZQFunctionListBox *box, int targetDeviceId) {
// ZQFunctionListBox *box = new ZQFunctionListBox(tab, "泵机指令", 4);
box->newFunc("pump_rotate", {"subid", "rpm"}, [this, targetDeviceId](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pump_rotate(targetDeviceId, atoi(args[0]), atoi(args[1]));
});
box->newFunc("pump_stop", {"subid"}, [this, targetDeviceId](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pump_stop(targetDeviceId, atoi(args[0]));
});
box->newFunc("pump_set_ihold_irun_idelay", {"subid", "ihold", "irun", "idelay"}, [this, targetDeviceId](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pump_set_ihold_irun_idelay(targetDeviceId, atoi(args[0]), atoi(args[1]), atoi(args[2]), atoi(args[3]));
});
box->newFunc("pump_set_acc", {"subid", "acc"}, [this, targetDeviceId](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pump_set_acc(targetDeviceId, atoi(args[0]), atoi(args[1]));
});
box->newFunc("pump_set_subic_reg", {"subid", "regadd", "val"}, [this, targetDeviceId](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pump_set_subic_reg(targetDeviceId, atoi(args[0]), atoi(args[1]), atoi(args[2]));
});
box->newFunc("pump_get_subic_reg", {"subid", "regadd"}, [this, targetDeviceId](int argn, const char **args) { //
int val = IflytopCanbusMaster::ins()->pump_get_subic_reg(targetDeviceId, atoi(args[0]), atoi(args[1]));
ZQUI::ins()->ishow("val:%x", val);
});
box->newFunc("pump_get_subic_reg", {"subid", "regadd"}, [this, targetDeviceId](int argn, const char **args) { //
int val = IflytopCanbusMaster::ins()->pump_get_subic_reg(targetDeviceId, atoi(args[0]), atoi(args[1]));
ZQUI::ins()->ishow("val:%x", val);
});
}
void MainWindow::constructCommonOperationTab() {
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
ZQVTabPage *tab = new ZQVTabPage(ui->buttonTabWidget, "通用接口");
// static
{
ZQVTabPage *tab = new ZQVTabPage(ui->buttonTabWidget, "基础方法");
// static
// ack_read_board_info_data_t readboardinfo(int to);
// ack_sysinfo_t readsysinfo(int to);
// ask_taskinfo_t readtaskinfo(int to,int32_t taskoff);
{
ZQFunctionListBox *box = new ZQFunctionListBox(tab, "通用方法", 4);
box->newFunc("读板卡信息", {}, [this](int argn, const char **args) { //
ack_read_board_info_data_t ack = IflytopCanbusMaster::ins()->readboardinfo(getDeviceId());
ZQUI::ins()->ishow("boardType :%s(%d)", BoardTypeToString(ack.boardType), ack.boardType);
ZQUI::ins()->ishow("projectId :%s(%d)", ProjectIDToString(ack.projectId), ack.projectId);
ZQUI::ins()->ishow("protcol_version :%d", ack.protcol_version);
ZQUI::ins()->ishow("software_version :%d", ack.software_version);
ZQUI::ins()->ishow("hardware_version :%d", ack.hardware_version);
});
box->newFunc("读内存信息", {}, [this](int argn, const char **args) { //
ack_sysinfo_t ack = IflytopCanbusMaster::ins()->readsysinfo(getDeviceId());
ask_taskinfo_t task[20];
for (int i = 0; i < ack.taskNum; i++) {
task[i] = IflytopCanbusMaster::ins()->readtaskinfo(getDeviceId(), i);
}
ZQUI::ins()->ishow("=========================== sys info ===========================");
ZQUI::ins()->ishow("total_heap_size :%d", ack.total_heap_size);
ZQUI::ins()->ishow("free_heap_size :%d", ack.free_heap_size);
ZQUI::ins()->ishow("sysHasRun :%d", ack.sysHasRun);
ZQUI::ins()->ishow("=");
ZQUI::ins()->ishow("=========================== task info ===========================");
ZQUI::ins()->ishow("taskoff name state stackRemainSize priority");
for (int i = 0; i < ack.taskNum; i++) {
ZQUI::ins()->ishow("%d %10s %c %d %d", i, task[i].taskName, task[i].state, task[i].stackRemindSize, task[i].priority);
}
ZQUI::ins()->ishow("=");
});
}
ZQFunctionListBox *box = new ZQFunctionListBox(tab, "通用方法", 4);
box->newFunc("读板卡信息", {"id"}, [this](int argn, const char **args) { //
ack_read_board_info_data_t ack = IflytopCanbusMaster::ins()->readboardinfo(atoi(args[0]));
ZQUI::ins()->ishow("boardType :%s(%d)", BoardTypeToString(ack.boardType), ack.boardType);
ZQUI::ins()->ishow("projectId :%s(%d)", ProjectIDToString(ack.projectId), ack.projectId);
ZQUI::ins()->ishow("protcol_version :%d", ack.protcol_version);
ZQUI::ins()->ishow("software_version :%d", ack.software_version);
ZQUI::ins()->ishow("hardware_version :%d", ack.hardware_version);
});
box->newFunc("读内存信息", {"id"}, [this](int argn, const char **args) { //
ack_sysinfo_t ack = IflytopCanbusMaster::ins()->readsysinfo(atoi(args[0]));
ask_taskinfo_t task[20];
for (int i = 0; i < ack.taskNum; i++) {
task[i] = IflytopCanbusMaster::ins()->readtaskinfo(atoi(args[0]), i);
}
ZQUI::ins()->ishow("=========================== sys info ===========================");
ZQUI::ins()->ishow("total_heap_size :%d", ack.total_heap_size);
ZQUI::ins()->ishow("free_heap_size :%d", ack.free_heap_size);
ZQUI::ins()->ishow("sysHasRun :%d", ack.sysHasRun);
ZQUI::ins()->ishow("=");
ZQUI::ins()->ishow("=========================== task info ===========================");
ZQUI::ins()->ishow("taskoff name state stackRemainSize priority");
for (int i = 0; i < ack.taskNum; i++) {
ZQUI::ins()->ishow("%d %10s %c %d %d", i, task[i].taskName, task[i].state, task[i].stackRemindSize, task[i].priority);
}
ZQUI::ins()->ishow("=");
});
{
ZQFunctionListBox *box = new ZQFunctionListBox(tab, "泵机指令", 4);
box->newFunc("PingAllBoard", {}, [this](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pingAllBoard();
});
box->newFunc("pump_rotate", {"subid", "rpm"}, [this](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pump_rotate(getDeviceId(), atoi(args[0]), atoi(args[1]));
});
box->newFunc("clear_reset_flag", {"id"}, [this](int argn, const char **args) { //
IflytopCanbusMaster::ins()->clear_reset_flag(atoi(args[0]));
});
}
}
box->newFunc("pump_stop", {"subid"}, [this](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pump_stop(getDeviceId(), atoi(args[0]));
});
void MainWindow::constructDrawBarDisinfectionBoxTab() { //
box->newFunc("pump_set_ihold_irun_idelay", {"subid", "ihold", "irun", "idelay"}, [this](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pump_set_ihold_irun_idelay(getDeviceId(), atoi(args[0]), atoi(args[1]), atoi(args[2]), atoi(args[3]));
});
ZQVTabPage *tab = new ZQVTabPage(ui->buttonTabWidget, "消毒拉杆箱");
box->newFunc("pump_set_acc", {"subid", "acc"}, [this](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pump_set_acc(getDeviceId(), atoi(args[0]), atoi(args[1]));
});
{
ZQFunctionListBox *box = new ZQFunctionListBox(tab, "MINI功率控制板", 4);
constructPumpControlUI(box, kFixBoardId_LiquidCtrl);
// 喷液MINI真空泵
box->newFunc("喷液MINI真空泵控制", {"onoff"}, [this](int argn, const char **args) { //
IflytopCanbusMaster::ins()->sl_mini_ac_ctrl(kFixBoardId_LiquidCtrl, atoi(args[0]));
});
// 气密性测试MINI真空泵
box->newFunc("气密性测试MINI真空泵", {"onoff"}, [this](int argn, const char **args) { //
IflytopCanbusMaster::ins()->atta_mini_air_compressor_ctrl(kFixBoardId_LiquidCtrl, atoi(args[0]));
});
// 压力传感器总线
box->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);
});
box->newFunc("压力传感器总线-设置上报周期", {"periodms"}, [this](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pressure_sensor_bus_set_report_period_ms( //
kFixBoardId_LiquidCtrl, atoi(args[0]));
});
}
}
box->newFunc("pump_set_subic_reg", {"subid", "regadd", "val"}, [this](int argn, const char **args) { //
IflytopCanbusMaster::ins()->pump_set_subic_reg(getDeviceId(), atoi(args[0]), atoi(args[1]), atoi(args[2]));
});
void MainWindow::constructAppUI() {
//
constructCommonOperationTab();
constructDrawBarDisinfectionBoxTab();
}
box->newFunc("pump_get_subic_reg", {"subid", "regadd"}, [this](int argn, const char **args) { //
int val = IflytopCanbusMaster::ins()->pump_get_subic_reg(getDeviceId(), atoi(args[0]), atoi(args[1]));
ZQUI::ins()->ishow("val:%d", val);
});
void MainWindow::processReportPacket(packet_type_t type, uint8_t from, uint8_t to, uint8_t *hex, uint32_t hexlen) {
if (type != kreport) {
return;
}
zcanbus_packet_t *frame = (zcanbus_packet_t *)hex;
if (frame->function_id == kreport_heatpacket_pong) {
report_heatpacket_data_t *ack = (report_heatpacket_data_t *)frame->params;
ZQUI::ins()->rshow("[Heat ][FROM:%03d] HeatIndex:%x ToardType:%s flag:%x", //
from, ack->heartIndex, BoardTypeToString(ack->boardType), ack->flag);
} else if (frame->function_id == kreport_exception_error) {
report_exeception_data_t *ack = (report_exeception_data_t *)frame->params;
ZQUI::ins()->rshow("[Exception][FROM:%03d] subid:%x ecode:%s", //
from, ack->subid, ErrorCodeToString(ack->ecode));
} else if (frame->function_id == kreport_pressure_data) {
report_pressure_data_t *ack = (report_pressure_data_t *)frame->params;
QString info;
info.append(fmt("[Pressure][FROM:%03d](%d)", from, ack->sensorDataNum));
for (int i = 0; i < ack->sensorDataNum; i++) {
info.append(fmt(" %d:%d,", ack->data[i].subid, ack->data[i].pressureVal));
}
ZQUI::ins()->rshow(info.toStdString().c_str());
}
}

17
src/mainwindow.h

@ -35,10 +35,14 @@
#include <string>
#include <vector>
#include "iflytop_canbus/iflytop_canbus_master.hpp"
#include "logger.hpp"
#include "qfunction.hpp"
#include "zexception.hpp"
#include "zqthread.hpp"
#include "zui/z_function_list_box.hpp"
#include "zui/zq_vtab_page.hpp"
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
@ -74,7 +78,7 @@ class MainWindow : public QMainWindow {
std::unique_ptr<iflytop::ZQThread> m_thread;
bool m_testState = false;
bool m_testState = false;
std::unique_ptr<std::thread> m_testThread;
public:
@ -92,7 +96,7 @@ class MainWindow : public QMainWindow {
void on_clearPreview_clicked();
signals:
signals:
void doinui_signal(QFunction);
private:
@ -104,7 +108,6 @@ signals:
void blockDataUploadPreviewShow(QString info);
void rawDataPreviewShow(QString info);
void displayInfo(bool suc, QString info);
private:
@ -122,5 +125,13 @@ signals:
void endAllocNewTab(QWidget *tab);
int32_t getDeviceId();
private:
void constructPumpControlUI(iflytop::ZQFunctionListBox *box , int targetDeviceId);
void constructCommonOperationTab();
void constructDrawBarDisinfectionBoxTab();
void processReportPacket(packet_type_t type, uint8_t from, uint8_t to, uint8_t *hex, uint32_t hexlen);
};
#endif // MAINWINDOW_H
Loading…
Cancel
Save