interp_convert.cc

来自「CNC 的开放码,EMC2 V2.2.8版」· CC 代码 · 共 1,654 行 · 第 1/5 页

CC
1,654
字号
    if(settings->plane == CANON_PLANE_XZ) {      ARC_FEED(ztrans(settings, end[1]), xtrans(settings, end[0]), ztrans(settings, center[1]), xtrans(settings, center[0]),               -turn, end[2], AA_end, BB_end, CC_end, u, v, w);    } else if (settings->plane == CANON_PLANE_XY) {      ARC_FEED(end[0], end[1], center[0], center[1], turn, end[2],               AA_end, BB_end, CC_end, u, v, w);    }  }  if(settings->plane == CANON_PLANE_XZ) {    settings->current_x = end[0];    settings->current_z = end[1];    settings->current_y = end[2];  } else if (settings->plane == CANON_PLANE_XY) {    settings->current_x = end[0];    settings->current_y = end[1];    settings->current_z = end[2];  }  settings->AA_current = AA_end;  settings->BB_current = BB_end;  settings->CC_current = CC_end;  settings->u_current = u;  settings->v_current = v;  settings->w_current = w;  return INTERP_OK;}/****************************************************************************//*! convert_axis_offsetsReturned Value: int   If any of the following errors occur, this returns the error code shown.   Otherwise, it returns INTERP_OK.   1. The function is called when cutter radius compensation is on:      NCE_CANNOT_CHANGE_AXIS_OFFSETS_WITH_CUTTER_RADIUS_COMP   2. The g_code argument is not G_92, G_92_1, G_92_2, or G_92_3      NCE_BUG_CODE_NOT_IN_G92_SERIESSide effects:   SET_PROGRAM_ORIGIN is called, and the coordinate   values for the axis offsets are reset. The coordinates of the   current point are reset. Parameters may be set.Called by: convert_modal_0.The action of G92 is described in [NCMS, pages 10 - 11] and {Fanuc,pages 61 - 63]. [NCMS] is ambiguous about the intent, but [Fanuc]is clear. When G92 is executed, an offset of the origin is calculatedso that the coordinates of the current point with respect to the movedorigin are as specified on the line containing the G92. If an axisis not mentioned on the line, the coordinates of the current pointare not changed. The execution of G92 results in an axis offset beingcalculated and saved for each of the six axes, and the axis offsetsare always used when motion is specified with respect to absolutedistance mode using any of the nine coordinate systems (those designatedby G54 - G59.3). Thus all nine coordinate systems are affected by G92.Being in incremental distance mode has no effect on the action of G92in this implementation. [NCMS] is not explicit about this, but it isimplicit in the second sentence of [Fanuc, page 61].The offset is the amount the origin must be moved so that thecoordinate of the controlled point has the specified value. Forexample, if the current point is at X=4 in the currently specifiedcoordinate system and the current X-axis offset is zero, then "G92 x7"causes the X-axis offset to be reset to -3.Since a non-zero offset may be already be in effect when the G92 iscalled, that must be taken into account.In addition to causing the axis offset values in the _setup model to beset, G92 sets parameters 5211 to 5216 to the x,y,z,a,b,c axis offsets.The action of G92.2 is described in [NCMS, page 12]. There is noequivalent command in [Fanuc]. G92.2 resets axis offsets to zero.G92.1, also included in [NCMS, page 12] (but the usage here differsslightly from the spec), is like G92.2, except that it also causesthe axis offset parameters to be set to zero, whereas G92.2 does notzero out the parameters.G92.3 is not in [NCMS]. It sets the axis offset values to the valuesgiven in the parameters.*/int Interp::convert_axis_offsets(int g_code,     //!< g_code being executed (must be in G_92 series)                                block_pointer block,    //!< pointer to a block of RS274/NGC instructions                                  setup_pointer settings) //!< pointer to machine settings                   {  static char name[] = "convert_axis_offsets";  double *pars;                 /* short name for settings->parameters            */  CHK((settings->cutter_comp_side != OFF),      /* not "== ON" */      NCE_CANNOT_CHANGE_AXIS_OFFSETS_WITH_CUTTER_RADIUS_COMP);  pars = settings->parameters;  if (g_code == G_92) {    if (block->x_flag == ON) {      settings->axis_offset_x =        (settings->current_x + settings->axis_offset_x - block->x_number);      settings->current_x = block->x_number;    }    if (block->y_flag == ON) {      settings->axis_offset_y =        (settings->current_y + settings->axis_offset_y - block->y_number);      settings->current_y = block->y_number;    }    if (block->z_flag == ON) {      settings->axis_offset_z =        (settings->current_z + settings->axis_offset_z - block->z_number);      settings->current_z = block->z_number;    }    if (block->a_flag == ON) {      settings->AA_axis_offset = (settings->AA_current +                                  settings->AA_axis_offset - block->a_number);      settings->AA_current = block->a_number;    }    if (block->b_flag == ON) {      settings->BB_axis_offset = (settings->BB_current +                                  settings->BB_axis_offset - block->b_number);      settings->BB_current = block->b_number;    }    if (block->c_flag == ON) {      settings->CC_axis_offset = (settings->CC_current +                                  settings->CC_axis_offset - block->c_number);      settings->CC_current = block->c_number;    }    if (block->u_flag == ON) {      settings->u_axis_offset = (settings->u_current +                                 settings->u_axis_offset - block->u_number);      settings->u_current = block->u_number;    }    if (block->v_flag == ON) {      settings->v_axis_offset = (settings->v_current +                                 settings->v_axis_offset - block->v_number);      settings->v_current = block->v_number;    }    if (block->w_flag == ON) {      settings->w_axis_offset = (settings->w_current +                                 settings->w_axis_offset - block->w_number);      settings->w_current = block->w_number;    }    SET_ORIGIN_OFFSETS(settings->origin_offset_x + settings->axis_offset_x,                       settings->origin_offset_y + settings->axis_offset_y,                       settings->origin_offset_z + settings->axis_offset_z,                       (settings->AA_origin_offset +                        settings->AA_axis_offset),                       (settings->BB_origin_offset +                        settings->BB_axis_offset),                       (settings->CC_origin_offset +                        settings->CC_axis_offset),                       (settings->u_origin_offset +                        settings->u_axis_offset),                       (settings->v_origin_offset +                        settings->v_axis_offset),                       (settings->w_origin_offset +                        settings->w_axis_offset));        pars[5211] = PROGRAM_TO_USER_LEN(settings->axis_offset_x);    pars[5212] = PROGRAM_TO_USER_LEN(settings->axis_offset_y);    pars[5213] = PROGRAM_TO_USER_LEN(settings->axis_offset_z);    pars[5214] = PROGRAM_TO_USER_ANG(settings->AA_axis_offset);    pars[5215] = PROGRAM_TO_USER_ANG(settings->BB_axis_offset);    pars[5216] = PROGRAM_TO_USER_ANG(settings->CC_axis_offset);    pars[5217] = PROGRAM_TO_USER_LEN(settings->u_axis_offset);    pars[5218] = PROGRAM_TO_USER_LEN(settings->v_axis_offset);    pars[5219] = PROGRAM_TO_USER_LEN(settings->w_axis_offset);  } else if ((g_code == G_92_1) || (g_code == G_92_2)) {    settings->current_x = settings->current_x + settings->axis_offset_x;    settings->current_y = settings->current_y + settings->axis_offset_y;    settings->current_z = settings->current_z + settings->axis_offset_z;    settings->AA_current = (settings->AA_current + settings->AA_axis_offset);    settings->BB_current = (settings->BB_current + settings->BB_axis_offset);    settings->CC_current = (settings->CC_current + settings->CC_axis_offset);    settings->u_current = (settings->u_current + settings->u_axis_offset);    settings->v_current = (settings->v_current + settings->v_axis_offset);    settings->w_current = (settings->w_current + settings->w_axis_offset);    SET_ORIGIN_OFFSETS(settings->origin_offset_x,                       settings->origin_offset_y, settings->origin_offset_z,                       settings->AA_origin_offset,                       settings->BB_origin_offset,                       settings->CC_origin_offset,                       settings->u_origin_offset,                       settings->v_origin_offset,                       settings->w_origin_offset);    settings->axis_offset_x = 0.0;    settings->axis_offset_y = 0.0;    settings->axis_offset_z = 0.0;    settings->AA_axis_offset = 0.0;    settings->BB_axis_offset = 0.0;    settings->CC_axis_offset = 0.0;    settings->u_axis_offset = 0.0;    settings->v_axis_offset = 0.0;    settings->w_axis_offset = 0.0;    if (g_code == G_92_1) {      pars[5211] = 0.0;      pars[5212] = 0.0;      pars[5213] = 0.0;      pars[5214] = 0.0;      pars[5215] = 0.0;      pars[5216] = 0.0;      pars[5217] = 0.0;      pars[5218] = 0.0;      pars[5219] = 0.0;    }  } else if (g_code == G_92_3) {    settings->current_x =      settings->current_x + settings->axis_offset_x - USER_TO_PROGRAM_LEN(pars[5211]);    settings->current_y =      settings->current_y + settings->axis_offset_y - USER_TO_PROGRAM_LEN(pars[5212]);    settings->current_z =      settings->current_z + settings->axis_offset_z - USER_TO_PROGRAM_LEN(pars[5213]);    settings->AA_current =      settings->AA_current + settings->AA_axis_offset - USER_TO_PROGRAM_ANG(pars[5214]);    settings->BB_current =      settings->BB_current + settings->BB_axis_offset - USER_TO_PROGRAM_ANG(pars[5215]);    settings->CC_current =      settings->CC_current + settings->CC_axis_offset - USER_TO_PROGRAM_ANG(pars[5216]);    settings->u_current =      settings->u_current + settings->u_axis_offset - USER_TO_PROGRAM_LEN(pars[5217]);    settings->v_current =      settings->v_current + settings->v_axis_offset - USER_TO_PROGRAM_LEN(pars[5218]);    settings->w_current =      settings->w_current + settings->w_axis_offset - USER_TO_PROGRAM_LEN(pars[5219]);    settings->axis_offset_x = USER_TO_PROGRAM_LEN(pars[5211]);    settings->axis_offset_y = USER_TO_PROGRAM_LEN(pars[5212]);    settings->axis_offset_z = USER_TO_PROGRAM_LEN(pars[5213]);    settings->AA_axis_offset = USER_TO_PROGRAM_ANG(pars[5214]);    settings->BB_axis_offset = USER_TO_PROGRAM_ANG(pars[5215]);    settings->CC_axis_offset = USER_TO_PROGRAM_ANG(pars[5216]);    settings->u_axis_offset = USER_TO_PROGRAM_LEN(pars[5217]);    settings->v_axis_offset = USER_TO_PROGRAM_LEN(pars[5218]);    settings->w_axis_offset = USER_TO_PROGRAM_LEN(pars[5219]);    SET_ORIGIN_OFFSETS(settings->origin_offset_x + settings->axis_offset_x,                       settings->origin_offset_y + settings->axis_offset_y,                       settings->origin_offset_z + settings->axis_offset_z,                       (settings->AA_origin_offset +                        settings->AA_axis_offset),                       (settings->BB_origin_offset +                        settings->BB_axis_offset),                       (settings->CC_origin_offset +                        settings->CC_axis_offset),                       (settings->u_origin_offset +                        settings->u_axis_offset),                       (settings->v_origin_offset +                        settings->v_axis_offset),                       (settings->w_origin_offset +                        settings->w_axis_offset));  } else    ERM(NCE_BUG_CODE_NOT_IN_G92_SERIES);  return INTERP_OK;}int Interp::convert_param_comment(char *comment, char *expanded, int len){    static char name[] = "convert_param_comment";    int i;    char param[LINELEN+1];    int paramNumber;    int stat;    double value;    char valbuf[30]; // max double length + room    char *v;    int found;    while(*comment)    {        if(*comment == '#')        {            found = 0;            logDebug("a parameter");            // skip over the '#'            comment++;            CHK((0 == *comment), NCE_NAMED_PARAMETER_NOT_TERMINATED);            if(isdigit(*comment))  // is this numeric param?            {                logDebug("numeric parameter");                for(i=0; isdigit(*comment)&& (i<LINELEN); i++)                {                    param[i] = *comment++;                }                param[i] = 0;                paramNumber = atoi(param);                if((paramNumber >= 0) &&                   (paramNumber < RS274NGC_MAX_PARAMETERS))                {                    value = _setup.parameters[paramNumber];                    found = 1;                }            }            else if(*comment == '<')            {                logDebug("name parameter");                // this is a name parameter                // skip over the '<'                comment++;                CHK((0 == *comment), NCE_NAMED_PARAMETER_NOT_TERMINATED);                for(i=0; (')' != *comment) &&                        (i<LINELEN) && (0 != *comment);)                {                    if('>' == *comment)                    {                        break;     // done                    }                    if(isspace(*comment)) // skip space inside the param                    {                        comment++;                        continue;                    }                    else                    {                        param[i] = *comment++;                        i++;                    }                }                if('>' != *comment)                {                    ERM(NCE_NAMED_PARAMETER_NOT_TERMINATED);                    logDebug("parameter not terminated");                }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?