diff --git a/CMakeLists.txt b/CMakeLists.txt index 92d553e..895cd03 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.14) project(a8000_pc_upper VERSION 0.1 LANGUAGES CXX) diff --git a/a8000_protocol b/a8000_protocol index 77eb032..8268827 160000 --- a/a8000_protocol +++ b/a8000_protocol @@ -1 +1 @@ -Subproject commit 77eb03279eb3f348ded05b200978dae54fc86d1f +Subproject commit 82688278acc674cf0ad6a3a5f9017b93cc45a670 diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 2a64960..c7fc4e0 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -1009,6 +1009,13 @@ p, li { white-space: pre-wrap; } <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:11pt; color:#ff0000;">40  孵育盘加热 加热模块</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:11pt; color:#ff0000;">50  板夹仓加热</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:11pt; color:#ff0000;">60  进出料 </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:11pt; color:#ff0000;"> IO扩展板(60)</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:11pt; color:#ff0000;"> IO0:试管高低</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:11pt; color:#ff0000;"> IO1:转移通道外光电</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:11pt; color:#ff0000;"> IO2:转移通道内光电</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:11pt; color:#ff0000;"> IO3:出料口试管有无</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:11pt; color:#ff0000;"> IO4:试管有无</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:11pt; color:#ff0000;"> IO5:进料口试管有无</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:11pt; color:#ff0000;"> 进料电机(61)</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:11pt; color:#ff0000;"> 转移电机(62)</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:11pt; color:#ff0000;"> 出料电机(63)</span></p> diff --git a/src/tab/board_ext_tab.cpp b/src/tab/board_ext_tab.cpp index 55257ff..ddea6c9 100644 --- a/src/tab/board_ext_tab.cpp +++ b/src/tab/board_ext_tab.cpp @@ -42,9 +42,9 @@ void BoardExtTab::construct(QTabWidget *fathertab) { 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) { + box->newFunc("读取全部IO", {}, [this](int argn, const char **args) { int32_t status = 0; - ICM->callcmd1(getDeviceId(), kboard_read_muti_io, atoi(args[0])); + ICM->callcmd0(getDeviceId(), kboard_read_muti_io); ZQUI::ins()->ishow("IOState:%s", hex2binstr(ICM->getAck(0))); }); diff --git a/src/tab/step_motor_ctrl_tab.cpp b/src/tab/step_motor_ctrl_tab.cpp index 4dcf8fe..3a176e4 100644 --- a/src/tab/step_motor_ctrl_tab.cpp +++ b/src/tab/step_motor_ctrl_tab.cpp @@ -83,6 +83,125 @@ void StepMotorCtrlTab::construct(QTabWidget *fathertab) { ZQUI::ins()->ishow("olb :%d", status.olb); ZQUI::ins()->ishow("stst :%d", status.stst); }); + + box->newFunc("读取TMC2160状态", {}, [this](int argn, const char **args) { + ICM->callcmd0(getDeviceId(), kstep_motor_read_tmc2160_status); + + TMC2160MotorDriverStatus_t status; + static_assert(sizeof(status) == 4, "sizeof(TMC2160MotorDriverStatus_t) != 4"); + + memcpy(&status, ICM->getAckBuf(), 4); + + ZQUI::ins()->ishow("sg_result :%d", status.sg_result); + ZQUI::ins()->ishow("reserved0 :%d", status.reserved0); + ZQUI::ins()->ishow("reserved1 :%d", status.reserved1); + ZQUI::ins()->ishow("s2vsa :%d", status.s2vsa); + ZQUI::ins()->ishow("s2vsb :%d", status.s2vsb); + ZQUI::ins()->ishow("stealth :%d", status.stealth); + ZQUI::ins()->ishow("fsactive :%d", status.fsactive); + ZQUI::ins()->ishow("cs_actual :%d", status.cs_actual); + ZQUI::ins()->ishow("reserved2 :%d", status.reserved2); + ZQUI::ins()->ishow("stallguard :%d", status.stallguard); + ZQUI::ins()->ishow("ot :%d", status.ot); + ZQUI::ins()->ishow("otpw :%d", status.otpw); + ZQUI::ins()->ishow("s2ga :%d", status.s2ga); + ZQUI::ins()->ishow("s2gb :%d", status.s2gb); + ZQUI::ins()->ishow("ola :%d", status.ola); + ZQUI::ins()->ishow("olb :%d", status.olb); + ZQUI::ins()->ishow("stst :%d", status.stst); + }); + + box->newFunc("读取TMC2160_GState", {}, [this](int argn, const char **args) { + ICM->callcmd0(getDeviceId(), kstep_motor_read_tmc2160_state); + + TMC2160MotorGstate_t status; + static_assert(sizeof(status) == 4, "sizeof(TMC2160MotorGstate_t) != 4"); + + memcpy(&status, ICM->getAckBuf(), 4); + + ZQUI::ins()->ishow("reset :%d", status.reset); + ZQUI::ins()->ishow("drv_err :%d", status.drv_err); + ZQUI::ins()->ishow("uv_cp :%d", status.uv_cp); + }); + + box->newFunc("读取TMC4361A状态", {}, [this](int argn, const char **args) { + ICM->callcmd0(getDeviceId(), kstep_motor_read_tmc4361a_status); + + TMC4361AMotorStatus_t status; + static_assert(sizeof(status) == 4, "sizeof(TMC4361AMotorStatus_t) != 4"); + + memcpy(&status, ICM->getAckBuf(), 4); + + ZQUI::ins()->ishow("TARGET_REACHED_F :%d", status.TARGET_REACHED_F); + ZQUI::ins()->ishow("POS_COMP_REACHED_F :%d", status.POS_COMP_REACHED_F); + ZQUI::ins()->ishow("VEL_REACHED_F :%d", status.VEL_REACHED_F); + ZQUI::ins()->ishow("VEL_STATE_F :%d", status.VEL_STATE_F); + ZQUI::ins()->ishow("RAMP_STATE_F :%d", status.RAMP_STATE_F); + ZQUI::ins()->ishow("STOPL_ACTIVE_F :%d", status.STOPL_ACTIVE_F); + ZQUI::ins()->ishow("STOPR_ACTIVE_F :%d", status.STOPR_ACTIVE_F); + ZQUI::ins()->ishow("VSTOPL_ACTIVE_F :%d", status.VSTOPL_ACTIVE_F); + ZQUI::ins()->ishow("VSTOPR_ACTIVE_F :%d", status.VSTOPR_ACTIVE_F); + ZQUI::ins()->ishow("ACTIVE_STALL_F :%d", status.ACTIVE_STALL_F); + ZQUI::ins()->ishow("HOME_ERROR_F :%d", status.HOME_ERROR_F); + ZQUI::ins()->ishow("FS_ACTIVE_F :%d", status.FS_ACTIVE_F); + ZQUI::ins()->ishow("ENC_FAIL_F :%d", status.ENC_FAIL_F); + ZQUI::ins()->ishow("N_ACTIVE_F :%d", status.N_ACTIVE_F); + ZQUI::ins()->ishow("ENC_LATCH_F :%d", status.ENC_LATCH_F); + ZQUI::ins()->ishow("MULTI_CYCLE_FAIL_F :%d", status.MULTI_CYCLE_FAIL_F); + ZQUI::ins()->ishow("___ :%d", status.___); + ZQUI::ins()->ishow("CL_FIT_F :%d", status.CL_FIT_F); + ZQUI::ins()->ishow("SERIAL_ENC_FLAGS :%d", status.SERIAL_ENC_FLAGS); + ZQUI::ins()->ishow("SG :%d", status.SG); + ZQUI::ins()->ishow("OT :%d", status.OT); + ZQUI::ins()->ishow("OTPW :%d", status.OTPW); + ZQUI::ins()->ishow("S2GA :%d", status.S2GA); + ZQUI::ins()->ishow("S2GB :%d", status.S2GB); + ZQUI::ins()->ishow("OLA :%d", status.OLA); + ZQUI::ins()->ishow("OLB :%d", status.OLB); + ZQUI::ins()->ishow("STST :%d", status.STST); + }); + + box->newFunc("读取TMC4361A事件状态", {}, [this](int argn, const char **args) { + ICM->callcmd0(getDeviceId(), kstep_motor_read_tmc4361a_state); + + TMC4361AMotorEventState_t status; + static_assert(sizeof(status) == 4, "sizeof(TMC4361AMotorEventState_t) != 4"); + + memcpy(&status, ICM->getAckBuf(), 4); + + ZQUI::ins()->ishow("%20s: %d", "TARGET_REACHED", status.TARGET_REACHED); + ZQUI::ins()->ishow("%20s: %d", "POS_COMP_REACHED", status.POS_COMP_REACHED); + ZQUI::ins()->ishow("%20s: %d", "VEL_REACHED", status.VEL_REACHED); + ZQUI::ins()->ishow("%20s: %d", "VEL_STATE_EQ_0", status.VEL_STATE_EQ_0); + ZQUI::ins()->ishow("%20s: %d", "VEL_STATE_EQ_1", status.VEL_STATE_EQ_1); + ZQUI::ins()->ishow("%20s: %d", "VEL_STATE_EQ_2", status.VEL_STATE_EQ_2); + ZQUI::ins()->ishow("%20s: %d", "RAMP_STATE_EQ_0", status.RAMP_STATE_EQ_0); + ZQUI::ins()->ishow("%20s: %d", "RAMP_STATE_EQ_1", status.RAMP_STATE_EQ_1); + ZQUI::ins()->ishow("%20s: %d", "RAMP_STATE_EQ_2", status.RAMP_STATE_EQ_2); + ZQUI::ins()->ishow("%20s: %d", "MAX_PHASE_TRAP", status.MAX_PHASE_TRAP); + ZQUI::ins()->ishow("%20s: %d", "FROZEN", status.FROZEN); + ZQUI::ins()->ishow("%20s: %d", "STOPL", status.STOPL); + ZQUI::ins()->ishow("%20s: %d", "STOPR", status.STOPR); + ZQUI::ins()->ishow("%20s: %d", "VSTOPL_ACTIVE", status.VSTOPL_ACTIVE); + ZQUI::ins()->ishow("%20s: %d", "VSTOPR_ACTIVE", status.VSTOPR_ACTIVE); + ZQUI::ins()->ishow("%20s: %d", "HOME_ERROR", status.HOME_ERROR); + ZQUI::ins()->ishow("%20s: %d", "XLATCH_DONE", status.XLATCH_DONE); + ZQUI::ins()->ishow("%20s: %d", "FS_ACTIVE", status.FS_ACTIVE); + ZQUI::ins()->ishow("%20s: %d", "ENC_FAIL", status.ENC_FAIL); + ZQUI::ins()->ishow("%20s: %d", "N_ACTIVE", status.N_ACTIVE); + ZQUI::ins()->ishow("%20s: %d", "ENC_DONE", status.ENC_DONE); + ZQUI::ins()->ishow("%20s: %d", "SER_ENC_DATA_FAIL", status.SER_ENC_DATA_FAIL); + ZQUI::ins()->ishow("%20s: %d", "___", status.___); + ZQUI::ins()->ishow("%20s: %d", "SER_DATA_DONE", status.SER_DATA_DONE); + ZQUI::ins()->ishow("%20s: %d", "SERIAL_ENC_Flags", status.SERIAL_ENC_Flags); + ZQUI::ins()->ishow("%20s: %d", "COVER_DONE", status.COVER_DONE); + ZQUI::ins()->ishow("%20s: %d", "ENC_VEL0", status.ENC_VEL0); + ZQUI::ins()->ishow("%20s: %d", "CL_MAX", status.CL_MAX); + ZQUI::ins()->ishow("%20s: %d", "CL_FIT", status.CL_FIT); + ZQUI::ins()->ishow("%20s: %d", "STOP_ON_STALL", status.STOP_ON_STALL); + ZQUI::ins()->ishow("%20s: %d", "MOTOR_EV", status.MOTOR_EV); + ZQUI::ins()->ishow("%20s: %d", "RST_EV", status.RST_EV); + }); } { @@ -118,26 +237,28 @@ void StepMotorCtrlTab::constructRegTab(QTabWidget *fathertab) { tableBox->addReg("motor_pos", kreg_step_motor_pos, ZRegItem::krw | ZRegItem::kdec); tableBox->addReg("motor_dpos", kreg_step_motor_dpos, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_shift", kreg_step_motor_shift, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_shaft", kreg_step_motor_shaft, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_one_circle_pulse", kreg_step_motor_one_circle_pulse, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_one_circle_pulse_denominator", kreg_step_motor_one_circle_pulse_denominator, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_default_velocity", kreg_step_motor_default_velocity, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_default_acc", kreg_step_motor_default_acc, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_default_dec", kreg_step_motor_default_dec, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_default_break_dec", kreg_step_motor_default_break_dec, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_ihold", kreg_step_motor_ihold, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_irun", kreg_step_motor_irun, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_iholddelay", kreg_step_motor_iholddelay, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_iglobalscaler", kreg_step_motor_iglobalscaler, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_run_to_zero_max_d", kreg_step_motor_run_to_zero_max_d, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_look_zero_edge_max_d", kreg_step_motor_look_zero_edge_max_d, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_run_to_zero_speed", kreg_step_motor_run_to_zero_speed, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_run_to_zero_dec", kreg_step_motor_run_to_zero_dec, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_look_zero_edge_speed", kreg_step_motor_look_zero_edge_speed, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_look_zero_edge_dec", kreg_step_motor_look_zero_edge_dec, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_max_d", kreg_step_motor_max_d, ZRegItem::krw | ZRegItem::kdec); - tableBox->addReg("motor_min_d", kreg_step_motor_min_d, ZRegItem::krw | ZRegItem::kdec); + + tableBox->addReg("reg_step_motor_shaft", kreg_step_motor_shaft, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_one_circle_pulse", kreg_step_motor_one_circle_pulse, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_one_circle_pulse_denominator", kreg_step_motor_one_circle_pulse_denominator, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_default_velocity", kreg_step_motor_default_velocity, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_ihold", kreg_step_motor_ihold, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_irun", kreg_step_motor_irun, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_iholddelay", kreg_step_motor_iholddelay, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_iglobalscaler", kreg_step_motor_iglobalscaler, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_run_to_zero_speed", kreg_step_motor_run_to_zero_speed, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_look_zero_edge_speed", kreg_step_motor_look_zero_edge_speed, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_max_d", kreg_step_motor_max_d, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_min_d", kreg_step_motor_min_d, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_in_debug_mode", kreg_step_motor_in_debug_mode, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_vstart", kreg_step_motor_vstart, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_a1", kreg_step_motor_a1, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_amax", kreg_step_motor_amax, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_v1", kreg_step_motor_v1, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_dmax", kreg_step_motor_dmax, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_d1", kreg_step_motor_d1, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_vstop", kreg_step_motor_vstop, ZRegItem::krw | ZRegItem::kdec); + tableBox->addReg("reg_step_motor_tzerowait", kreg_step_motor_tzerowait, ZRegItem::krw | ZRegItem::kdec); tableBox->addSpacer(); tab->addSpacer(); diff --git a/src/version.h b/src/version.h index 6c09004..3ce739d 100644 --- a/src/version.h +++ b/src/version.h @@ -1,4 +1,4 @@ #pragma once -#define VERSION "VERSION_5" +#define VERSION "VERSION_6" #define MAUFACTURER "iflytop" \ No newline at end of file