diff --git a/app_protocols/transmit_disfection_protocol b/app_protocols/transmit_disfection_protocol index bd6d6b0..330c5b6 160000 --- a/app_protocols/transmit_disfection_protocol +++ b/app_protocols/transmit_disfection_protocol @@ -1 +1 @@ -Subproject commit bd6d6b04af6fbcb7d9dced79f8ecacb636492a17 +Subproject commit 330c5b6d619b65ba9043e632b5833a9efd58bf59 diff --git a/usrc/module/tmc_motor_group.cpp b/usrc/module/tmc_motor_group.cpp index bf2a2c8..2e47eb2 100644 --- a/usrc/module/tmc_motor_group.cpp +++ b/usrc/module/tmc_motor_group.cpp @@ -36,7 +36,7 @@ static void onMotorMonitorTimer(void const* argument) { // return; // 电机异常检查 TmcMotorGroup* DEVICE = (TmcMotorGroup*)tmcgroup_p; - report_exeception_data_t data; + report_exeception_data_t data = {0}; for (size_t i = 0; i < DEVICE->motorNum(); i++) { // ZLOGI(TAG, "check motor %d", i); bool estate = motorErrorFlag_get(i); @@ -50,6 +50,7 @@ static void onMotorMonitorTimer(void const* argument) { ZLOGE(TAG, "motor %d offline error", i); zcanbus_send_emergency_report(kreport_exception_error, (uint8_t*)&data, sizeof(data), 100); } + } else { auto gstate = DEVICE->motor(i)->getGState(); auto gstatus = DEVICE->motor(i)->getDevStatus(); @@ -78,12 +79,29 @@ static void onMotorMonitorTimer(void const* argument) { data.ecode = kerr_motor_reset_error; } else if (gstate.uv_cp) { data.ecode = kerr_motor_undervoltage_error; - } else if (gstate.drv_err) { - data.ecode = kerr_motor_driver_error; } else { - data.ecode = kerr_motor_unkown_error; + if (gstate.drv_err) data.ecode = kerr_motor_driver_error; + // + if (gstatus.ot) + data.ecode = kerr_motor_overtemperature_flag; + else if (gstatus.s2ga) + data.ecode = kerr_motor_short_to_ground_indicator_phase_A; + else if (gstatus.s2gb) + data.ecode = kerr_motor_open_load_indicator_phase_B; + else if (gstatus.ola) + data.ecode = kerr_motor_open_load_indicator_phase_A; + else if (gstatus.olb) + data.ecode = kerr_motor_open_load_indicator_phase_B; + else if (gstatus.stst) + data.ecode = kerr_motor_standstill_indicator; + else if (gstatus.otpw) + data.ecode = kerr_motor_overtemperature_pre_warning_flag; } + data.subid = i; + data.detailinfo; + static_assert(sizeof(gstatus) == 4); + memcpy(&data.detailinfo, &gstatus, sizeof(gstatus)); motorErrorFlag_set(i, true); zcanbus_send_emergency_report(kreport_exception_error, (uint8_t*)&data, sizeof(data), 100); } diff --git a/zsdk b/zsdk index 8bf4171..5b9a561 160000 --- a/zsdk +++ b/zsdk @@ -1 +1 @@ -Subproject commit 8bf4171e2ef60e8d4cd40e8467e19ae7805e9f26 +Subproject commit 5b9a561c0eaa7e37492e2539cfb2dc6007fb8a26