Implement incremental jogging in halui This implements incremental jogging in halui by providing and increment selection pin and two direction pins per joint.
Index: src/emc/usr_intf/halui.cc =================================================================== --- src.orig/emc/usr_intf/halui.cc 2011-06-02 22:39:06.000000000 +0200 +++ src/emc/usr_intf/halui.cc 2011-06-04 20:40:28.382770885 +0200 @@ -159,12 +159,21 @@ DONE - jogging: halui.jog.0.minus bit halui.jog.0.plus bit halui.jog.0.analog float //pin for jogging the axis 0 + halui.jog.0.increment float + halui.jog.0.increment-plus bit + halui.jog.0.increment-minus bit .. halui.jog.7.minus bit halui.jog.7.plus bit halui.jog.7.analog float //pin for jogging the axis 7 + halui.jog.7.increment float + halui.jog.7.increment-plus bit + halui.jog.7.increment-minus bit halui.jog.selected.minus bit halui.jog.selected.plus bit + halui.jog.selected.increment float + halui.jog.selected.increment-plus bit + halui.jog.selected.increment-minus bit DONE - tool: halui.tool.number u32 //current selected tool @@ -304,6 +313,9 @@ DONE: - spindle-override ARRAY(hal_bit_t,jog_minus,EMCMOT_MAX_JOINTS+1) /* pin to jog in positive direction */ \ ARRAY(hal_bit_t,jog_plus,EMCMOT_MAX_JOINTS+1) /* pin to jog in negative direction */ \ ARRAY(hal_float_t,jog_analog,EMCMOT_MAX_JOINTS+1) /* pin for analog jogging (-1..0..1) */ \ + ARRAY(hal_float_t,jog_increment,EMCMOT_MAX_JOINTS+1) /* Incremental jogging */ \ + ARRAY(hal_bit_t,jog_increment_plus,EMCMOT_MAX_JOINTS+1) /* Incremental jogging, positive direction */ \ + ARRAY(hal_bit_t,jog_increment_minus,EMCMOT_MAX_JOINTS+1) /* Incremental jogging, negative direction */ \ FIELD(hal_float_t,jog_deadband) /* pin for setting the jog analog deadband (where not to move) */ \ \ FIELD(hal_s32_t,mv_counts) /* pin for the Max Velocity counting */ \ @@ -950,6 +962,12 @@ int halui_hal_init(void) if (retval < 0) return retval; retval = hal_pin_float_newf(HAL_IN, &(halui_data->jog_analog[joint]), comp_id, "halui.jog.%d.analog", joint); if (retval < 0) return retval; + retval = hal_pin_float_newf(HAL_IN, &(halui_data->jog_increment[joint]), comp_id, "halui.jog.%d.increment", joint); + if (retval < 0) return retval; + retval = hal_pin_bit_newf(HAL_IN, &(halui_data->jog_increment_plus[joint]), comp_id, "halui.jog.%d.increment-plus", joint); + if (retval < 0) return retval; + retval = hal_pin_bit_newf(HAL_IN, &(halui_data->jog_increment_minus[joint]), comp_id, "halui.jog.%d.increment-minus", joint); + if (retval < 0) return retval; } retval = hal_pin_bit_newf(HAL_IN, &(halui_data->joint_home[num_axes]), comp_id, "halui.joint.selected.home"); @@ -960,6 +978,12 @@ int halui_hal_init(void) if (retval < 0) return retval; retval = hal_pin_bit_newf(HAL_IN, &(halui_data->jog_minus[num_axes]), comp_id, "halui.jog.selected.minus"); if (retval < 0) return retval; + retval = hal_pin_float_newf(HAL_IN, &(halui_data->jog_increment[num_axes]), comp_id, "halui.jog.selected.increment"); + if (retval < 0) return retval; + retval = hal_pin_bit_newf(HAL_IN, &(halui_data->jog_increment_plus[num_axes]), comp_id, "halui.jog.selected.increment-plus"); + if (retval < 0) return retval; + retval = hal_pin_bit_newf(HAL_IN, &(halui_data->jog_increment_minus[num_axes]), comp_id, "halui.jog.selected.increment-minus"); + if (retval < 0) return retval; retval = halui_export_pin_IN_float(&(halui_data->jog_speed), "halui.jog-speed"); if (retval < 0) return retval; retval = halui_export_pin_IN_float(&(halui_data->jog_deadband), "halui.jog-deadband"); @@ -1404,6 +1428,29 @@ static int sendJogCont(int axis, double } +static int sendJogInc(int axis, double speed, double inc) +{ + EMC_AXIS_INCR_JOG emc_axis_jog_msg; + + if ((emcStatus->task.state != EMC_TASK_STATE_ON) || (emcStatus->task.mode != EMC_TASK_MODE_MANUAL)) + return -1; + + if (axis < 0 || axis >= EMC_AXIS_MAX) + return -1; + + if (emcStatus->motion.traj.mode == EMC_TRAJ_MODE_TELEOP) + return -1; + + emc_axis_jog_msg.serial_number = ++emcCommandSerialNumber; + emc_axis_jog_msg.axis = axis; + emc_axis_jog_msg.vel = speed / 60.0; + emc_axis_jog_msg.incr = inc; + emcCommandBuffer->write(emc_axis_jog_msg); + + return emcCommandWaitReceived(emcCommandSerialNumber); +} + + static int sendFeedOverride(double override) { EMC_TRAJ_SET_SCALE emc_traj_set_scale_msg; @@ -1572,11 +1619,17 @@ static void hal_init_pins() *(halui_data->jog_minus[joint]) = old_halui_data.jog_minus[joint] = 0; *(halui_data->jog_plus[joint]) = old_halui_data.jog_plus[joint] = 0; *(halui_data->jog_analog[joint]) = old_halui_data.jog_analog[joint] = 0; + *(halui_data->jog_increment[joint]) = old_halui_data.jog_increment[joint] = 0.0; + *(halui_data->jog_increment_plus[joint]) = old_halui_data.jog_increment_plus[joint] = 0; + *(halui_data->jog_increment_minus[joint]) = old_halui_data.jog_increment_minus[joint] = 0; } *(halui_data->joint_home[num_axes]) = old_halui_data.joint_home[num_axes] = 0; *(halui_data->jog_minus[num_axes]) = old_halui_data.jog_minus[num_axes] = 0; *(halui_data->jog_plus[num_axes]) = old_halui_data.jog_plus[num_axes] = 0; + *(halui_data->jog_increment[num_axes]) = old_halui_data.jog_increment[num_axes] = 0.0; + *(halui_data->jog_increment_plus[num_axes]) = old_halui_data.jog_increment_plus[num_axes] = 0; + *(halui_data->jog_increment_minus[num_axes]) = old_halui_data.jog_increment_minus[num_axes] = 0; *(halui_data->jog_deadband) = 0.2; *(halui_data->jog_speed) = 0; @@ -1840,7 +1893,19 @@ static void check_hal_changes() sendJogStop(joint); old_halui_data.jog_analog[joint] = floatt; } - + + bit = new_halui_data.jog_increment_plus[joint]; + if (bit != old_halui_data.jog_increment_plus[joint]) { + if (bit) + sendJogInc(joint, new_halui_data.jog_speed, new_halui_data.jog_increment[joint]); + } + + bit = new_halui_data.jog_increment_minus[joint]; + if (bit != old_halui_data.jog_increment_minus[joint]) { + if (bit) + sendJogInc(joint, new_halui_data.jog_speed, -(new_halui_data.jog_increment[joint])); + } + // check to see if another joint has been selected bit = new_halui_data.joint_nr_select[joint]; if (bit != old_halui_data.joint_nr_select[joint]) { @@ -1888,6 +1953,20 @@ static void check_hal_changes() old_halui_data.jog_plus[num_axes] = bit; } + bit = new_halui_data.jog_increment_plus[num_axes]; + js = new_halui_data.joint_selected; + if (bit != old_halui_data.jog_increment_plus[num_axes]) { + if (bit) + sendJogInc(js, new_halui_data.jog_speed, new_halui_data.jog_increment[num_axes]); + } + + bit = new_halui_data.jog_increment_minus[num_axes]; + js = new_halui_data.joint_selected; + if (bit != old_halui_data.jog_increment_minus[num_axes]) { + if (bit) + sendJogInc(js, new_halui_data.jog_speed, -(new_halui_data.jog_increment[num_axes])); + } + for(int n = 0; n < num_mdi_commands; n++) { if (check_bit_changed(new_halui_data.mdi_commands[n], old_halui_data.mdi_commands[n]) != 0) sendMdiCommand(n); -- Greetings Michael. ------------------------------------------------------------------------------ Simplify data backup and recovery for your virtual environment with vRanger. Installation's a snap, and flexible recovery options mean your data is safe, secure and there when you need it. Discover what all the cheering's about. Get your free trial download today. http://p.sf.net/sfu/quest-dev2dev2 _______________________________________________ Emc-developers mailing list Emc-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/emc-developers