From: Michael G. <gi...@gi...> - 2011-12-29 23:04:52
|
Add axes teleop velocities to motion status to be used by gui Signed-off-by: Michael Geszkiewicz <mi...@wp...> http://git.linuxcnc.org/?p=emc2.git;a=commitdiff;h=7e3780b --- src/emc/motion/control.c | 14 +++++++++++++- src/emc/motion/motion.h | 5 +++++ src/emc/nml_intf/emc_nml.hh | 2 ++ src/emc/task/taskintf.cc | 4 ++++ src/emc/usr_intf/axis/extensions/emcmodule.cc | 20 ++++++++++++++++++++ 5 files changed, 44 insertions(+), 1 deletions(-) diff --git a/src/emc/motion/control.c b/src/emc/motion/control.c index 75a1607..9e2f67d 100644 --- a/src/emc/motion/control.c +++ b/src/emc/motion/control.c @@ -1765,9 +1765,11 @@ static void output_to_hal(void) static void update_status(void) { - int joint_num, dio, aio; + int joint_num, axis_num, dio, aio; emcmot_joint_t *joint; emcmot_joint_status_t *joint_status; + emcmot_axis_t *axis; + emcmot_axis_status_t *axis_status; #ifdef WATCH_FLAGS static int old_joint_flags[8]; static int old_motion_flag; @@ -1802,6 +1804,16 @@ static void update_status(void) joint_status->home_offset = joint->home_offset; } + for (axis_num = 0; axis_num < EMCMOT_MAX_AXIS; axis_num++) { + /* point to axis data */ + axis = &axes[axis_num]; + /* point to axis status */ + axis_status = &(emcmotStatus->axis_status[axis_num]); + + axis_status->vel_cmd = axis->vel_cmd; + } + + for (dio = 0; dio < emcmotConfig->numDIO; dio++) { emcmotStatus->synch_di[dio] = *(emcmot_hal_data->synch_di[dio]); emcmotStatus->synch_do[dio] = *(emcmot_hal_data->synch_do[dio]); diff --git a/src/emc/motion/motion.h b/src/emc/motion/motion.h index ff8ce1d..b646439 100644 --- a/src/emc/motion/motion.h +++ b/src/emc/motion/motion.h @@ -560,6 +560,10 @@ Suggestion: Split this in to an Error and a Status flag register.. simple_tp_t teleop_tp; /* planner for teleop mode motion */ } emcmot_axis_t; + typedef struct { + double vel_cmd; /* comanded axis velocity */ + } emcmot_axis_status_t; + /********************************* STATUS STRUCTURE *********************************/ @@ -604,6 +608,7 @@ Suggestion: Split this in to an Error and a Status flag register.. int homing_active; /* non-zero if any joint is homing */ home_sequence_state_t homingSequenceState; emcmot_joint_status_t joint_status[EMCMOT_MAX_JOINTS]; /* all joint status data */ + emcmot_axis_status_t axis_status[EMCMOT_MAX_AXIS]; /* all axis status data */ int on_soft_limit; /* non-zero if any joint is on soft limit */ diff --git a/src/emc/nml_intf/emc_nml.hh b/src/emc/nml_intf/emc_nml.hh index dbbc7f8..a52c07a 100644 --- a/src/emc/nml_intf/emc_nml.hh +++ b/src/emc/nml_intf/emc_nml.hh @@ -163,6 +163,8 @@ class EMC_AXIS_STAT:public EMC_AXIS_STAT_MSG { // For internal NML/CMS use only. void update(CMS * cms); + + double velocity; // current velocity }; // declarations for EMC_JOINT classes diff --git a/src/emc/task/taskintf.cc b/src/emc/task/taskintf.cc index 7f2c6c6..3df27ef 100644 --- a/src/emc/task/taskintf.cc +++ b/src/emc/task/taskintf.cc @@ -473,6 +473,7 @@ double emcAxisGetMaxAcceleration(int axis) int emcAxisUpdate(EMC_AXIS_STAT stat[], int numAxes) { int axis_num; + emcmot_axis_status_t *axis; // check for valid range if (numAxes <= 0 || numAxes > EMCMOT_MAX_AXIS) { @@ -480,6 +481,9 @@ int emcAxisUpdate(EMC_AXIS_STAT stat[], int numAxes) } for (axis_num = 0; axis_num < numAxes; axis_num++) { + axis = &(emcmotStatus.axis_status[axis_num]); + + stat[axis_num].velocity = axis->vel_cmd; } return 0; } diff --git a/src/emc/usr_intf/axis/extensions/emcmodule.cc b/src/emc/usr_intf/axis/extensions/emcmodule.cc index 8877ac9..8839a27 100644 --- a/src/emc/usr_intf/axis/extensions/emcmodule.cc +++ b/src/emc/usr_intf/axis/extensions/emcmodule.cc @@ -552,6 +552,25 @@ static PyObject *Stat_joint(pyStatChannel *s) { return res; } +#define F(x) F2(#x, x) +#define F2(y,x) dict_add(res, y, s->status.motion.axis[axisno].x) +static PyObject *Stat_axis_one(pyStatChannel *s, int axisno) { + PyObject *res = PyDict_New(); + F(velocity); + return res; +} + +#undef F +#undef F2 + +static PyObject *Stat_axis(pyStatChannel *s) { + PyObject *res = PyTuple_New(EMCMOT_MAX_AXIS); + for(int i=0; i<EMCMOT_MAX_AXIS; i++) { + PyTuple_SetItem(res, i, Stat_axis_one(s, i)); + } + return res; +} + static PyStructSequence_Field tool_fields[] = { {(char*)"id", }, {(char*)"xoffset", }, @@ -614,6 +633,7 @@ static PyGetSetDef Stat_getsetlist[] = { {(char*)"ain", (getter)Stat_ain}, {(char*)"aout", (getter)Stat_aout}, {(char*)"joint", (getter)Stat_joint}, + {(char*)"axis", (getter)Stat_axis}, {(char*)"din", (getter)Stat_din}, {(char*)"dout", (getter)Stat_dout}, {(char*)"gcodes", (getter)Stat_activegcodes}, |