Browse Source

update

master
zhaohe 1 year ago
parent
commit
322c8a5c2f
  1. 3
      CMakeLists.txt
  2. 14
      src/mainwindow.cpp
  3. 2
      src/mainwindow.h
  4. 17
      src/mainwindow.ui
  5. 66
      src/tab/board_ext_tab.cpp
  6. 43
      src/tab/board_ext_tab.hpp
  7. 79
      src/tab/mini_servo_tab.cpp
  8. 43
      src/tab/mini_servo_tab.hpp
  9. 73
      src/tab/module_opera_tab.cpp
  10. 2
      src/tab/module_opera_tab.hpp
  11. 17
      src/tab/step_motor_ctrl_tab.cpp

3
CMakeLists.txt

@ -47,6 +47,9 @@ set(PROJECT_SOURCES
src/tab/step_motor_ctrl_tab.cpp
src/tab/module_opera_tab.cpp
src/tab/board_ext_tab.cpp
src/tab/mini_servo_tab.cpp
a8000_protocol/api/apibasic/errorcode.cpp
)

14
src/mainwindow.cpp

@ -21,6 +21,8 @@
#include "zui/zui.hpp"
//
#include "tab/board_ext_tab.hpp"
#include "tab/mini_servo_tab.hpp"
#include "tab/module_opera_tab.hpp"
#include "tab/step_motor_ctrl_tab.hpp"
@ -282,11 +284,21 @@ void MainWindow::processException(const zexception &e) { //
int32_t MainWindow::getDeviceId() { return PublicState_DeviceIDVal; }
void MainWindow::constructAppUI() {
ModuleOperaTab::inst()->construct(ui->buttonTabWidget);
ModuleOperaTab::inst()->construct(ui->moduleOpera);
BoardExtTab::inst()->construct(ui->buttonTabWidget);
StepMotorCtrlTab::inst()->construct(ui->buttonTabWidget);
StepMotorCtrlTab::inst()->constructRegTab(ui->buttonTabWidget);
MiniServoTab::inst()->construct(ui->buttonTabWidget);
}
void MainWindow::on_PublicState_ConfirmKey_clicked() {}
void MainWindow::on_PublicState_DeviceID_textChanged() { PublicState_DeviceIDVal = ui->PublicState_DeviceID->toPlainText().toInt(); }
void MainWindow::on_clearPreview_clicked() {
doinui_signal(QFunction([this]() { ui->instructionPreview->clear(); }));
doinui_signal(QFunction([this]() { ui->reportPreview->clear(); }));
doinui_signal(QFunction([this]() { ui->uploadDataPreview->clear(); }));
doinui_signal(QFunction([this]() { ui->rawDataPreview->clear(); }));
}

2
src/mainwindow.h

@ -92,6 +92,8 @@ class MainWindow : public QMainWindow {
void on_PublicState_DeviceID_textChanged();
void on_clearPreview_clicked();
signals:
void doinui_signal(QFunction);

17
src/mainwindow.ui

@ -853,14 +853,17 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
</widget>
</item>
<item>
<widget class="QTextBrowser" name="textBrowser">
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<widget class="QGroupBox" name="moduleOpera">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="title">
<string/>
</property>
<layout class="QVBoxLayout" name="verticalLayout_9"/>
</widget>
</item>
<item>

66
src/tab/board_ext_tab.cpp

@ -0,0 +1,66 @@
#include "board_ext_tab.hpp"
#include "iflytop_canbus/iflytop_canbus_master.hpp"
#include "logger.hpp"
#include "qt_serial_datachannel.hpp"
#include "zexception.hpp"
#include "zui/z_function_list_box.hpp"
#include "zui/z_reg_table_list_box.hpp"
#include "zui/zq_vtab_page.hpp"
//
#include "./mainwindow.h"
#include "zui\zqui.hpp"
//
using namespace iflytop;
using namespace std;
extern Ui::MainWindow *main_ui;
extern int getDeviceId();
BoardExtTab *BoardExtTab::inst() {
static BoardExtTab *ins = new BoardExtTab();
return ins;
}
void BoardExtTab::construct(QTabWidget *fathertab) {
ZQVTabPage *tab = new ZQVTabPage(fathertab, "板载扩展资源");
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
{
ZQFunctionListBox *box = new ZQFunctionListBox(tab, "方法", 4);
box->newFunc("读取IO", {"ioindex"}, [this](int argn, const char **args) {
int32_t status = 0;
ICM->callcmd1(getDeviceId(), kboard_read_ext_io, atoi(args[0]));
ZQUI::ins()->ishow("Status:%d", ICM->getAck(0));
});
box->newFunc("写入IO", {"ioindex"}, [this](int argn, const char **args) { ICM->callcmd1(getDeviceId(), kboard_write_ext_io, atoi(args[0])); });
}
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
{
ZRegTableList *tableBox = new ZRegTableList(tab, "寄存器操作");
tableBox->initializeRegOperation(
[this](int32_t add, int32_t val) { //
ICM->writereg(getDeviceId(), add, val);
return true;
},
[this](int32_t add, int32_t *val) { //
ICM->readreg(getDeviceId(), add, val);
return true;
});
tableBox->addReg("mod-version", kreg_module_version, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("mod-type", kreg_module_type, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("mod-status", kreg_module_status, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("mod-errorcode", kreg_module_errorcode, ZRegItem::krw | ZRegItem::kdec);
tableBox->addSpacer();
}
tab->addSpacer();
}

43
src/tab/board_ext_tab.hpp

@ -0,0 +1,43 @@
#pragma once
#include <QDateTime>
#include <QMainWindow>
#include <QMessageBox>
#include <QObject>
#include <QtConcurrent>
#include <QtCore/QVariant>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QTabWidget>
#include <QtWidgets/QTextBrowser>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
//
#include <functional>
namespace iflytop {
using namespace std;
class BoardExtTab {
public:
static BoardExtTab *inst();
void construct(QTabWidget *fathertab);
};
} // namespace iflytop

79
src/tab/mini_servo_tab.cpp

@ -0,0 +1,79 @@
#include "mini_servo_tab.hpp"
#include "iflytop_canbus/iflytop_canbus_master.hpp"
#include "logger.hpp"
#include "qt_serial_datachannel.hpp"
#include "zexception.hpp"
#include "zui/z_function_list_box.hpp"
#include "zui/z_reg_table_list_box.hpp"
#include "zui/zq_vtab_page.hpp"
//
#include "./mainwindow.h"
#include "zui\zqui.hpp"
//
using namespace iflytop;
using namespace std;
extern Ui::MainWindow *main_ui;
extern int getDeviceId();
MiniServoTab *MiniServoTab::inst() {
static MiniServoTab *ins = new MiniServoTab();
return ins;
}
void MiniServoTab::construct(QTabWidget *fathertab) {
ZQVTabPage *tab = new ZQVTabPage(fathertab, "舵机");
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
{
ZQFunctionListBox *box = new ZQFunctionListBox(tab, "方法", 4);
box->newFunc("使能", {"enable"}, [this](int argn, const char **args) { ICM->callcmd1(getDeviceId(), kmini_servo_enable, atoi(args[0])); });
box->newFunc("读取位置", {}, [this](int argn, const char **args) {
ICM->callcmd0(getDeviceId(), kmini_servo_read_pos);
ZQUI::ins()->ishow("Position:%d", ICM->getAck(0));
});
box->newFunc("激活配置", {}, [this](int argn, const char **args) { ICM->callcmd0(getDeviceId(), kmini_servo_active_cfg); });
box->newFunc("停止", {"breakstop"}, [this](int argn, const char **args) { ICM->callcmd1(getDeviceId(), kmini_servo_stop, atoi(args[0])); });
box->newFunc("旋转", {"direction"}, [this](int argn, const char **args) { ICM->callcmd1(getDeviceId(), kmini_servo_rotate, atoi(args[0])); });
box->newFunc("移动到", {"position"}, [this](int argn, const char **args) { ICM->callcmd1(getDeviceId(), kmini_servo_move_to, atoi(args[0])); });
box->newFunc("设置中点", {}, [this](int argn, const char **args) { ICM->callcmd0(getDeviceId(), kmini_servo_set_mid_point); });
box->newFunc("读取IO状态", {"ioindex"}, [this](int argn, const char **args) {
ICM->callcmd1(getDeviceId(), kmini_servo_read_io_state, atoi(args[0]));
ZQUI::ins()->ishow("IO:%d", ICM->getAck(0));
});
}
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
{
ZRegTableList *tableBox = new ZRegTableList(tab, "寄存器操作");
tableBox->initializeRegOperation(
[this](int32_t add, int32_t val) { //
ICM->writereg(getDeviceId(), add, val);
return true;
},
[this](int32_t add, int32_t *val) { //
ICM->readreg(getDeviceId(), add, val);
return true;
});
tableBox->addReg("mod-version", kreg_module_version, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("mod-type", kreg_module_type, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("mod-status", kreg_module_status, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("mod-errorcode", kreg_module_errorcode, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("pos", kreg_mini_servo_pos, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("limit-velocity", kreg_mini_servo_limit_velocity, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("limit-torque", kreg_mini_servo_limit_torque, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("protective-torque", kreg_mini_servo_protective_torque, ZRegItem::krw | ZRegItem::kdec);
tableBox->addSpacer();
}
tab->addSpacer();
}

43
src/tab/mini_servo_tab.hpp

@ -0,0 +1,43 @@
#pragma once
#include <QDateTime>
#include <QMainWindow>
#include <QMessageBox>
#include <QObject>
#include <QtConcurrent>
#include <QtCore/QVariant>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QTabWidget>
#include <QtWidgets/QTextBrowser>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
//
#include <functional>
namespace iflytop {
using namespace std;
class MiniServoTab {
public:
static MiniServoTab *inst();
void construct(QTabWidget *fathertab);
};
} // namespace iflytop

73
src/tab/module_opera_tab.cpp

@ -17,26 +17,77 @@ extern Ui::MainWindow *main_ui;
extern int getDeviceId();
// typedef enum {
// kuniversal_module = 0, // 通用模块
// khbot_module = 1, // hbot模块
// kmotor_module = 2, // 电机控制
// ktemperature_ctrl_module = 3, // 温度控制
// kfan_ctrl_module = 5, // 风扇控制
// kcode_scaner = 6, // 风扇控制
// kpipette_ctrl_module = 7, // 移液体枪控制
// ka8000_optical_module = 8, // a8000光学模组
// klaster_scaner_module = 9, // a8000光学模组
// ktmc_step_motor = 10, // 步进电机
// kmini_servo_motor_module = 11, // 舵机
// kboard = 12, // 舵机
// } module_type_t;
static const char *module_type2_str(int id) {
switch (id) {
case kuniversal_module:
return "通用模块";
case khbot_module:
return "hbot模块";
case kmotor_module:
return "电机控制";
case ktemperature_ctrl_module:
return "温度控制";
case kfan_ctrl_module:
return "风扇控制";
case kcode_scaner:
return "风扇控制";
case kpipette_ctrl_module:
return "移液体枪控制";
case ka8000_optical_module:
return "a8000光学模组";
case klaster_scaner_module:
return "a8000光学模组";
//
case ktmc_step_motor:
return "步进电机";
case kmini_servo_motor_module:
return "舵机";
case kboard:
return "板子扩展";
default:
return "未知模块";
}
}
ModuleOperaTab *ModuleOperaTab::inst() {
static ModuleOperaTab *ins = new ModuleOperaTab();
return ins;
}
void ModuleOperaTab::construct(QTabWidget *fathertab) {
void ModuleOperaTab::construct(QWidget *parent) {
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
// main_ui->
ZQVTabPage *tab = new ZQVTabPage(fathertab, "模块操作");
// ZQVTabPage *tab = new ZQVTabPage(fathertab, "模块操作");
{
ZQFunctionListBox *box = new ZQFunctionListBox(tab, "模块基础操作", 4);
ZQFunctionListBox *box = new ZQFunctionListBox(parent, "模块基础操作", 1);
box->newFunc("扫描模块", {}, [this](int argn, const char **args) { //
for (size_t i = 1; i < 255; i++) {
try {
IflytopCanbusMaster::ins()->ping(i);
ZQUI::ins()->ishow("module :%d isOnline", i);
int moduleType;
IflytopCanbusMaster::ins()->readreg(i, kreg_module_type, &moduleType);
ZQUI::ins()->ishow("module :%d isOnline type:%s", i, module_type2_str(moduleType));
} catch (const zexception &e) {
if (e.ecode() != ke_overtime) {
ZQUI::ins()->ishow("%s", e.what());
@ -46,7 +97,19 @@ void ModuleOperaTab::construct(QTabWidget *fathertab) {
}
ZQUI::ins()->ishow("ScanModuleEnd");
});
box->newFunc("获取状态", {}, [this](int argn, const char **args) {
int32_t status = 0;
ICM->callcmd0(getDeviceId(), kmodule_get_status);
ZQUI::ins()->ishow("Status:%d", ICM->getAck(0));
});
box->newFunc("停止", {}, [this](int argn, const char **args) { ICM->callcmd0(getDeviceId(), kmodule_stop); });
box->newFunc("获取错误", {}, [this](int argn, const char **args) {
ICM->callcmd0(getDeviceId(), kmodule_get_error);
ZQUI::ins()->ishow("Error:%d", ICM->getAck(0));
});
box->newFunc("清除错误", {}, [this](int argn, const char **args) { ICM->callcmd0(getDeviceId(), kmodule_clear_error); });
}
tab->addSpacer();
// tab->addSpacer();
}

2
src/tab/module_opera_tab.hpp

@ -38,6 +38,6 @@ class ModuleOperaTab {
public:
static ModuleOperaTab* inst();
void construct(QTabWidget *fathertab);
void construct(QWidget *parent);
};
} // namespace iflytop

17
src/tab/step_motor_ctrl_tab.cpp

@ -43,23 +43,8 @@ void StepMotorCtrlTab::construct(QTabWidget *fathertab) {
{
ZQFunctionListBox *box = new ZQFunctionListBox(tab, "方法", 4);
// kmodule_get_status = CMDID(1, 4), // para:{}, ack:{4}
// kmodule_stop = CMDID(1, 1), // para:{}, ack:{}
// kmodule_get_error = CMDID(1, 10), // para:{}, ack:{1}
// kmodule_clear_error = CMDID(1, 11), // para:{}, ack:{}
// kmodule_active_cfg = CMDID(1, 16), // para:{}, ack:{}
box->newFunc("M-获取状态", {}, [this](int argn, const char **args) {
int32_t status = 0;
ICM->callcmd0(getDeviceId(), kmodule_get_status);
ZQUI::ins()->ishow("Status:%d", ICM->getAck(0));
});
box->newFunc("M-停止", {}, [this](int argn, const char **args) { ICM->callcmd0(getDeviceId(), kmodule_stop); });
box->newFunc("M-获取错误", {}, [this](int argn, const char **args) {
ICM->callcmd0(getDeviceId(), kmodule_get_error);
ZQUI::ins()->ishow("Error:%d", ICM->getAck(0));
});
box->newFunc("M-清除错误", {}, [this](int argn, const char **args) { ICM->callcmd0(getDeviceId(), kmodule_clear_error); });
//
box->newFunc("使能", {"enable"}, [this](int argn, const char **args) { ICM->step_motor_enable(getDeviceId(), atoi(args[0])); });
box->newFunc("读取位置", {}, [this](int argn, const char **args) {

Loading…
Cancel
Save