From ad88c21310192c808777830c7685f0d7acdfe241 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 7 Aug 2024 19:21:44 +0800 Subject: [PATCH] update --- .../transmit_disinfection_can_master.cpp | 64 ++++++++++++++++++++++ .../transmit_disinfection_can_master.hpp | 54 +++++++++++++++++- .../transmit_disinfection/transmitdisinfection.cpp | 47 +++++++++++++--- .../zscanprotocol_com/zscanprotocol_com.hpp | 13 ++--- src/zqui/zqui/mainwindow.ui | 6 +- 5 files changed, 161 insertions(+), 23 deletions(-) diff --git a/src/app/transmit_disinfection/transmit_disinfection_can_master.cpp b/src/app/transmit_disinfection/transmit_disinfection_can_master.cpp index 0d9708e..5909944 100644 --- a/src/app/transmit_disinfection/transmit_disinfection_can_master.cpp +++ b/src/app/transmit_disinfection/transmit_disinfection_can_master.cpp @@ -42,4 +42,68 @@ ask_taskinfo_t TransmitDisinfectionCanMaster::readtaskinfo(int to, int32_t tasko auto receipt = m_com->callcmd1(to, kfn_read_taskinfo, taskoff, DEFUALT_OVERTIME); memcpy(&ack, receipt->getPacket()->params, sizeof(ack)); return ack; +} + +void TransmitDisinfectionCanMaster::clear_reset_flag(int to) { m_com->callcmd0(to, kfn_clear_reset_flag, DEFUALT_OVERTIME); } + +void TransmitDisinfectionCanMaster::pingAllBoard() { + m_com->callcmd1(0xff, kfn_heart_ping, 0xabcd, 20); + return; +} + +void TransmitDisinfectionCanMaster::pump_rotate(int boardid, int subid, int rpm) { m_com->callcmd2(boardid, kfn_pump_rotate, subid, rpm, DEFUALT_OVERTIME); } +void TransmitDisinfectionCanMaster::pump_stop(int boardid, int subid) { m_com->callcmd1(boardid, kfn_pump_stop, subid, DEFUALT_OVERTIME); } +void TransmitDisinfectionCanMaster::pump_set_ihold_irun_idelay(int boardid, int subid, int ihold, int irun, int idelay) { m_com->callcmd4(boardid, kfn_pump_set_ihold_irun_idelay, subid, irun, ihold, idelay, DEFUALT_OVERTIME); } +void TransmitDisinfectionCanMaster::pump_set_acc(int boardid, int subid, int acc) { m_com->callcmd2(boardid, kfn_pump_set_acc, subid, acc, DEFUALT_OVERTIME); } + +void TransmitDisinfectionCanMaster::pump_set_subic_reg(int boardid, int subid, int regadd, int val) { m_com->callcmd3(boardid, kfn_pump_set_subic_reg, subid, regadd, val, DEFUALT_OVERTIME); } +int TransmitDisinfectionCanMaster::pump_get_subic_reg(int boardid, int subid, int regadd) { + shared_ptr receipt = m_com->callcmd2(boardid, kfn_pump_get_subic_reg, subid, regadd, DEFUALT_OVERTIME); + return *(int32_t *)receipt->getPacket()->params; +} +void TransmitDisinfectionCanMaster::pump_ping(int32_t boardid) { m_com->callcmd1(boardid, kfn_pump_ping, boardid, DEFUALT_OVERTIME); } + +/*********************************************************************************************************************** + * blower * + ***********************************************************************************************************************/ +void TransmitDisinfectionCanMaster::blower_ctrl(int boardid, int power) { m_com->callcmd1(boardid, kfn_blower_ctrl, power); } +void TransmitDisinfectionCanMaster::blower_ctrl_safe_valve(int boardid, int valve_state) { m_com->callcmd1(boardid, kfn_blower_ctrl_safe_valve, valve_state); } +int TransmitDisinfectionCanMaster::blower_read_electric_current(int boardid) { + auto rec = m_com->callcmd0(boardid, kfn_blower_read_electric_current); + return rec->getContent(0); +} + +/*********************************************************************************************************************** + * air_compressor * + ***********************************************************************************************************************/ +void TransmitDisinfectionCanMaster::air_compressor_ctrl(int boardid, int power) { m_com->callcmd1(boardid, kfn_air_compressor_ctrl, power); } +void TransmitDisinfectionCanMaster::air_compressor_ctrl_safe_valve(int boardid, int valve_state) { m_com->callcmd1(boardid, kfn_air_compressor_ctrl_safe_valve, valve_state); } +int TransmitDisinfectionCanMaster::air_compressor_read_electric_current(int boardid) { + auto rec = m_com->callcmd0(boardid, kfn_air_compressor_read_electric_current); + return rec->getContent(0); +} + +/*********************************************************************************************************************** + * heater * + ***********************************************************************************************************************/ +void TransmitDisinfectionCanMaster::heater_ctrl(int boardid, int power) { m_com->callcmd1(boardid, kfn_heater_ctrl, power); } +void TransmitDisinfectionCanMaster::heater_ctrl_safe_valve(int boardid, int valve_state) { m_com->callcmd1(boardid, kfn_heater_ctrl_safe_valve, valve_state); } +int TransmitDisinfectionCanMaster::heater_read_electric_current(int boardid) { + auto rec = m_com->callcmd0(boardid, kfn_heater_read_electric_current); + return rec->getContent(0); +} +int TransmitDisinfectionCanMaster::heater_read_temperature_data(int boardid) { + auto rec = m_com->callcmd0(boardid, kfn_heater_read_temperature_data); + return rec->getContent(0); +} + +void TransmitDisinfectionCanMaster::triple_warning_light_ctl(int boardid, int r, int g, int b, int warning) { m_com->callcmd4(boardid, kfn_triple_warning_light_ctl, r, g, b, warning); } +int TransmitDisinfectionCanMaster::evaporation_bin_water_sensor_read_state(int boardid) { + auto rec = m_com->callcmd0(boardid, kfn_evaporation_bin_water_sensor_read_state); + return rec->getContent(0); +} + +int TransmitDisinfectionCanMaster::device_bottom_water_sensor_read_state(int boardid) { + auto rec = m_com->callcmd0(boardid, kfn_device_bottom_water_sensor_read_state); + return rec->getContent(0); } \ No newline at end of file diff --git a/src/app/transmit_disinfection/transmit_disinfection_can_master.hpp b/src/app/transmit_disinfection/transmit_disinfection_can_master.hpp index 30588f1..e6a59df 100644 --- a/src/app/transmit_disinfection/transmit_disinfection_can_master.hpp +++ b/src/app/transmit_disinfection/transmit_disinfection_can_master.hpp @@ -26,7 +26,7 @@ class TransmitDisinfectionCanMaster { ZSCanProtocolCom *m_com = nullptr; public: - void initialize(QTSerialChannel *ch); + void initialize(QTSerialChannel *ch); static TransmitDisinfectionCanMaster *ins() { static TransmitDisinfectionCanMaster *m_instance = nullptr; if (m_instance == nullptr) { @@ -37,8 +37,56 @@ class TransmitDisinfectionCanMaster { public: ack_read_board_info_data_t readboardinfo(int to); - ack_sysinfo_t readsysinfo(int to); - ask_taskinfo_t readtaskinfo(int to, int32_t taskoff); + + ack_sysinfo_t readsysinfo(int to); + ask_taskinfo_t readtaskinfo(int to, int32_t taskoff); + void clear_reset_flag(int to); + void pingAllBoard(); + + + 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; + } + + int device_bottom_water_sensor_read_state(int boardid) { + callcmd0(boardid, kcmd_device_bottom_water_sensor_read_state); + return *(int32_t *)m_receipt_frame->params; + } + + /*********************************************************************************************************************** + * PUMP * + ***********************************************************************************************************************/ + void pump_rotate(int boardid, int subid, int rpm); + 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); + + /*********************************************************************************************************************** + * blower * + ***********************************************************************************************************************/ + void blower_ctrl(int boardid, int power); + void blower_ctrl_safe_valve(int boardid, int valve_state); + int blower_read_electric_current(int boardid); + + /*********************************************************************************************************************** + * air_compressor * + ***********************************************************************************************************************/ + void air_compressor_ctrl(int boardid, int power); + void air_compressor_ctrl_safe_valve(int boardid, int valve_state); + int air_compressor_read_electric_current(int boardid); + + /*********************************************************************************************************************** + * heater * + ***********************************************************************************************************************/ + void heater_ctrl(int boardid, int power); + void heater_ctrl_safe_valve(int boardid, int valve_state); + int heater_read_electric_current(int boardid); + int heater_read_temperature_data(int boardid); }; } // namespace iflytop diff --git a/src/app/transmit_disinfection/transmitdisinfection.cpp b/src/app/transmit_disinfection/transmitdisinfection.cpp index bd5a4fc..703a64b 100644 --- a/src/app/transmit_disinfection/transmitdisinfection.cpp +++ b/src/app/transmit_disinfection/transmitdisinfection.cpp @@ -13,6 +13,36 @@ using namespace std; #define CAN_MASTER TransmitDisinfectionCanMaster::ins() +static void readBoardInfo(int deviceId) { + ack_read_board_info_data_t ack = CAN_MASTER->readboardinfo(deviceId); + ISHOW("boardType :%s(%d)", BoardTypeToString(ack.boardType), ack.boardType); + ISHOW("projectId :%s(%d)", ProjectIDToString(ack.projectId), ack.projectId); + ISHOW("protcol_version :%d", ack.protcol_version); + ISHOW("software_version :%d", ack.software_version); + ISHOW("hardware_version :%d", ack.hardware_version); +} + +static void readSysInfo(int deviceId) { + // + ack_sysinfo_t ack = CAN_MASTER->readsysinfo(deviceId); + ask_taskinfo_t task[20]; + for (int i = 0; i < ack.taskNum; i++) { + task[i] = CAN_MASTER->readtaskinfo(deviceId, i); + } + ISHOW("=========================== sys info ==========================="); + ISHOW("total_heap_size :%d", ack.total_heap_size); + ISHOW("free_heap_size :%d", ack.free_heap_size); + ISHOW("sysHasRun :%d", ack.sysHasRun); + ISHOW("="); + + ISHOW("=========================== task info ==========================="); + ISHOW("taskoff name state stackRemainSize priority"); + for (int i = 0; i < ack.taskNum; i++) { + ISHOW("%d %10s %c %d %d", i, task[i].taskName, task[i].state, task[i].stackRemindSize, task[i].priority); + } + ISHOW("="); +} + void TransmitDisinfection::buildTab(QTabWidget *fathertab) { ZQVTabPage *tab = new ZQVTabPage(fathertab, "通用控制"); /*********************************************************************************************************************** @@ -20,14 +50,14 @@ void TransmitDisinfection::buildTab(QTabWidget *fathertab) { ***********************************************************************************************************************/ { ZQFunctionListBox *box = new ZQFunctionListBox(tab, "方法", 4); - box->newFunc("读取<液路板(id==2)>板卡信息", {}, [this](int argn, const char **args) { - ack_read_board_info_data_t ack = CAN_MASTER->readboardinfo(kFixBoardId_LiquidCtrl); - ISHOW("boardType :%s(%d)", BoardTypeToString(ack.boardType), ack.boardType); - ISHOW("projectId :%s(%d)", ProjectIDToString(ack.projectId), ack.projectId); - ISHOW("protcol_version :%d", ack.protcol_version); - ISHOW("software_version :%d", ack.software_version); - ISHOW("hardware_version :%d", ack.hardware_version); - }); + + box->newSubButton("读取<液路板(2)>板卡信息", [this](int argn, const char **args) { readBoardInfo(kFixBoardId_LiquidCtrl); }); + box->newSubButton("读取<电源板(2)>系统信息", [this](int argn, const char **args) { readSysInfo(kFixBoardId_LiquidCtrl); }); + box->newSubButtonEnd(); + + box->newSubButton("读取<电源板(3)>板卡信息", [this](int argn, const char **args) { readBoardInfo(kFixBoardId_PowerControl); }); + box->newSubButton("读取<液路板(3)>系统信息", [this](int argn, const char **args) { readSysInfo(kFixBoardId_PowerControl); }); + box->newSubButtonEnd(); } tab->addSpacer(); @@ -36,6 +66,7 @@ void TransmitDisinfection::buildTab(QTabWidget *fathertab) { TransmitDisinfection::TransmitDisinfection(QWidget *parent) : QTabWidget(parent), ui(new Ui::TransmitDisinfection) { ui->setupUi(this); CAN_MASTER->initialize(&ChannelMgr::ins()->serialCh); + ZQUI::ins()->mainW()->setSerialDefaultBaudrate("2000000"); buildTab(this); } diff --git a/src/protocol/zscanprotocol_com/zscanprotocol_com.hpp b/src/protocol/zscanprotocol_com/zscanprotocol_com.hpp index c5bdc4e..0841260 100644 --- a/src/protocol/zscanprotocol_com/zscanprotocol_com.hpp +++ b/src/protocol/zscanprotocol_com/zscanprotocol_com.hpp @@ -19,7 +19,7 @@ namespace iflytop { using namespace std; -namespace zscanprotocol{ +namespace zscanprotocol { typedef function on_raw_data_t; @@ -39,12 +39,10 @@ class Receipt { uint8_t receipt[1024]; size_t receiptLen; - zcanbus_packet_t* getPacket(){ - return (zcanbus_packet_t*)receipt; - } + zcanbus_packet_t *getPacket() { return (zcanbus_packet_t *)receipt; } + int32_t getContent(int index) { return getPacket()->params[index]; } }; - class CanPacketRxBuffer { public: int32_t id = 0; @@ -87,7 +85,6 @@ class ZSCanProtocolCom { zcanbus_packet_t *m_receipt_frame = (zcanbus_packet_t *)m_receipt_cache; size_t m_receipt_len = 0; - public: ZSCanProtocolCom() {} @@ -114,8 +111,6 @@ class ZSCanProtocolCom { CanPacketRxBuffer *findRxBuff(int deviceId); string ecode2str(int ecode); }; -} - - +} // namespace zscanprotocol } // namespace iflytop diff --git a/src/zqui/zqui/mainwindow.ui b/src/zqui/zqui/mainwindow.ui index 5911e5c..d1c188c 100644 --- a/src/zqui/zqui/mainwindow.ui +++ b/src/zqui/zqui/mainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 753 - 545 + 1031 + 802 @@ -975,7 +975,7 @@ background-color: rgb(245, 245, 245); 0 - 4 + 5