📄 interp_cycles.cc
字号:
variables represent the first axis of the selected plane, the secondaxis of the selected plane, and third axis which is perpendicular tothe selected plane. In this function aa represents x, bb representsy, and cc represents z. This usage makes it possible to have only oneversion of each of the cycle functions. The cycle_traverse andcycle_feed functions help accomplish this.The height of the retract move at the end of each repeat of a cycle isdetermined by the setting of the retract_mode: either to the rposition (if the retract_mode is R_PLANE) or to the originalz-position (if that is above the r position and the retract_mode isnot R_PLANE). This is a slight departure from [NCMS, page 98], whichdoes not require checking that the original z-position is above r.The rotary axes may not move during a canned cycle.*/int Interp::convert_cycle_xy(int motion, //!< a g-code between G_81 and G_89, a canned cycle block_pointer block, //!< pointer to a block of RS274 instructions setup_pointer settings) //!< pointer to machine settings { static char name[] = "convert_cycle_xy"; double aa; double aa_increment; double bb; double bb_increment; double cc; double clear_cc; double i; double j; double k; double old_cc; CANON_PLANE plane; double r; int repeat; CANON_MOTION_MODE save_mode; double save_tolerance; int status; plane = CANON_PLANE_XY; if (settings->motion_mode != motion) { CHK((block->z_flag == OFF), NCE_Z_VALUE_UNSPECIFIED_IN_XY_PLANE_CANNED_CYCLE); } block->z_number = block->z_flag == ON ? block->z_number : settings->cycle_cc; old_cc = settings->current_z; if (settings->distance_mode == MODE_ABSOLUTE) { aa_increment = 0.0; bb_increment = 0.0; r = block->r_number; cc = block->z_number; aa = block->x_flag == ON ? block->x_number : settings->current_x; bb = block->y_flag == ON ? block->y_number : settings->current_y; } else if (settings->distance_mode == MODE_INCREMENTAL) { aa_increment = block->x_number; bb_increment = block->y_number; r = (block->r_number + old_cc); cc = (r + block->z_number); /* [NCMS, page 98] */ aa = settings->current_x; bb = settings->current_y; } else ERM(NCE_BUG_DISTANCE_MODE_NOT_G90_OR_G91); CHK((r < cc), NCE_R_LESS_THAN_Z_IN_CYCLE_IN_XY_PLANE); if (old_cc < r) { STRAIGHT_TRAVERSE(settings->current_x, settings->current_y, r, settings->AA_current, settings->BB_current, settings->CC_current); old_cc = r; } clear_cc = (settings->retract_mode == R_PLANE) ? r : old_cc; save_mode = GET_EXTERNAL_MOTION_CONTROL_MODE(); save_tolerance = GET_EXTERNAL_MOTION_CONTROL_TOLERANCE(); if (save_mode != CANON_EXACT_PATH) SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH, 0); switch (motion) { case G_81: CYCLE_MACRO(convert_cycle_g81(CANON_PLANE_XY, aa, bb, clear_cc, cc)) break; case G_82: CHK(((settings->motion_mode != G_82) && (block->p_number == -1.0)), NCE_DWELL_TIME_P_WORD_MISSING_WITH_G82); block->p_number = block->p_number == -1.0 ? settings->cycle_p : block->p_number; CYCLE_MACRO(convert_cycle_g82(CANON_PLANE_XY, aa, bb, clear_cc, cc, block->p_number)) settings->cycle_p = block->p_number; break; case G_83: CHK(((settings->motion_mode != G_83) && (block->q_number == -1.0)), NCE_Q_WORD_MISSING_WITH_G83); block->q_number = block->q_number == -1.0 ? settings->cycle_q : block->q_number; CYCLE_MACRO(convert_cycle_g83(CANON_PLANE_XY, aa, bb, r, clear_cc, cc, block->q_number)) settings->cycle_q = block->q_number; break; case G_84: CYCLE_MACRO(convert_cycle_g84(CANON_PLANE_XY, aa, bb, clear_cc, cc, settings->spindle_turning, settings->speed_feed_mode)) break; case G_85: CYCLE_MACRO(convert_cycle_g85(CANON_PLANE_XY, aa, bb, clear_cc, cc)) break; case G_86: CHK(((settings->motion_mode != G_86) && (block->p_number == -1.0)), NCE_DWELL_TIME_P_WORD_MISSING_WITH_G86); block->p_number = block->p_number == -1.0 ? settings->cycle_p : block->p_number; CYCLE_MACRO(convert_cycle_g86(CANON_PLANE_XY, aa, bb, clear_cc, cc, block->p_number, settings->spindle_turning)) settings-> cycle_p = block->p_number; break; case G_87: if (settings->motion_mode != G_87) { CHK((block->i_flag == OFF), NCE_I_WORD_MISSING_WITH_G87); CHK((block->j_flag == OFF), NCE_J_WORD_MISSING_WITH_G87); CHK((block->k_flag == OFF), NCE_K_WORD_MISSING_WITH_G87); } i = block->i_flag == ON ? block->i_number : settings->cycle_i; j = block->j_flag == ON ? block->j_number : settings->cycle_j; k = block->k_flag == ON ? block->k_number : settings->cycle_k; settings->cycle_i = i; settings->cycle_j = j; settings->cycle_k = k; if (settings->distance_mode == MODE_INCREMENTAL) { k = (cc + k); /* k always absolute in function call below */ } CYCLE_MACRO(convert_cycle_g87(CANON_PLANE_XY, aa, (aa + i), bb, (bb + j), r, clear_cc, k, cc, settings->spindle_turning)) break; case G_88: CHK(((settings->motion_mode != G_88) && (block->p_number == -1.0)), NCE_DWELL_TIME_P_WORD_MISSING_WITH_G88); block->p_number = block->p_number == -1.0 ? settings->cycle_p : block->p_number; CYCLE_MACRO(convert_cycle_g88(CANON_PLANE_XY, aa, bb, cc, block->p_number, settings->spindle_turning)) settings-> cycle_p = block->p_number; break; case G_89: CHK(((settings->motion_mode != G_89) && (block->p_number == -1.0)), NCE_DWELL_TIME_P_WORD_MISSING_WITH_G89); block->p_number = block->p_number == -1.0 ? settings->cycle_p : block->p_number; CYCLE_MACRO(convert_cycle_g89(CANON_PLANE_XY, aa, bb, clear_cc, cc, block->p_number)) settings->cycle_p = block->p_number; break; default: ERM(NCE_BUG_FUNCTION_SHOULD_NOT_HAVE_BEEN_CALLED); } settings->current_x = aa; /* CYCLE_MACRO updates aa and bb */ settings->current_y = bb; settings->current_z = clear_cc; settings->cycle_cc = block->z_number; if (save_mode != CANON_EXACT_PATH) SET_MOTION_CONTROL_MODE(save_mode, save_tolerance); return INTERP_OK;}/****************************************************************************//*! convert_cycle_yzReturned Value: int If any of the specific functions called returns an error code, this returns that code. If any of the following errors occur, this returns the error code shown. Otherwise, it returns INTERP_OK. 1. The x-value is not given the first time this code is called after some other motion mode has been in effect: NCE_X_VALUE_UNSPECIFIED_IN_YZ_PLANE_CANNED_CYCLE 2. The r clearance plane is below the bottom_x: NCE_R_LESS_THAN_X_IN_CYCLE_IN_YZ_PLANE 3. the distance mode is neither absolute or incremental: NCE_BUG_DISTANCE_MODE_NOT_G90_OR_G91 4. G82, G86, G88, or G89 is called when it is not already in effect, and no p number is in the block: NCE_DWELL_TIME_P_WORD_MISSING_WITH_G82 NCE_DWELL_TIME_P_WORD_MISSING_WITH_G86 NCE_DWELL_TIME_P_WORD_MISSING_WITH_G88 NCE_DWELL_TIME_P_WORD_MISSING_WITH_G89 5. G83 is called when it is not already in effect, and no q number is in the block: NCE_Q_WORD_MISSING_WITH_G83 6. G87 is called when it is not already in effect, and any of the i number, j number, or k number is missing: NCE_I_WORD_MISSING_WITH_G87 NCE_J_WORD_MISSING_WITH_G87 NCE_K_WORD_MISSING_WITH_G87 7. the G code is not between G_81 and G_89. NCE_BUG_FUNCTION_SHOULD_NOT_HAVE_BEEN_CALLEDSide effects: A number of moves are made to execute a canned cycle.Called by: convert_cycleSee the documentation of convert_cycle_xy. This function is entirelysimilar. In this function aa represents y, bb represents z, and ccrepresents x.The CYCLE_MACRO is defined just before the convert_cycle_xy function.Tool length offsets work only when the tool axis is parallel to theZ-axis, so if this function is used, tool length offsets should beturned off, and the NC code written to take tool length into account.*/int Interp::convert_cycle_yz(int motion, //!< a g-code between G_81 and G_89, a canned cycle block_pointer block, //!< pointer to a block of RS274/NGC instructions setup_pointer settings) //!< pointer to machine settings { static char name[] = "convert_cycle_yz"; double aa; double aa_increment; double bb; double bb_increment; double cc; double clear_cc; double i; double j; double k; double old_cc; CANON_PLANE plane; double r; int repeat; CANON_MOTION_MODE save_mode; double save_tolerance; //save the current tolerance, to restore it lateron int status; plane = CANON_PLANE_YZ; if (settings->motion_mode != motion) { CHK((block->x_flag == OFF), NCE_X_VALUE_UNSPECIFIED_IN_YZ_PLANE_CANNED_CYCLE); } block->x_number = block->x_flag == ON ? block->x_number : settings->cycle_cc; old_cc = settings->current_x; if (settings->distance_mode == MODE_ABSOLUTE) { aa_increment = 0.0; bb_increment = 0.0; r = block->r_number; cc = block->x_number; aa = block->y_flag == ON ? block->y_number : settings->current_y; bb = block->z_flag == ON ? block->z_number : settings->current_z; } else if (settings->distance_mode == MODE_INCREMENTAL) { aa_increment = block->y_number; bb_increment = block->z_number; r = (block->r_number + old_cc); cc = (r + block->x_number); /* [NCMS, page 98] */ aa = settings->current_y; bb = settings->current_z; } else ERM(NCE_BUG_DISTANCE_MODE_NOT_G90_OR_G91); CHK((r < cc), NCE_R_LESS_THAN_X_IN_CYCLE_IN_YZ_PLANE); if (old_cc < r) { STRAIGHT_TRAVERSE(r, settings->current_y, settings->current_z, settings->AA_current, settings->BB_current, settings->CC_current); old_cc = r; } clear_cc = (settings->retract_mode == R_PLANE) ? r : old_cc; save_mode = GET_EXTERNAL_MOTION_CONTROL_MODE(); save_tolerance = GET_EXTERNAL_MOTION_CONTROL_TOLERANCE(); if (save_mode != CANON_EXACT_PATH) SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH, 0); switch (motion) { case G_81: CYCLE_MACRO(convert_cycle_g81(CANON_PLANE_YZ, aa, bb, clear_cc, cc)) break; case G_82: CHK(((settings->motion_mode != G_82) && (block->p_number == -1.0)), NCE_DWELL_TIME_P_WORD_MISSING_WITH_G82); block->p_number = block->p_number == -1.0 ? settings->cycle_p : block->p_number; CYCLE_MACRO(convert_cycle_g82(CANON_PLANE_YZ, aa, bb, clear_cc, cc, block->p_number)) settings->cycle_p = block->p_number; break; case G_83: CHK(((settings->motion_mode != G_83) && (block->q_number == -1.0)), NCE_Q_WORD_MISSING_WITH_G83); block->q_number = block->q_number == -1.0 ? settings->cycle_q : block->q_number; CYCLE_MACRO(convert_cycle_g83(CANON_PLANE_YZ, aa, bb, r, clear_cc, cc, block->q_number)) settings->cycle_q = block->q_number; break; case G_84: CYCLE_MACRO(convert_cycle_g84(CANON_PLANE_YZ, aa, bb, clear_cc, cc, settings->spindle_turning, settings->speed_feed_mode)) break; case G_85: CYCLE_MACRO(convert_cycle_g85(CANON_PLANE_YZ, aa, bb, clear_cc, cc)) break; case G_86: CHK(((settings->motion_mode != G_86) && (block->p_number == -1.0)), NCE_DWELL_TIME_P_WORD_MISSING_WITH_G86); block->p_number = block->p_number == -1.0 ? settings->cycle_p : block->p_number; CYCLE_MACRO(convert_cycle_g86(CANON_PLANE_YZ, aa, bb, clear_cc, cc, block->p_number, settings->spindle_turning)) settings-> cycle_p = block->p_number; break; case G_87: if (settings->motion_mode != G_87) { CHK((block->i_flag == OFF), NCE_I_WORD_MISSING_WITH_G87); CHK((block->j_flag == OFF), NCE_J_WORD_MISSING_WITH_G87); CHK((block->k_flag == OFF), NCE_K_WORD_MISSING_WITH_G87); } i = block->i_flag == ON ? block->i_number : settings->cycle_i; j = block->j_flag == ON ? block->j_number : settings->cycle_j; k = block->k_flag == ON ? block->k_number : settings->cycle_k; settings->cycle_i = i; settings->cycle_j = j; settings->cycle_k = k; if (settings->distance_mode == MODE_INCREMENTAL) { i = (cc + i); /* i always absolute in function call below */ }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -