Merge branch 'devel' into input-filter

This commit is contained in:
Unknown
2019-01-02 12:54:30 -05:00
12 changed files with 132 additions and 36 deletions
+41 -11
View File
@@ -11,17 +11,47 @@ AXIS_STATE_ENCODER_INDEX_SEARCH = 6
AXIS_STATE_ENCODER_OFFSET_CALIBRATION = 7
AXIS_STATE_CLOSED_LOOP_CONTROL = 8
AXIS_ERROR_NONE = 0
AXIS_ERROR_INVALID_STATE = 1
#AXIS_ERROR_DC_BUS_UNDER_VOLTAGE = 2
#AXIS_ERROR_DC_BUS_OVER_VOLTAGE = 3
#AXIS_ERROR_CURRENT_MEASUREMENT_TIMEOUT = 4
#AXIS_ERROR_CONTROL_LOOP_TIMEOUT = 5
#AXIS_ERROR_MOTOR_FAILED = 6
#AXIS_ERROR_SENSORLESS_ESTIMATOR_FAILED = 7
#AXIS_ERROR_ENCODER_FAILED = 8
#AXIS_ERROR_CONTROLLER_FAILED = 9
#AXIS_ERROR_POS_CTRL_DURING_SENSORLESS = 10
class errors:
class axis:
ERROR_NONE = 0x00
ERROR_INVALID_STATE = 0x01 #<! an invalid state was requested
ERROR_DC_BUS_UNDER_VOLTAGE = 0x02
ERROR_DC_BUS_OVER_VOLTAGE = 0x04
ERROR_CURRENT_MEASUREMENT_TIMEOUT = 0x08
ERROR_BRAKE_RESISTOR_DISARMED = 0x10 #<! the brake resistor was unexpectedly disarmed
ERROR_MOTOR_DISARMED = 0x20 #<! the motor was unexpectedly disarmed
ERROR_MOTOR_FAILED = 0x40 # Go to motor.hpp for information, check odrvX.axisX.motor.error for error value
ERROR_SENSORLESS_ESTIMATOR_FAILED = 0x80
ERROR_ENCODER_FAILED = 0x100 # Go to encoder.hpp for information, check odrvX.axisX.encoder.error for error value
ERROR_CONTROLLER_FAILED = 0x200
ERROR_POS_CTRL_DURING_SENSORLESS = 0x400
class motor:
ERROR_NONE = 0
ERROR_PHASE_RESISTANCE_OUT_OF_RANGE = 0x0001
ERROR_PHASE_INDUCTANCE_OUT_OF_RANGE = 0x0002
ERROR_ADC_FAILED = 0x0004
ERROR_DRV_FAULT = 0x0008
ERROR_CONTROL_DEADLINE_MISSED = 0x0010
ERROR_NOT_IMPLEMENTED_MOTOR_TYPE = 0x0020
ERROR_BRAKE_CURRENT_OUT_OF_RANGE = 0x0040
ERROR_MODULATION_MAGNITUDE = 0x0080
ERROR_BRAKE_DEADTIME_VIOLATION = 0x0100
ERROR_UNEXPECTED_TIMER_CALLBACK = 0x0200
ERROR_CURRENT_SENSE_SATURATION = 0x0400
class encoder:
ERROR_NONE = 0
ERROR_UNSTABLE_GAIN = 0x01
ERROR_CPR_OUT_OF_RANGE = 0x02
ERROR_NO_RESPONSE = 0x04
ERROR_UNSUPPORTED_ENCODER_MODE = 0x08
ERROR_ILLEGAL_HALL_STATE = 0x10
ERROR_INDEX_NOT_FOUND_YET = 0x20
class controller:
ERROR_NONE = 0
ERROR_OVERSPEED = 0x01
MOTOR_TYPE_HIGH_CURRENT = 0
#MOTOR_TYPE_LOW_CURRENT = 1
+3 -2
View File
@@ -5,7 +5,7 @@ import threading
import fibre
import odrive
import odrive.enums
from odrive.utils import start_liveplotter
from odrive.utils import start_liveplotter, dump_errors
#from odrive.enums import * # pylint: disable=W0614
def print_banner():
@@ -76,7 +76,8 @@ def launch_shell(args, logger, app_shutdown_token):
"""
interactive_variables = {
'start_liveplotter': start_liveplotter
'start_liveplotter': start_liveplotter,
'dump_errors': dump_errors
}
# Expose all enums from odrive.enums
+39 -3
View File
@@ -7,6 +7,7 @@ import platform
import subprocess
import os
from fibre.utils import Event
from odrive.enums import errors
try:
if platform.system() == 'Windows':
@@ -19,13 +20,48 @@ except ImportError:
sys.stdout.flush()
pass
data_rate = 100
plot_rate = 10
num_samples = 1000
_VT100Colors = {
'green': '\x1b[92;1m',
'cyan': '\x1b[96;1m',
'yellow': '\x1b[93;1m',
'red': '\x1b[91;1m',
'default': '\x1b[0m'
}
class OperationAbortedException(Exception):
pass
def dump_errors(odrv, clear=False):
axes = [axis for name, axis in odrv._remote_attributes.items() if 'axis' in name]
for num, axis in enumerate(axes):
print('Axis{}:'.format(num))
# Flatten axis and submodules
# (name, remote_obj, errorcode)
module_decode_map = [
('axis', axis, errors.axis),
('motor', axis.motor, errors.motor),
('encoder', axis.encoder, errors.encoder),
('controller', axis.controller, errors.controller),
]
# Module error decode
for name, remote_obj, errorcodes in module_decode_map:
prefix = ' '*2 + name + ": "
if (remote_obj.error != errorcodes.ERROR_NONE):
print(prefix + _VT100Colors['red'] + "Error(s):" + _VT100Colors['default'])
errorcodes_tup = [(name, val) for name, val in errorcodes.__dict__.items() if 'ERROR_' in name]
for codename, codeval in errorcodes_tup:
if remote_obj.error & codeval != 0:
print(" " + codename)
if clear:
remote_obj.error = errorcodes.ERROR_NONE
else:
print(prefix + _VT100Colors['green'] + "no error" + _VT100Colors['default'])
data_rate = 100
plot_rate = 10
num_samples = 1000
def start_liveplotter(get_var_callback):
"""
Starts a liveplotter.