mirror of
https://github.com/odriverobotics/ODrive.git
synced 2026-08-18 09:29:03 +08:00
[GUI] added enum generator npm script, cleaned up use of enums in Axis.vue, fixed various setTimeout bugs
This commit is contained in:
+1
-1
@@ -16,7 +16,7 @@ else
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring v3.,$(CONFIG_BOARD_VERSION)))
|
||||
OPENOCD := openocd -f interface/stlink.cfg $(PROGRAMMER_CMD) -f target/stm32f4x.cfg -c init
|
||||
OPENOCD := openocd -f interface/stlink-v2.cfg $(PROGRAMMER_CMD) -f target/stm32f4x.cfg -c init
|
||||
GDB := arm-none-eabi-gdb --ex 'target extended-remote | openocd -f "interface/stlink-v2.cfg" -f "target/stm32f4x.cfg" -c "gdb_port pipe; log_output openocd.log"' --ex 'monitor reset halt'
|
||||
else ifneq (,$(findstring v4.,$(CONFIG_BOARD_VERSION)))
|
||||
OPENOCD := openocd -f interface/stlink.cfg $(PROGRAMMER_CMD) -f target/stm32f7x.cfg -c 'reset_config none separate' -c init
|
||||
|
||||
+4
-1
@@ -6,7 +6,10 @@
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint",
|
||||
"electron:build": "electron-icon-builder --input=./public/icon.png --output=build --flatten && vue-cli-service electron:build",
|
||||
"enumGenerate": "node scripts/enumGenerate.js",
|
||||
"preelectron:build": "electron-icon-builder --input=./public/icon.png --output=build --flatten && npm run enumGenerate",
|
||||
"electron:build": "vue-cli-service electron:build",
|
||||
"preelectron:serve": "npm run enumGenerate",
|
||||
"electron:serve": "vue-cli-service electron:serve",
|
||||
"postinstall": "electron-builder install-app-deps",
|
||||
"postuninstall": "electron-builder install-app-deps",
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
|
||||
fs.readFile(path.resolve(__dirname,'../../tools/odrive/enums.py'), 'utf8', function(err, data) {
|
||||
if (err) throw err;
|
||||
let enumsString = data;
|
||||
let lines = enumsString.split('\n');
|
||||
let enums = {};
|
||||
for (const line of lines) {
|
||||
if (line != '' && line[0] != '#') {
|
||||
// get word
|
||||
// get = value
|
||||
let name;
|
||||
let value;
|
||||
name = line.split('=')[0];
|
||||
value = line.split('=')[1];
|
||||
enums[name.trim()] = parseInt(value.trim());
|
||||
}
|
||||
}
|
||||
fs.writeFile(path.resolve(__dirname, '../src/assets/odriveEnums.json'), JSON.stringify(enums, null, 4), function(err) {
|
||||
if (err) throw err;
|
||||
});
|
||||
console.log('Wrote ODrive enums to GUI/src/assets/odriveEnums.json');
|
||||
});
|
||||
@@ -142,16 +142,6 @@ export default {
|
||||
console.log(dashName);
|
||||
this.$store.commit("setDash", dashName);
|
||||
},
|
||||
//updateOdrives() {
|
||||
// if (this.$store.state.serverConnected == true) {
|
||||
//} && this.sampling == false) {
|
||||
// this.$store.dispatch("getOdrives");
|
||||
// }
|
||||
//setTimeout(() => {
|
||||
// this.updateOdrives();
|
||||
//}, 1000);
|
||||
//console.log("updating data...");
|
||||
//},
|
||||
addDash() {
|
||||
let dashname = "Dashboard " + (this.dashboards.length - 2);
|
||||
this.dashboards.push({
|
||||
|
||||
+121
-129
@@ -1,131 +1,123 @@
|
||||
{
|
||||
"GPIO_MODE_DIGITAL" : 0,
|
||||
"GPIO_MODE_DIGITAL_PULL_UP" : 1,
|
||||
"GPIO_MODE_DIGITAL_PULL_DOWN" : 2,
|
||||
"GPIO_MODE_ANALOG_IN" : 3,
|
||||
"GPIO_MODE_UART0" : 4,
|
||||
"GPIO_MODE_UART1" : 5,
|
||||
"GPIO_MODE_UART2" : 6,
|
||||
"GPIO_MODE_CAN0" : 7,
|
||||
"GPIO_MODE_I2C0" : 8,
|
||||
"GPIO_MODE_SPI0" : 9,
|
||||
"GPIO_MODE_PWM0" : 10,
|
||||
"GPIO_MODE_ENC0" : 11,
|
||||
"GPIO_MODE_ENC1" : 12,
|
||||
"GPIO_MODE_ENC2" : 13,
|
||||
|
||||
"PROTOCOL_SIMPLE" : 0,
|
||||
|
||||
"AXIS_STATE_UNDEFINED" : 0,
|
||||
"AXIS_STATE_IDLE" : 1,
|
||||
"AXIS_STATE_STARTUP_SEQUENCE" : 2,
|
||||
"AXIS_STATE_FULL_CALIBRATION_SEQUENCE" : 3,
|
||||
"AXIS_STATE_MOTOR_CALIBRATION" : 4,
|
||||
"AXIS_STATE_SENSORLESS_CONTROL" : 5,
|
||||
"AXIS_STATE_ENCODER_INDEX_SEARCH" : 6,
|
||||
"AXIS_STATE_ENCODER_OFFSET_CALIBRATION" : 7,
|
||||
"AXIS_STATE_CLOSED_LOOP_CONTROL" : 8,
|
||||
"AXIS_STATE_LOCKIN_SPIN" : 9,
|
||||
"AXIS_STATE_ENCODER_DIR_FIND" : 10,
|
||||
"AXIS_STATE_HOMING" : 11,
|
||||
|
||||
"ENCODER_MODE_INCREMENTAL" : 0,
|
||||
"ENCODER_MODE_HALL" : 1,
|
||||
"ENCODER_MODE_SINCOS" : 2,
|
||||
"ENCODER_MODE_SPI_ABS_CUI" : 256,
|
||||
"ENCODER_MODE_SPI_ABS_AMS" : 257,
|
||||
"ENCODER_MODE_SPI_ABS_AEAT" : 258,
|
||||
"ENCODER_MODE_SPI_ABS_RLS" : 259,
|
||||
|
||||
"CONTROL_MODE_VOLTAGE_CONTROL" : 0,
|
||||
"CONTROL_MODE_TORQUE_CONTROL" : 1,
|
||||
"CONTROL_MODE_VELOCITY_CONTROL" : 2,
|
||||
"CONTROL_MODE_POSITION_CONTROL" : 3,
|
||||
|
||||
"INPUT_MODE_INACTIVE" : 0,
|
||||
"INPUT_MODE_PASSTHROUGH" : 1,
|
||||
"INPUT_MODE_VEL_RAMP" : 2,
|
||||
"INPUT_MODE_POS_FILTER" : 3,
|
||||
"INPUT_MODE_MIX_CHANNELS" : 4,
|
||||
"INPUT_MODE_TRAP_TRAJ" : 5,
|
||||
"INPUT_MODE_TORQUE_RAMP" : 6,
|
||||
"INPUT_MODE_MIRROR" : 7,
|
||||
|
||||
"MOTOR_TYPE_HIGH_CURRENT" : 0,
|
||||
"MOTOR_TYPE_GIMBAL" : 2,
|
||||
"MOTOR_TYPE_ACIM" : 3,
|
||||
|
||||
"CAN_ERROR_NONE" : 0,
|
||||
"CAN_ERROR_DUPLICATE_CAN_IDS" : 1,
|
||||
|
||||
"AXIS_ERROR_NONE" : 0,
|
||||
"AXIS_ERROR_INVALID_STATE" : 1,
|
||||
"AXIS_ERROR_DC_BUS_UNDER_VOLTAGE" : 2,
|
||||
"AXIS_ERROR_DC_BUS_OVER_VOLTAGE" : 4,
|
||||
"AXIS_ERROR_CURRENT_MEASUREMENT_TIMEOUT" : 8,
|
||||
"AXIS_ERROR_BRAKE_RESISTOR_DISARMED" : 16,
|
||||
"AXIS_ERROR_MOTOR_DISARMED" : 32,
|
||||
"AXIS_ERROR_MOTOR_FAILED" : 64,
|
||||
"AXIS_ERROR_SENSORLESS_ESTIMATOR_FAILED" : 128,
|
||||
"AXIS_ERROR_ENCODER_FAILED" : 256,
|
||||
"AXIS_ERROR_CONTROLLER_FAILED" : 512,
|
||||
"AXIS_ERROR_POS_CTRL_DURING_SENSORLESS" : 1024,
|
||||
"AXIS_ERROR_WATCHDOG_TIMER_EXPIRED" : 2048,
|
||||
"AXIS_ERROR_MIN_ENDSTOP_PRESSED" : 4096,
|
||||
"AXIS_ERROR_MAX_ENDSTOP_PRESSED" : 8192,
|
||||
"AXIS_ERROR_ESTOP_REQUESTED" : 16384,
|
||||
"AXIS_ERROR_HOMING_WITHOUT_ENDSTOP" : 131072,
|
||||
"AXIS_ERROR_OVER_TEMP" : 262144,
|
||||
|
||||
"LOCKIN_STATE_INACTIVE" : 0,
|
||||
"LOCKIN_STATE_RAMP" : 1,
|
||||
"LOCKIN_STATE_ACCELERATE" : 2,
|
||||
"LOCKIN_STATE_CONST_VEL" : 3,
|
||||
|
||||
"MOTOR_ERROR_NONE" : 0,
|
||||
"MOTOR_ERROR_PHASE_RESISTANCE_OUT_OF_RANGE" : 1,
|
||||
"MOTOR_ERROR_PHASE_INDUCTANCE_OUT_OF_RANGE" : 2,
|
||||
"MOTOR_ERROR_ADC_FAILED" : 4,
|
||||
"MOTOR_ERROR_DRV_FAULT" : 8,
|
||||
"MOTOR_ERROR_CONTROL_DEADLINE_MISSED" : 16,
|
||||
"MOTOR_ERROR_NOT_IMPLEMENTED_MOTOR_TYPE" : 32,
|
||||
"MOTOR_ERROR_BRAKE_CURRENT_OUT_OF_RANGE" : 64,
|
||||
"MOTOR_ERROR_MODULATION_MAGNITUDE" : 128,
|
||||
"MOTOR_ERROR_BRAKE_DEADTIME_VIOLATION" : 256,
|
||||
"MOTOR_ERROR_UNEXPECTED_TIMER_CALLBACK" : 512,
|
||||
"MOTOR_ERROR_CURRENT_SENSE_SATURATION" : 1024,
|
||||
"MOTOR_ERROR_CURRENT_LIMIT_VIOLATION" : 4096,
|
||||
"MOTOR_ERROR_BRAKE_DUTY_CYCLE_NAN" : 8192,
|
||||
"MOTOR_ERROR_DC_BUS_OVER_REGEN_CURRENT" : 16384,
|
||||
"MOTOR_ERROR_DC_BUS_OVER_CURRENT" : 32768,
|
||||
"MOTOR_ERROR_MODULATION_IS_NAN" : 65536,
|
||||
"MOTOR_ERROR_MOTOR_THERMISTOR_OVER_TEMP" : 131072,
|
||||
"MOTOR_ERROR_FET_THERMISTOR_OVER_TEMP" : 262144,
|
||||
|
||||
"ARMED_STATE_DISARMED" : 0,
|
||||
"ARMED_STATE_WAITING_FOR_TIMINGS" : 1,
|
||||
"ARMED_STATE_WAITING_FOR_UPDATE" : 2,
|
||||
"ARMED_STATE_ARMED" : 3,
|
||||
|
||||
"CONTROLLER_ERROR_NONE" : 0,
|
||||
"CONTROLLER_ERROR_OVERSPEED" : 1,
|
||||
"CONTROLLER_ERROR_INVALID_INPUT_MODE" : 2,
|
||||
"CONTROLLER_ERROR_UNSTABLE_GAIN" : 4,
|
||||
"CONTROLLER_ERROR_INVALID_MIRROR_AXIS" : 8,
|
||||
"CONTROLLER_ERROR_INVALID_LOAD_ENCODER" : 16,
|
||||
"CONTROLLER_ERROR_INVALID_ESTIMATE" : 32,
|
||||
|
||||
"ENCODER_ERROR_NONE" : 0,
|
||||
"ENCODER_ERROR_UNSTABLE_GAIN" : 1,
|
||||
"ENCODER_ERROR_CPR_POLEPAIRS_MISMATCH" : 2,
|
||||
"ENCODER_ERROR_NO_RESPONSE" : 4,
|
||||
"ENCODER_ERROR_UNSUPPORTED_ENCODER_MODE" : 8,
|
||||
"ENCODER_ERROR_ILLEGAL_HALL_STATE" : 16,
|
||||
"ENCODER_ERROR_INDEX_NOT_FOUND_YET" : 32,
|
||||
"ENCODER_ERROR_ABS_SPI_TIMEOUT" : 64,
|
||||
"ENCODER_ERROR_ABS_SPI_COM_FAIL" : 128,
|
||||
"ENCODER_ERROR_ABS_SPI_NOT_READY" : 256,
|
||||
|
||||
"SENSORLESS_ESTIMATOR_ERROR_NONE" : 0,
|
||||
"SENSORLESS_ESTIMATOR_ERROR_UNSTABLE_GAIN" : 1
|
||||
"GPIO_MODE_DIGITAL": 0,
|
||||
"GPIO_MODE_DIGITAL_PULL_UP": 1,
|
||||
"GPIO_MODE_DIGITAL_PULL_DOWN": 2,
|
||||
"GPIO_MODE_ANALOG_IN": 3,
|
||||
"GPIO_MODE_UART_A": 4,
|
||||
"GPIO_MODE_UART_B": 5,
|
||||
"GPIO_MODE_UART_C": 6,
|
||||
"GPIO_MODE_CAN_A": 7,
|
||||
"GPIO_MODE_I2C_A": 8,
|
||||
"GPIO_MODE_SPI_A": 9,
|
||||
"GPIO_MODE_PWM": 10,
|
||||
"GPIO_MODE_ENC0": 11,
|
||||
"GPIO_MODE_ENC1": 12,
|
||||
"GPIO_MODE_ENC2": 13,
|
||||
"GPIO_MODE_MECH_BRAKE": 14,
|
||||
"GPIO_MODE_STATUS": 15,
|
||||
"PROTOCOL_SIMPLE": 1,
|
||||
"AXIS_STATE_UNDEFINED": 0,
|
||||
"AXIS_STATE_IDLE": 1,
|
||||
"AXIS_STATE_STARTUP_SEQUENCE": 2,
|
||||
"AXIS_STATE_FULL_CALIBRATION_SEQUENCE": 3,
|
||||
"AXIS_STATE_MOTOR_CALIBRATION": 4,
|
||||
"AXIS_STATE_ENCODER_INDEX_SEARCH": 6,
|
||||
"AXIS_STATE_ENCODER_OFFSET_CALIBRATION": 7,
|
||||
"AXIS_STATE_CLOSED_LOOP_CONTROL": 8,
|
||||
"AXIS_STATE_LOCKIN_SPIN": 9,
|
||||
"AXIS_STATE_ENCODER_DIR_FIND": 10,
|
||||
"AXIS_STATE_HOMING": 11,
|
||||
"AXIS_STATE_ENCODER_HALL_POLARITY_CALIBRATION": 12,
|
||||
"AXIS_STATE_ENCODER_HALL_PHASE_CALIBRATION": 13,
|
||||
"ENCODER_MODE_INCREMENTAL": 0,
|
||||
"ENCODER_MODE_HALL": 1,
|
||||
"ENCODER_MODE_SINCOS": 2,
|
||||
"ENCODER_MODE_SPI_ABS_CUI": 256,
|
||||
"ENCODER_MODE_SPI_ABS_AMS": 257,
|
||||
"ENCODER_MODE_SPI_ABS_AEAT": 258,
|
||||
"ENCODER_MODE_SPI_ABS_RLS": 259,
|
||||
"ENCODER_MODE_SPI_ABS_MA732": 260,
|
||||
"CONTROL_MODE_VOLTAGE_CONTROL": 0,
|
||||
"CONTROL_MODE_TORQUE_CONTROL": 1,
|
||||
"CONTROL_MODE_VELOCITY_CONTROL": 2,
|
||||
"CONTROL_MODE_POSITION_CONTROL": 3,
|
||||
"INPUT_MODE_INACTIVE": 0,
|
||||
"INPUT_MODE_PASSTHROUGH": 1,
|
||||
"INPUT_MODE_VEL_RAMP": 2,
|
||||
"INPUT_MODE_POS_FILTER": 3,
|
||||
"INPUT_MODE_MIX_CHANNELS": 4,
|
||||
"INPUT_MODE_TRAP_TRAJ": 5,
|
||||
"INPUT_MODE_TORQUE_RAMP": 6,
|
||||
"INPUT_MODE_MIRROR": 7,
|
||||
"MOTOR_TYPE_HIGH_CURRENT": 0,
|
||||
"MOTOR_TYPE_GIMBAL": 2,
|
||||
"MOTOR_TYPE_ACIM": 3,
|
||||
"ODRIVE_ERROR_NONE": 0,
|
||||
"ODRIVE_ERROR_CONTROL_ITERATION_MISSED": 1,
|
||||
"ODRIVE_ERROR_DC_BUS_UNDER_VOLTAGE": 2,
|
||||
"ODRIVE_ERROR_DC_BUS_OVER_VOLTAGE": 4,
|
||||
"ODRIVE_ERROR_DC_BUS_OVER_REGEN_CURRENT": 8,
|
||||
"ODRIVE_ERROR_DC_BUS_OVER_CURRENT": 16,
|
||||
"ODRIVE_ERROR_BRAKE_DEADTIME_VIOLATION": 32,
|
||||
"ODRIVE_ERROR_BRAKE_DUTY_CYCLE_NAN": 64,
|
||||
"ODRIVE_ERROR_INVALID_BRAKE_RESISTANCE": 128,
|
||||
"CAN_ERROR_NONE": 0,
|
||||
"CAN_ERROR_DUPLICATE_CAN_IDS": 1,
|
||||
"AXIS_ERROR_NONE": 0,
|
||||
"AXIS_ERROR_INVALID_STATE": 1,
|
||||
"AXIS_ERROR_WATCHDOG_TIMER_EXPIRED": 2048,
|
||||
"AXIS_ERROR_MIN_ENDSTOP_PRESSED": 4096,
|
||||
"AXIS_ERROR_MAX_ENDSTOP_PRESSED": 8192,
|
||||
"AXIS_ERROR_ESTOP_REQUESTED": 16384,
|
||||
"AXIS_ERROR_HOMING_WITHOUT_ENDSTOP": 131072,
|
||||
"AXIS_ERROR_OVER_TEMP": 262144,
|
||||
"MOTOR_ERROR_NONE": 0,
|
||||
"MOTOR_ERROR_PHASE_RESISTANCE_OUT_OF_RANGE": 1,
|
||||
"MOTOR_ERROR_PHASE_INDUCTANCE_OUT_OF_RANGE": 2,
|
||||
"MOTOR_ERROR_DRV_FAULT": 8,
|
||||
"MOTOR_ERROR_CONTROL_DEADLINE_MISSED": 16,
|
||||
"MOTOR_ERROR_MODULATION_MAGNITUDE": 128,
|
||||
"MOTOR_ERROR_CURRENT_SENSE_SATURATION": 1024,
|
||||
"MOTOR_ERROR_CURRENT_LIMIT_VIOLATION": 4096,
|
||||
"MOTOR_ERROR_MODULATION_IS_NAN": 65536,
|
||||
"MOTOR_ERROR_MOTOR_THERMISTOR_OVER_TEMP": 131072,
|
||||
"MOTOR_ERROR_FET_THERMISTOR_OVER_TEMP": 262144,
|
||||
"MOTOR_ERROR_TIMER_UPDATE_MISSED": 524288,
|
||||
"MOTOR_ERROR_CURRENT_MEASUREMENT_UNAVAILABLE": 1048576,
|
||||
"MOTOR_ERROR_CONTROLLER_FAILED": 2097152,
|
||||
"MOTOR_ERROR_I_BUS_OUT_OF_RANGE": 4194304,
|
||||
"MOTOR_ERROR_BRAKE_RESISTOR_DISARMED": 8388608,
|
||||
"MOTOR_ERROR_SYSTEM_LEVEL": 16777216,
|
||||
"MOTOR_ERROR_BAD_TIMING": 33554432,
|
||||
"MOTOR_ERROR_UNKNOWN_PHASE_ESTIMATE": 67108864,
|
||||
"MOTOR_ERROR_UNKNOWN_PHASE_VEL": 134217728,
|
||||
"MOTOR_ERROR_UNKNOWN_TORQUE": 268435456,
|
||||
"MOTOR_ERROR_UNKNOWN_CURRENT_COMMAND": 536870912,
|
||||
"MOTOR_ERROR_UNKNOWN_CURRENT_MEASUREMENT": 1073741824,
|
||||
"MOTOR_ERROR_UNKNOWN_VBUS_VOLTAGE": 2147483648,
|
||||
"MOTOR_ERROR_UNKNOWN_VOLTAGE_COMMAND": 4294967296,
|
||||
"MOTOR_ERROR_UNKNOWN_GAINS": 8589934592,
|
||||
"MOTOR_ERROR_CONTROLLER_INITIALIZING": 17179869184,
|
||||
"MOTOR_ERROR_UNBALANCED_PHASES": 34359738368,
|
||||
"CONTROLLER_ERROR_NONE": 0,
|
||||
"CONTROLLER_ERROR_OVERSPEED": 1,
|
||||
"CONTROLLER_ERROR_INVALID_INPUT_MODE": 2,
|
||||
"CONTROLLER_ERROR_UNSTABLE_GAIN": 4,
|
||||
"CONTROLLER_ERROR_INVALID_MIRROR_AXIS": 8,
|
||||
"CONTROLLER_ERROR_INVALID_LOAD_ENCODER": 16,
|
||||
"CONTROLLER_ERROR_INVALID_ESTIMATE": 32,
|
||||
"ENCODER_ERROR_NONE": 0,
|
||||
"ENCODER_ERROR_UNSTABLE_GAIN": 1,
|
||||
"ENCODER_ERROR_CPR_POLEPAIRS_MISMATCH": 2,
|
||||
"ENCODER_ERROR_NO_RESPONSE": 4,
|
||||
"ENCODER_ERROR_UNSUPPORTED_ENCODER_MODE": 8,
|
||||
"ENCODER_ERROR_ILLEGAL_HALL_STATE": 16,
|
||||
"ENCODER_ERROR_INDEX_NOT_FOUND_YET": 32,
|
||||
"ENCODER_ERROR_ABS_SPI_TIMEOUT": 64,
|
||||
"ENCODER_ERROR_ABS_SPI_COM_FAIL": 128,
|
||||
"ENCODER_ERROR_ABS_SPI_NOT_READY": 256,
|
||||
"ENCODER_ERROR_HALL_NOT_CALIBRATED_YET": 512,
|
||||
"SENSORLESS_ESTIMATOR_ERROR_NONE": 0,
|
||||
"SENSORLESS_ESTIMATOR_ERROR_UNSTABLE_GAIN": 1,
|
||||
"SENSORLESS_ESTIMATOR_ERROR_UNKNOWN_CURRENT_MEASUREMENT": 2
|
||||
}
|
||||
+63
-145
@@ -1,24 +1,32 @@
|
||||
<template>
|
||||
<div
|
||||
class="axis"
|
||||
@click.self="showError = !showError;"
|
||||
:class="{inactive: !connected, noError: !error, error: error}"
|
||||
@click.self="showError = !showError"
|
||||
:class="{ inactive: !connected, noError: !error, error: error }"
|
||||
>
|
||||
{{ axis }}
|
||||
<div v-show="showError" class="error-popup card" @click.self="showError = !showError">
|
||||
<clear-errors :data="{axis: axis}"/>
|
||||
<div
|
||||
v-show="showError"
|
||||
class="error-popup card"
|
||||
@click.self="showError = !showError"
|
||||
>
|
||||
<clear-errors :data="{ axis: axis }" />
|
||||
axis:
|
||||
<span :class="{ noError: !axisError, error: axisError}">{{axisErrorMsg}}</span>
|
||||
<span :class="{ noError: !axisError, error: axisError }">{{
|
||||
axisErrorMsg
|
||||
}}</span>
|
||||
<br />motor:
|
||||
<span :class="{ noError: !motorError, error: motorError}">{{motorErrorMsg}}</span>
|
||||
<span :class="{ noError: !motorError, error: motorError }">{{
|
||||
motorErrorMsg
|
||||
}}</span>
|
||||
<br />encoder:
|
||||
<span
|
||||
:class="{ noError: !encoderError, error: encoderError}"
|
||||
>{{encoderErrorMsg}}</span>
|
||||
<span :class="{ noError: !encoderError, error: encoderError }">{{
|
||||
encoderErrorMsg
|
||||
}}</span>
|
||||
<br />controller:
|
||||
<span
|
||||
:class="{ noError: !controllerError, error: controllerError}"
|
||||
>{{controllerErrorMsg}}</span>
|
||||
<span :class="{ noError: !controllerError, error: controllerError }">{{
|
||||
controllerErrorMsg
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -28,72 +36,6 @@ import odriveEnums from "../assets/odriveEnums.json";
|
||||
import clearErrors from "./clearErrors.vue";
|
||||
import { getVal, fetchParam } from "../lib/odrive_utils";
|
||||
|
||||
const axisErrors = {
|
||||
0x00000000: "AXIS_ERROR_NONE",
|
||||
0x00000001: "AXIS_ERROR_INVALID_STATE",
|
||||
0x00000002: "AXIS_ERROR_DC_BUS_UNDER_VOLTAGE",
|
||||
0x00000004: "AXIS_ERROR_DC_BUS_OVER_VOLTAGE",
|
||||
0x00000008: "AXIS_ERROR_CURRENT_MEASUREMENT_TIMEOUT",
|
||||
0x00000010: "AXIS_ERROR_BRAKE_RESISTOR_DISARMED",
|
||||
0x00000020: "AXIS_ERROR_MOTOR_DISARMED",
|
||||
0x00000040: "AXIS_ERROR_MOTOR_FAILED",
|
||||
0x00000080: "AXIS_ERROR_SENSORLESS_ESTIMATOR_FAILED",
|
||||
0x00000100: "AXIS_ERROR_ENCODER_FAILED",
|
||||
0x00000200: "AXIS_ERROR_CONTROLLER_FAILED",
|
||||
0x00000400: "AXIS_ERROR_POS_CTRL_DURING_SENSORLESS",
|
||||
0x00000800: "AXIS_ERROR_WATCHDOG_TIMER_EXPIRED",
|
||||
0x00001000: "AXIS_ERROR_MIN_ENDSTOP_PRESSED",
|
||||
0x00002000: "AXIS_ERROR_MAX_ENDSTOP_PRESSED",
|
||||
0x00004000: "AXIS_ERROR_ESTOP_REQUESTED",
|
||||
0x00020000: "AXIS_ERROR_HOMING_WITHOUT_ENDSTOP",
|
||||
0x00040000: "AXIS_ERROR_OVER_TEMP",
|
||||
};
|
||||
|
||||
const motorErrors = {
|
||||
0x00000000: "MOTOR_ERROR_NONE",
|
||||
0x00000001: "MOTOR_ERROR_PHASE_RESISTANCE_OUT_OF_RANGE",
|
||||
0x00000002: "MOTOR_ERROR_PHASE_INDUCTANCE_OUT_OF_RANGE",
|
||||
0x00000004: "MOTOR_ERROR_ADC_FAILED",
|
||||
0x00000008: "MOTOR_ERROR_DRV_FAULT",
|
||||
0x00000010: "MOTOR_ERROR_CONTROL_DEADLINE_MISSED",
|
||||
0x00000020: "MOTOR_ERROR_NOT_IMPLEMENTED_MOTOR_TYPE",
|
||||
0x00000040: "MOTOR_ERROR_BRAKE_CURRENT_OUT_OF_RANGE",
|
||||
0x00000080: "MOTOR_ERROR_MODULATION_MAGNITUDE",
|
||||
0x00000100: "MOTOR_ERROR_BRAKE_DEADTIME_VIOLATION",
|
||||
0x00000200: "MOTOR_ERROR_UNEXPECTED_TIMER_CALLBACK",
|
||||
0x00000400: "MOTOR_ERROR_CURRENT_SENSE_SATURATION",
|
||||
0x00001000: "MOTOR_ERROR_CURRENT_LIMIT_VIOLATION",
|
||||
0x00002000: "MOTOR_ERROR_BRAKE_DUTY_CYCLE_NAN",
|
||||
0x00004000: "MOTOR_ERROR_DC_BUS_OVER_REGEN_CURRENT",
|
||||
0x00008000: "MOTOR_ERROR_DC_BUS_OVER_CURRENT",
|
||||
0x00010000: "MOTOR_ERROR_MODULATION_IS_NAN",
|
||||
0x00020000: "MOTOR_ERROR_MOTOR_THERMISTOR_OVER_TEMP",
|
||||
0x00040000: "MOTOR_ERROR_FET_THERMISTOR_OVER_TEMP",
|
||||
};
|
||||
|
||||
let encoderErrors = {
|
||||
0x00000000: "ENCODER_ERROR_NONE",
|
||||
0x00000001: "ENCODER_ERROR_UNSTABLE_GAIN",
|
||||
0x00000002: "ENCODER_ERROR_CPR_POLEPAIRS_MISMATCH",
|
||||
0x00000004: "ENCODER_ERROR_NO_RESPONSE",
|
||||
0x00000008: "ENCODER_ERROR_UNSUPPORTED_ENCODER_MODE",
|
||||
0x00000010: "ENCODER_ERROR_ILLEGAL_HALL_STATE",
|
||||
0x00000020: "ENCODER_ERROR_INDEX_NOT_FOUND_YET",
|
||||
0x00000040: "ENCODER_ERROR_ABS_SPI_TIMEOUT",
|
||||
0x00000080: "ENCODER_ERROR_ABS_SPI_COM_FAIL",
|
||||
0x00000100: "ENCODER_ERROR_ABS_SPI_NOT_READY",
|
||||
};
|
||||
|
||||
let controllerErrors = {
|
||||
0x00000000: "CONTROLLER_ERROR_NONE",
|
||||
0x00000001: "CONTROLLER_ERROR_OVERSPEED",
|
||||
0x00000002: "CONTROLLER_ERROR_INVALID_INPUT_MODE",
|
||||
0x00000004: "CONTROLLER_ERROR_UNSTABLE_GAIN",
|
||||
0x00000008: "CONTROLLER_ERROR_INVALID_MIRROR_AXIS",
|
||||
0x00000010: "CONTROLLER_ERROR_INVALID_LOAD_ENCODER",
|
||||
0x00000020: "CONTROLLER_ERROR_INVALID_ESTIMATE",
|
||||
};
|
||||
|
||||
export default {
|
||||
name: "Axis",
|
||||
components: {
|
||||
@@ -109,12 +51,30 @@ export default {
|
||||
encoderErr: undefined,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
getErrorString(errCode, errType) {
|
||||
let retMsg = "none";
|
||||
|
||||
if (errCode != 0) {
|
||||
// we got an error!
|
||||
// mask errors depending on which page is active
|
||||
let errs = [];
|
||||
for (const [name, value] of Object.entries(odriveEnums)) {
|
||||
if (name.includes(errType) && errCode & value) {
|
||||
errs.push(name);
|
||||
}
|
||||
}
|
||||
retMsg = errs.join(", ");
|
||||
}
|
||||
|
||||
return retMsg;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
connected() {
|
||||
return this.$store.state.ODrivesConnected[this.axis.split('.')[0]];
|
||||
return this.$store.state.ODrivesConnected[this.axis.split(".")[0]];
|
||||
},
|
||||
axisErrorMsg() {
|
||||
let retMsg = "none";
|
||||
let errCode = this.axisErr;
|
||||
|
||||
if (this.$store.state.currentDash == "Wizard") {
|
||||
@@ -122,22 +82,9 @@ export default {
|
||||
errCode &= ~odriveEnums.AXIS_ERROR_ENCODER_FAILED;
|
||||
}
|
||||
|
||||
if (errCode != 0) {
|
||||
// we got an error!
|
||||
// mask errors depending on which page is active
|
||||
let errs = [];
|
||||
for (const errKey of Object.keys(axisErrors)) {
|
||||
if (errCode & errKey) {
|
||||
errs.push(axisErrors[errKey]);
|
||||
}
|
||||
}
|
||||
retMsg = errs.join(', ');
|
||||
}
|
||||
|
||||
return retMsg;
|
||||
return this.getErrorString(errCode, 'AXIS_ERROR');
|
||||
},
|
||||
motorErrorMsg() {
|
||||
let retMsg = "none";
|
||||
let errCode = this.motorErr;
|
||||
|
||||
if (this.$store.state.currentDash == "Wizard") {
|
||||
@@ -145,21 +92,9 @@ export default {
|
||||
errCode &= ~odriveEnums.MOTOR_ERROR_PHASE_INDUCTANCE_OUT_OF_RANGE;
|
||||
}
|
||||
|
||||
if (errCode != 0) {
|
||||
// we got an error!
|
||||
let errs = [];
|
||||
for (const errKey of Object.keys(motorErrors)) {
|
||||
if (errCode & errKey) {
|
||||
errs.push(motorErrors[errKey]);
|
||||
}
|
||||
}
|
||||
retMsg = errs.join(', ');
|
||||
}
|
||||
|
||||
return retMsg;
|
||||
return this.getErrorString(errCode, 'MOTOR_ERROR');
|
||||
},
|
||||
encoderErrorMsg() {
|
||||
let retMsg = "none";
|
||||
let errCode = this.encoderErr;
|
||||
|
||||
if (this.$store.state.currentDash == "Wizard") {
|
||||
@@ -167,35 +102,12 @@ export default {
|
||||
errCode &= ~odriveEnums.ENCODER_ERROR_NO_RESPONSE;
|
||||
}
|
||||
|
||||
if (errCode != 0) {
|
||||
// we got an error!
|
||||
let errs = [];
|
||||
for (const errKey of Object.keys(encoderErrors)) {
|
||||
if (errCode & errKey) {
|
||||
errs.push(encoderErrors[errKey]);
|
||||
}
|
||||
}
|
||||
retMsg = errs.join(', ');
|
||||
}
|
||||
|
||||
return retMsg;
|
||||
return this.getErrorString(errCode, 'ENCODER_ERROR');
|
||||
},
|
||||
controllerErrorMsg() {
|
||||
let retMsg = "none";
|
||||
let errCode = this.controllerErr;
|
||||
|
||||
if (errCode != 0) {
|
||||
// we got an error!
|
||||
let errs = [];
|
||||
for (const errKey of Object.keys(controllerErrors)) {
|
||||
if (errCode & errKey) {
|
||||
errs.push(controllerErrors[errKey]);
|
||||
}
|
||||
}
|
||||
retMsg = errs.join(', ');
|
||||
}
|
||||
|
||||
return retMsg;
|
||||
return this.getErrorString(errCode, 'CONTROLLER_ERROR');
|
||||
},
|
||||
axisError() {
|
||||
let errCode = this.axisErr;
|
||||
@@ -226,27 +138,33 @@ export default {
|
||||
return errCode != 0;
|
||||
},
|
||||
error() {
|
||||
return this.axisError || this.motorError || this.encoderError || this.controllerError;
|
||||
return (
|
||||
this.axisError ||
|
||||
this.motorError ||
|
||||
this.encoderError ||
|
||||
this.controllerError
|
||||
);
|
||||
},
|
||||
},
|
||||
created() {
|
||||
// set up timeout loop for grabbing axis error values
|
||||
let update = () => {
|
||||
// Do we have an active connection to the ODrive that contains this axis?
|
||||
if (this.$store.state.ODrivesConnected[this.axis.split('.')[0]]) {
|
||||
if (this.$store.state.ODrivesConnected[this.axis.split(".")[0]]) {
|
||||
fetchParam(this.axis + ".error");
|
||||
fetchParam(this.axis + '.motor.error');
|
||||
fetchParam(this.axis + '.controller.error');
|
||||
fetchParam(this.axis + '.encoder.error');
|
||||
this.axisErr = getVal(this.axis + '.error');
|
||||
this.motorErr = getVal(this.axis + '.motor.error');
|
||||
this.controllerErr = getVal(this.axis + '.controller.error');
|
||||
this.encoderErr = getVal(this.axis + '.encoder.error');
|
||||
fetchParam(this.axis + ".motor.error");
|
||||
fetchParam(this.axis + ".controller.error");
|
||||
fetchParam(this.axis + ".encoder.error");
|
||||
this.axisErr = getVal(this.axis + ".error");
|
||||
this.motorErr = getVal(this.axis + ".motor.error");
|
||||
this.controllerErr = getVal(this.axis + ".controller.error");
|
||||
this.encoderErr = getVal(this.axis + ".encoder.error");
|
||||
}
|
||||
// ODrive not connected
|
||||
setTimeout(update, 1000);
|
||||
}
|
||||
update();
|
||||
};
|
||||
this.cyclicUpdate = setInterval(update, 1000);
|
||||
},
|
||||
beforeDestroy() {
|
||||
clearInterval(this.cyclicUpdate);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -51,8 +51,10 @@ export default {
|
||||
mounted() {
|
||||
this.timeStart = Date.now();
|
||||
//this.initData(); //set label for dataset and color
|
||||
this.fillData();
|
||||
this.liveData();
|
||||
this.cyclicUpdate = setInterval(() => this.fillData(), 50);
|
||||
},
|
||||
beforeDestroy() {
|
||||
clearInterval(this.cyclicUpdate);
|
||||
},
|
||||
methods: {
|
||||
fillData() {
|
||||
@@ -85,15 +87,6 @@ export default {
|
||||
],
|
||||
};
|
||||
},
|
||||
liveData() {
|
||||
setTimeout(() => {
|
||||
this.liveData();
|
||||
}, 50);
|
||||
//if (this.$store.state.sampling == true) {
|
||||
// this.fillData();
|
||||
//}
|
||||
this.fillData();
|
||||
},
|
||||
deletePlot: function () {
|
||||
// commit a mutation in the store with the relevant information
|
||||
this.$store.commit("removePlotFromDash", {
|
||||
|
||||
@@ -120,9 +120,6 @@ export async function motorCalibration(odrive, axis) {
|
||||
|
||||
state = getVal(odrive + axis + ".current_state");
|
||||
motorError = getVal(odrive + axis + ".motor.error");
|
||||
if (run) {
|
||||
setTimeout(updateVals, 100);
|
||||
}
|
||||
}
|
||||
|
||||
// set up our state watch function
|
||||
@@ -137,8 +134,7 @@ export async function motorCalibration(odrive, axis) {
|
||||
}
|
||||
|
||||
// start getting live updates
|
||||
let run = true;
|
||||
updateVals();
|
||||
let cylicUpdate = setInterval(updateVals, 100);
|
||||
|
||||
// send motor calibration command to correct odrive and axis
|
||||
putVal(odrive + axis + ".requested_state", odriveEnums.AXIS_STATE_MOTOR_CALIBRATION);
|
||||
@@ -150,7 +146,7 @@ export async function motorCalibration(odrive, axis) {
|
||||
const result = await waitFor(end);
|
||||
|
||||
// stop our parameter updates
|
||||
run = false;
|
||||
clearInterval(cylicUpdate);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -167,9 +163,6 @@ export async function encoderCalibration(odrive,axis) {
|
||||
|
||||
state = getVal(odrive + axis + ".current_state");
|
||||
encoderError = getVal(odrive + axis + ".encoder.error");
|
||||
if (run) {
|
||||
setTimeout(updateVals, 100);
|
||||
}
|
||||
}
|
||||
|
||||
// set up our state watch function
|
||||
@@ -184,8 +177,7 @@ export async function encoderCalibration(odrive,axis) {
|
||||
}
|
||||
|
||||
// start getting live updates
|
||||
let run = true;
|
||||
updateVals();
|
||||
let cylicUpdate = setInterval(updateVals, 100);
|
||||
|
||||
// start encoder offset cal
|
||||
putVal(odrive + axis + ".requested_state", odriveEnums.AXIS_STATE_ENCODER_OFFSET_CALIBRATION);
|
||||
@@ -197,7 +189,7 @@ export async function encoderCalibration(odrive,axis) {
|
||||
const result = await waitFor(end);
|
||||
|
||||
// stop our parameter updates
|
||||
run = false;
|
||||
clearInterval(cylicUpdate);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user