#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>#include <ctype.h>#include "canon.hh"#include "rs274ngc.hh"#include "inifile.h"Include dependency graph for rs274ngc.cc:

Go to the source code of this file.
Defines | |
| #define | DEBUG_EMC |
| #define | G83_RAPID_DELTA 0.010 |
| #define | CYCLE_MACRO(call) |
Typedefs | |
| typedef int(* | _function_pointer )(char *, int *, block_pointer, double *) |
Functions | |
| int | read_real_value (char *line, int *counter, double *double_ptr, double *parameters) |
| int | read_real_expression (char *line, int *counter, double *hold2, double *parameters) |
| int | utility_error_number (char *message, char *error_array[], int index) |
| int | execute_binary1 (double *left, int operation, double *right) |
| int | execute_binary2 (double *left, int operation, double *right) |
| int | execute_unary (double *double_ptr, int operation) |
| int | read_atan (char *line, int *counter, double *double_ptr, double *parameters) |
| int | read_integer_value (char *line, int *counter, int *integer_ptr, double *parameters) |
| int | read_operation (char *line, int *counter, int *operation) |
| int | read_operation_unary (char *line, int *counter, int *operation) |
| double | utility_find_turn (double x1, double y1, double center_x, double center_y, int turn, double x2, double y2) |
| int | arc_data_comp_ijk (int move, int side, double tool_radius, double current_x, double current_y, double end_x, double end_y, double i_number, double j_number, double *center_x, double *center_y, int *turn, double tolerance) |
| int | arc_data_comp_r (int move, int side, double tool_radius, double current_x, double current_y, double end_x, double end_y, double big_radius, double *center_x, double *center_y, int *turn) |
| int | arc_data_ijk (int move, double current_x, double current_y, double end_x, double end_y, double i_number, double j_number, double *center_x, double *center_y, int *turn, double tolerance) |
| int | arc_data_r (int move, double current_x, double current_y, double end_x, double end_y, double radius, double *center_x, double *center_y, int *turn) |
| int | read_parameter (char *line, int *counter, double *double_ptr, double *parameters) |
| int | read_real_number (char *line, int *counter, double *double_ptr) |
| int | read_unary (char *line, int *counter, double *double_ptr, double *parameters) |
| double | utility_find_arc_length (double x1, double y1, double z1, double center_x, double center_y, int turn, double x2, double y2, double z2) |
| double | utility_find_straight_length (double x2, double y2, double z2, double x1, double y1, double z1) |
| int | convert_arc_comp1 (int move, block_pointer block, setup_pointer settings, double end_x, double end_y, double end_z) |
| int | convert_arc_comp2 (int move, block_pointer block, setup_pointer settings, double end_x, double end_y, double end_z) |
| int | convert_arc_xy (int move, block_pointer block, setup_pointer settings, double end_x, double end_y, double end_z) |
| int | convert_arc_yz (int move, block_pointer block, setup_pointer settings, double end_y, double end_z, double end_x) |
| int | convert_arc_zx (int move, block_pointer block, setup_pointer settings, double end_z, double end_x, double end_y) |
| int | convert_cycle_g81 (double x, double y, double clear_z, double bottom_z) |
| int | convert_cycle_g82 (double x, double y, double clear_z, double bottom_z, double dwell) |
| int | convert_cycle_g83 (double x, double y, double r, double clear_z, double bottom_z, double delta) |
| int | convert_cycle_g84 (double x, double y, double clear_z, double bottom_z, CANON_DIRECTION direction, CANON_SPEED_FEED_MODE mode) |
| int | convert_cycle_g85 (double x, double y, double clear_z, double bottom_z) |
| int | convert_cycle_g86 (double x, double y, double clear_z, double bottom_z, double dwell, CANON_DIRECTION direction) |
| int | convert_cycle_g87 (double x, double offset_x, double y, double offset_y, double r, double clear_z, double middle_z, double bottom_z, CANON_DIRECTION direction) |
| int | convert_cycle_g88 (double x, double y, double bottom_z, double dwell, CANON_DIRECTION direction) |
| int | convert_cycle_g89 (double x, double y, double clear_z, double bottom_z, double dwell) |
| int | convert_straight_comp1 (setup_pointer settings, double px, double py, double end_z) |
| int | convert_straight_comp2 (setup_pointer settings, double program_end_x, double program_end_y, double end_z) |
| int | read_integer_unsigned (char *line, int *counter, int *integer_ptr) |
| int | utility_find_ends (block_pointer block, setup_pointer settings, double *px, double *py, double *pz) |
| int | convert_arc (int move, block_pointer block, setup_pointer settings) |
| int | convert_axis_offsets (int g_code, block_pointer block, setup_pointer settings) |
| int | convert_cutter_compensation_off (setup_pointer settings) |
| int | convert_cutter_compensation_on (int side, block_pointer block, setup_pointer settings) |
| int | convert_cycle (int motion, block_pointer block, setup_pointer settings) |
| int | convert_probe (block_pointer block, setup_pointer settings) |
| int | convert_setup (block_pointer block, setup_pointer settings) |
| int | convert_straight (int move, block_pointer block, setup_pointer settings) |
| int | read_comment (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_d (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_f (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_g (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_i (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_j (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_k (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_l (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_m (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_p (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_parameter_setting (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_q (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_r (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_spindle_speed (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_tool (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_tool_length_offset (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_x (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_y (char *line, int *counter, block_pointer block, double *parameters) |
| int | read_z (char *line, int *counter, block_pointer block, double *parameters) |
| int | check_g_codes (block_pointer block, setup_pointer settings) |
| int | check_m_codes (block_pointer block, setup_pointer settings) |
| int | check_other_codes (block_pointer block, setup_pointer settings) |
| int | convert_control_mode (int g_code, block_pointer block, setup_pointer settings) |
| int | convert_coordinate_system (int g_code, block_pointer block, setup_pointer settings) |
| int | convert_cutter_compensation (int g_code, block_pointer block, setup_pointer settings) |
| int | convert_distance_mode (int g_code, block_pointer block, setup_pointer settings) |
| int | convert_dwell (double time) |
| int | convert_length_units (int g_code, setup_pointer settings) |
| int | convert_modal_0 (int code, block_pointer block, setup_pointer settings) |
| int | convert_motion (int motion, block_pointer block, setup_pointer settings) |
| int | convert_retract_mode (int g_code, block_pointer block, setup_pointer settings) |
| int | convert_set_plane (int g_code, block_pointer block, setup_pointer settings) |
| int | convert_tool_change (block_pointer block, setup_pointer settings) |
| int | convert_tool_length_offset (int g_code, block_pointer block, setup_pointer settings) |
| int | read_line_number (char *line, int *counter, block_pointer block) |
| int | read_one_item (char *line, int *counter, block_pointer block, double *parameters) |
| int | check_items (block_pointer block, setup_pointer settings) |
| int | close_and_downcase (char *line) |
| int | convert_comment (char *comment) |
| int | convert_feed_mode (int g_code, block_pointer block, setup_pointer settings) |
| int | convert_feed_rate (block_pointer block, setup_pointer settings) |
| int | convert_g (block_pointer block, setup_pointer settings) |
| int | convert_m (block_pointer block, setup_pointer settings) |
| int | convert_speed (block_pointer block, setup_pointer settings) |
| int | convert_stop (block_pointer block, setup_pointer settings) |
| int | convert_tool_select (block_pointer block, setup_pointer settings) |
| int | init_block (block_pointer block) |
| int | read_items (block_pointer block, char *line, double *parameters) |
| int | utility_enhance_block (block_pointer block, setup_pointer settings) |
| int | write_g_codes (block_pointer block, setup_pointer settings, int line_number, int *gez) |
| int | write_m_codes (block_pointer block, setup_pointer settings, int line_number, int *ems) |
| int | write_settings (block_pointer block, setup_pointer settings, int line_number, double *vals) |
| int | execute_block (block_pointer block, setup_pointer settings, int line_number) |
| int | read_line (char *line, block_pointer block, setup_pointer settings) |
| int | read_text (const char *command, FILE *inport, char *raw_line, char *line, int *length, ON_OFF block_delete) |
| int | set_probe_data (setup_pointer settings) |
| int | rs274ngc_reset () |
| const char * | rs274ngc_command () |
| const char * | rs274ngc_file () |
| int | rs274ngc_line () |
| int | rs274ngc_close () |
| int | rs274ngc_execute (const char *command) |
| int | rs274ngc_exit () |
| int | rs274ngc_synch () |
| int | rs274ngc_init () |
| int | rs274ngc_open (const char *filename) |
| int | rs274ngc_read () |
| int | rs274ngc_load_tool_table () |
| int | rs274ngc_restore_parameters (const char *filename, double parameters[]) |
| restore interpreter variables from file. More... | |
| int | rs274ngc_save_parameters (const char *filename, const double parameters[]) |
| save interpreter variables to file. More... | |
| int | rs274ngc_ini_load (const char *filename) |
| load settings from INI file. More... | |
| int | rs274ngc_active_g_codes (int *codes) |
| int | rs274ngc_active_m_codes (int *codes) |
| int | rs274ngc_active_settings (double *settings) |
Variables | |
| char | ident [] = "$Id: rs274ngc.cc,v 1.4 2000/10/27 20:34:44 terrylr Exp $" |
| setup | _interpreter_settings |
| int _textline | SET_TO |
| char | _interpreter_filename [INTERP_TEXT_SIZE] |
| char | _interpreter_linetext [INTERP_TEXT_SIZE] |
| char | _interpreter_blocktext [INTERP_TEXT_SIZE] |
| FILE *_interpreter_fp SET_TO | NULL |
| int | _interpreter_active_g_codes [RS274NGC_ACTIVE_G_CODES] |
| int | _interpreter_active_m_codes [RS274NGC_ACTIVE_M_CODES] |
| double | _interpreter_active_settings [RS274NGC_ACTIVE_SETTINGS] |
| char | RS274NGC_PARAMETER_FILE [INTERP_TEXT_SIZE] |
|
|
Value: for (repeat SET_TO block->l_number; \ repeat > 0; \ repeat--) \ { \ x SET_TO (x + x_increment); \ y SET_TO (y + y_increment); \ STRAIGHT_TRAVERSE(x, y, old_z); \ if (old_z ISNT r) \ STRAIGHT_TRAVERSE(x, y, r); \ if (call IS RS274NGC_ERROR) \ ERROR_MACRO_PASS(name); \ old_z SET_TO clear_z; \ } Definition at line 3895 of file rs274ngc.cc. |
|
|
Definition at line 110 of file rs274ngc.cc. |
|
|
Definition at line 2721 of file rs274ngc.cc. |
|
|
Definition at line 6632 of file rs274ngc.cc. |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1218 of file rs274ngc.cc. 01232 {
01233 static char name[] SET_TO "arc_data_comp_ijk";
01234 double arc_radius;
01235 double radius2;
01236 *center_x SET_TO (current_x + i_number);
01237 *center_y SET_TO (current_y + j_number);
01238 arc_radius SET_TO hypot((*center_x - current_x), (*center_y - current_y));
01239 radius2 SET_TO hypot((*center_x - end_x), (*center_y - end_y));
01240 radius2 SET_TO
01241 (((side IS LEFT ) AND (move IS 30)) OR
01242 ((side IS RIGHT) AND (move IS 20))) ?
01243 (radius2 - tool_radius): (radius2 + tool_radius);
01244 if (fabs(arc_radius - radius2) > tolerance)
01245 ERROR_MACRO(_interpreter_linetext, name,
01246 "Radius to end of arc differs from radius to start of arc");
01247 /* This catches an arc too small for the tool, also */
01248 if (move IS G_2)
01249 *turn SET_TO -1;
01250 else if (move IS G_3)
01251 *turn SET_TO 1;
01252 else
01253 BUG_MACRO(name, "Code is not G2 or G3 in arc_data_comp");
01254 return RS274NGC_OK;
01255 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1298 of file rs274ngc.cc. 01310 {
01311 static char name[] SET_TO "arc_data_comp_r";
01312 double abs_radius; /* absolute value of big_radius */
01313 double radius2; /* distance from center to current point */
01314 double distance; /* length of line L from current to end */
01315 double mid_length; /* length from current point to point P */
01316 double offset; /* length of line from P to center */
01317 double alpha; /* direction of line from current to end */
01318 double theta; /* direction of line from P to center */
01319 double mid_x; /* x-value of point P */
01320 double mid_y; /* y-value of point P */
01321
01322 if ((end_x IS current_x) AND (end_y IS current_y))
01323 ERROR_MACRO(_interpreter_linetext, name, "Current point same as end point of arc");
01324 abs_radius SET_TO fabs(big_radius);
01325 if ((abs_radius < tool_radius) AND (((side IS LEFT ) AND (move IS G_3)) OR
01326 ((side IS RIGHT) AND (move IS G_2))))
01327 ERROR_MACRO(_interpreter_linetext, name,
01328 "Tool radius not less than arc radius with cutter radius comp");
01329
01330 distance SET_TO hypot((end_x - current_x), (end_y - current_y));
01331 alpha SET_TO atan2 ((end_y - current_y), (end_x - current_x));
01332 theta SET_TO (((move IS G_3) AND (big_radius > 0)) OR
01333 ((move IS G_2) AND (big_radius < 0))) ?
01334 (alpha + PI2) : (alpha - PI2);
01335 radius2 SET_TO (((side IS LEFT ) AND (move IS G_3)) OR
01336 ((side IS RIGHT) AND (move IS G_2))) ?
01337 (abs_radius - tool_radius) : (abs_radius + tool_radius);
01338 if (distance > (radius2 + abs_radius))
01339 ERROR_MACRO(_interpreter_linetext, name, "Radius too small to reach end point");
01340 mid_length SET_TO (((radius2 * radius2) + (distance * distance) -
01341 (abs_radius * abs_radius)) / (2.0 * distance));
01342 mid_x SET_TO (current_x + (mid_length * cos(alpha)));
01343 mid_y SET_TO (current_y + (mid_length * sin(alpha)));
01344 offset SET_TO sqrt((radius2 * radius2) - (mid_length * mid_length));
01345 *center_x SET_TO mid_x + (offset * cos(theta));
01346 *center_y SET_TO mid_y + (offset * sin(theta));
01347 *turn SET_TO (move IS G_2) ? -1 : 1;
01348
01349 return RS274NGC_OK;
01350 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1380 of file rs274ngc.cc. 01392 {
01393 static char name[] SET_TO "arc_data_ijk";
01394 double radius; /* radius to current point */
01395 double radius2; /* radius to end point */
01396 *center_x SET_TO (current_x + i_number);
01397 *center_y SET_TO (current_y + j_number);
01398 radius SET_TO hypot((*center_x - current_x), (*center_y - current_y));
01399 radius2 SET_TO hypot((*center_x - end_x), (*center_y - end_y));
01400 if (fabs(radius - radius2) > tolerance)
01401 ERROR_MACRO(_interpreter_linetext, name,
01402 "Radius to end of arc differs from radius to start of arc");
01403 if (move IS G_2)
01404 *turn SET_TO -1;
01405 else if (move IS G_3)
01406 *turn SET_TO 1;
01407 else
01408 BUG_MACRO(name, "Code is not G2 or G3 in arc_data_ijk");
01409 return RS274NGC_OK;
01410 }
|
|
||||||||||||||||||||||||||||||||||||||||
|
Definition at line 1447 of file rs274ngc.cc. 01457 {
01458 static char name[] SET_TO "arc_data_r";
01459 double abs_radius; /* absolute value of given radius */
01460 double half_length;
01461 double turn2; /* absolute value of half of turn */
01462 double offset; /* distance from M to center */
01463 double theta; /* angle of line from M to center */
01464 double mid_x; /* first coordinate of M */
01465 double mid_y; /* second coordinate of M */
01466
01467 if ((end_x IS current_x) AND (end_y IS current_y))
01468 ERROR_MACRO(_interpreter_linetext, name, "Current point same as end point of arc");
01469 abs_radius SET_TO fabs(radius);
01470 mid_x SET_TO (end_x + current_x)/2.0;
01471 mid_y SET_TO (end_y + current_y)/2.0;
01472 half_length SET_TO hypot((mid_x - end_x), (mid_y - end_y));
01473 if ((half_length/abs_radius) > (1+TINY))
01474 ERROR_MACRO(_interpreter_linetext, name, "Arc radius too small to reach end point");
01475 else if ((half_length/abs_radius) > (1-TINY))
01476 half_length SET_TO abs_radius; /* allow a small error for semicircle */
01477 /* check needed before calling asin */
01478 if (((move IS G_2) AND (radius > 0)) OR
01479 ((move IS G_3) AND (radius < 0)))
01480 theta SET_TO atan2((end_y - current_y), (end_x - current_x)) - PI2;
01481 else
01482 theta SET_TO atan2((end_y - current_y), (end_x - current_x)) + PI2;
01483
01484 turn2 SET_TO asin (half_length/abs_radius);
01485 offset SET_TO abs_radius * cos(turn2);
01486 *center_x SET_TO mid_x + (offset * cos(theta));
01487 *center_y SET_TO mid_y + (offset * sin(theta));
01488 *turn SET_TO (move IS G_2) ? -1 : 1;
01489
01490 return RS274NGC_OK;
01491 }
|
|
||||||||||||
|
Definition at line 5541 of file rs274ngc.cc. 05544 {
05545 static char name[] SET_TO "check_g_codes";
05546 ON_OFF axis_flag;
05547 int explicit_motion;
05548 int mode0;
05549 int p_int;
05550
05551 axis_flag SET_TO
05552 ((block->x_flag) OR (block->y_flag) OR (block->z_flag)) ? ON : OFF;
05553 explicit_motion SET_TO block->g_modes[1];
05554 mode0 SET_TO block->g_modes[0];
05555
05556 if(block->g_count > MAX_GEES)
05557 ERROR_MACRO(_interpreter_linetext, name, "Too many G codes on line");
05558
05559 if (mode0 IS -1)
05560 {
05561 if (block->g_modes[4] IS -1)
05562 {
05563 if ((block->motion_to_be IS G_80) AND (axis_flag IS ON))
05564 ERROR_MACRO(_interpreter_linetext, name, "Cannot use axis commands with G80");
05565 }
05566 else if (block->g_modes[4] IS G_4)
05567 {
05568 if (((block->motion_to_be IS -1) OR
05569 (block->motion_to_be IS G_80)) AND
05570 (axis_flag IS ON))
05571 ERROR_MACRO(_interpreter_linetext, name, "Cannot use axis commands with G4");
05572 if(block->p_number IS -1.0)
05573 ERROR_MACRO(_interpreter_linetext, name, "Dwell time missing with G4");
05574 }
05575 else if (block->g_modes[4] IS G_53)
05576 {
05577 if ((block->motion_to_be ISNT G_0) AND
05578 (block->motion_to_be ISNT G_1))
05579 ERROR_MACRO(_interpreter_linetext, name, "Must use G0 or G1 with G53");
05580 if((block->g_modes[3] IS G_91) OR
05581 ((block->g_modes[3] ISNT G_90) AND
05582 (settings->distance_mode IS MODE_INCREMENTAL)))
05583 ERROR_MACRO(_interpreter_linetext, name, "Cannot use G53 in incremental distance mode");
05584 }
05585 else
05586 BUG_MACRO(name, "Bad setting of g_mode in check_g_codes");
05587 }
05588 else if (block->g_modes[4] ISNT -1)
05589 ERROR_MACRO(_interpreter_linetext, name, "Cannot use two G codes from group 0");
05590 else if (mode0 IS G_10)
05591 {
05592 p_int SET_TO (int)(block->p_number + 0.0001);
05593 if ((explicit_motion ISNT -1) AND (explicit_motion ISNT G_80))
05594 ERROR_MACRO(_interpreter_linetext, name, "Cannot use a G code for motion with G10");
05595 if (block->l_number ISNT 2)
05596 ERROR_MACRO(_interpreter_linetext, name, "Line with G10 does not have L2");
05597 if (((block->p_number + 0.0001) - p_int) > 0.0002)
05598 ERROR_MACRO(_interpreter_linetext, name, "P value not an integer with G10 L2");
05599 if ((p_int < 1) OR (p_int > 9))
05600 ERROR_MACRO(_interpreter_linetext, name, "P value out of range with G10 L2");
05601 }
05602 else if (mode0 IS G_92)
05603 {
05604 if ((explicit_motion ISNT -1) AND (explicit_motion ISNT G_80))
05605 ERROR_MACRO(_interpreter_linetext, name, "Cannot use a G motion with G92");
05606 if (axis_flag IS OFF)
05607 ERROR_MACRO(_interpreter_linetext, name, "All axes missing with G92");
05608 }
05609 else if (mode0 IS G_92_2)
05610 {}
05611 else
05612 BUG_MACRO(name, "Bad setting of g_mode in check_g_codes");
05613
05614 return RS274NGC_OK;
05615 }
|
|
||||||||||||
|
Definition at line 6742 of file rs274ngc.cc. 06745 {
06746 static char name[] SET_TO "check_items";
06747 if (check_g_codes(block, settings) ISNT RS274NGC_OK)
06748 ERROR_MACRO_PASS(name);
06749 if (check_m_codes(block, settings) ISNT RS274NGC_OK)
06750 ERROR_MACRO_PASS(name);
06751 if (check_other_codes(block, settings) ISNT RS274NGC_OK)
06752 ERROR_MACRO_PASS(name);
06753 if ((block->m_modes[4] ISNT -1) AND (block->g_modes[1] IS G_38_2))
06754 ERROR_MACRO(_interpreter_linetext, name, "Cannot put an M code for stopping with G38.2");
06755 return RS274NGC_OK;
06756 }
|
|
||||||||||||
|
Definition at line 5637 of file rs274ngc.cc. 05640 {
05641 static char name[] SET_TO "check_m_codes";
05642
05643 if(block->m_count > MAX_EMS)
05644 ERROR_MACRO(_interpreter_linetext, name, "Too many M codes on line");
05645
05646 return RS274NGC_OK;
05647 }
|
|
||||||||||||
|
Definition at line 5678 of file rs274ngc.cc. 05681 {
05682 static char name[] SET_TO "check_other_codes";
05683 int motion;
05684
05685 motion SET_TO block->motion_to_be;
05686 if (block->d_number ISNT -1)
05687 {
05688 if ((block->g_modes[7] ISNT G_41) AND (block->g_modes[7] ISNT G_42))
05689 ERROR_MACRO(_interpreter_linetext, name,
05690 "D word on line with no cutter comp on (G41 or G42) command");
05691 }
05692 if (block->h_number ISNT -1)
05693 {
05694 if (block->g_modes[8] ISNT G_43)
05695 ERROR_MACRO(_interpreter_linetext, name,
05696 "H word on line with no tool length comp (G43) command");
05697 }
05698
05699 if (block->i_flag IS ON) /* could still be useless if yz_plane arc */
05700 {
05701 if (((motion ISNT G_2) AND (motion ISNT G_3)) AND (motion ISNT G_87))
05702 ERROR_MACRO(_interpreter_linetext, name,
05703 "I word on line with no G code (G2, G3, G87) that uses it");
05704 }
05705
05706
05707 if (block->j_flag IS ON) /* could still be useless if xz_plane arc */
05708 {
05709 if (((motion ISNT G_2) AND (motion ISNT G_3)) AND (motion ISNT G_87))
05710 ERROR_MACRO(_interpreter_linetext, name,
05711 "J word on line with no G code (G2, G3, G87) that uses it");
05712 }
05713
05714 if (block->k_flag IS ON) /* could still be useless if xy_plane arc */
05715 {
05716 if (((motion ISNT G_2) AND (motion ISNT G_3)) AND (motion ISNT G_87))
05717 ERROR_MACRO(_interpreter_linetext, name,
05718 "K word on line with no G code (G2, G3, G87) that uses it");
05719 }
05720
05721 if (block->l_number ISNT -1)
05722 {
05723 if (((motion < G_81) OR (motion > G_89)) AND
05724 (block->g_modes[0] ISNT G_10))
05725 ERROR_MACRO(_interpreter_linetext, name,
05726 "L word on line with no canned cycle or G10 to use it");
05727 }
05728
05729 if (block->p_number ISNT -1.0)
05730 {
05731 if (((block->g_modes[0] ISNT G_10) AND
05732 (block->g_modes[4] ISNT G_4)) AND
05733 (((motion ISNT G_82) AND (motion ISNT G_86)) AND
05734 ((motion ISNT G_88) AND (motion ISNT G_89))))
05735 ERROR_MACRO(_interpreter_linetext, name,
05736 "P word on line with no G code (G4 G10 G82 G86 G88 G89) that uses it");
05737 }
05738
05739 if (block->q_number ISNT -1.0)
05740 {
05741 if (motion ISNT G_83)
05742 ERROR_MACRO(_interpreter_linetext, name, "Q word on line with no G83 cycle that uses it");
05743 }
05744
05745 if (block->r_flag IS ON)
05746 {
05747 if (((motion ISNT G_2) AND (motion ISNT G_3)) AND
05748 ((motion < G_81) OR (motion > G_89)))
05749 ERROR_MACRO(_interpreter_linetext, name,
05750 "R word on line with no G code (arc or cycle) that uses it");
05751 }
05752
05753 return RS274NGC_OK;
05754 }
|
|
|
Definition at line 6800 of file rs274ngc.cc. 06801 : one line of NC code */
06802 {
06803 static char name[] SET_TO "close_and_downcase";
06804 int m;
06805 int n;
06806 int comment;
06807 char item;
06808 comment SET_TO 0;
06809 for (n SET_TO 0, m SET_TO 0; (item SET_TO line[m]) ISNT (char) NULL; m++)
06810 {
06811 if (comment)
06812 {
06813 line[n++] SET_TO item;
06814 if (item IS ')')
06815 {
06816 comment SET_TO 0;
06817 }
06818 else if (item IS '(')
06819 ERROR_MACRO(_interpreter_linetext, name, "Nested comment found");
06820 }
06821 else if ((item IS ' ') OR (item IS '\t') OR (item IS '\r'));
06822 /* don't copy blank or tab or CR */
06823 else if (item IS '\n') /* don't copy newline */
06824 { /* but check null follows */
06825 if (line[m+1] ISNT 0)
06826 ERROR_MACRO(_interpreter_linetext, name, "Null missing after newline");
06827 }
06828 else if ((64 < item) AND (item < 91)) /* downcase upper case letters */
06829 {
06830 line[n++] SET_TO (32 + item);
06831 }
06832 else if (item IS '(') /* comment is starting */
06833 {
06834 comment SET_TO 1;
06835 line[n++] SET_TO item;
06836 }
06837 else
06838 {
06839 line[n++] SET_TO item; /* copy anything else */
06840 }
06841 }
06842 if (m IS (INTERP_TEXT_SIZE - 1)) /* line was too long */
06843 ERROR_MACRO(_interpreter_linetext, name, "Command too long");
06844 else if (comment)
06845 ERROR_MACRO(_interpreter_linetext, name, "Unclosed comment found");
06846 line[n] SET_TO 0;
06847 return RS274NGC_OK;
06848 }
|
|
||||||||||||||||
|
Definition at line 3508 of file rs274ngc.cc. 03512 {
03513 static char name[] SET_TO "convert_arc";
03514 int status;
03515 DISTANCE_MODE mode;
03516 int first;
03517 int ijk_flag;
03518 double end_x;
03519 double end_y;
03520 double end_z;
03521
03522 mode SET_TO settings->distance_mode;
03523 ijk_flag SET_TO
03524 ((block->i_flag OR block->j_flag) OR block->k_flag) ? ON : OFF;
03525 first SET_TO (settings->program_x IS UNKNOWN);
03526
03527 if ((block->r_flag ISNT ON) AND (ijk_flag ISNT ON))
03528 ERROR_MACRO(_interpreter_linetext, name, "R, I, J, and K words all missing for arc");
03529 else if ((block->r_flag IS ON) AND (ijk_flag IS ON))
03530 ERROR_MACRO(_interpreter_linetext, name, "Mixed radius-ijk format for arc");
03531 else if (settings->feed_rate IS 0.0)
03532 ERROR_MACRO(_interpreter_linetext, name, "Cannot make arc with zero feed rate");
03533 else if (ijk_flag)
03534 {
03535 if (settings->plane IS CANON_PLANE_XY)
03536 {
03537 if (block->k_flag)
03538 ERROR_MACRO(_interpreter_linetext, name, "K word given for arc in XY-plane");
03539 else if (block->i_flag IS OFF) /* i or j flag on to get here */
03540 block->i_number SET_TO 0.0;
03541 else if (block->j_flag IS OFF)
03542 block->j_number SET_TO 0.0;
03543 }
03544 else if (settings->plane IS CANON_PLANE_YZ)
03545 {
03546 if (block->i_flag)
03547 ERROR_MACRO(_interpreter_linetext, name, "I word given for arc in YZ-plane");
03548 else if (block->j_flag IS OFF) /* j or k flag on to get here */
03549 block->j_number SET_TO 0.0;
03550 else if (block->k_flag IS OFF)
03551 block->k_number SET_TO 0.0;
03552 }
03553 else if (settings->plane IS CANON_PLANE_XZ)
03554 {
03555 if (block->j_flag)
03556 ERROR_MACRO(_interpreter_linetext, name, "J word given for arc in XZ-plane");
03557 else if (block->i_flag IS OFF) /* i or k flag on to get here */
03558 block->i_number SET_TO 0.0;
03559 else if (block->k_flag IS OFF)
03560 block->k_number SET_TO 0.0;
03561 }
03562 else
03563 BUG_MACRO(name, "Plane is not XY, YZ, or XZ in convert_arc");
03564 }
03565 else; /* r format arc; no other checks needed specific to this format */
03566
03567 if (settings->plane IS CANON_PLANE_XY) /* checks for both formats */
03568 {
03569 if ((block->x_flag IS OFF) AND (block->y_flag IS OFF))
03570 ERROR_MACRO(_interpreter_linetext, name, "X and Y words missing for arc in XY-plane");
03571 }
03572 else if (settings->plane IS CANON_PLANE_YZ)
03573 {
03574 if ((block->y_flag IS OFF) AND (block->z_flag IS OFF))
03575 ERROR_MACRO(_interpreter_linetext, name, "Y and Z words missing for arc in YZ-plane");
03576 }
03577 else if (settings->plane IS CANON_PLANE_XZ)
03578 {
03579 if ((block->x_flag IS OFF) AND (block->z_flag IS OFF))
03580 ERROR_MACRO(_interpreter_linetext, name, "X and Z words missing for arc in XZ-plane");
03581 }
03582
03583 utility_find_ends(block, settings, &end_x, &end_y, &end_z);
03584
03585 settings->motion_mode SET_TO move;
03586
03587 if (settings->plane IS CANON_PLANE_XY)
03588 {
03589 if (settings->cutter_radius_compensation IS OFF)
03590 status SET_TO convert_arc_xy(move, block, settings, end_x, end_y,
03591 end_z);
03592 else if (settings->feed_mode IS INVERSE_TIME)
03593 ERROR_MACRO(_interpreter_linetext, name,
03594 "Cannot use inverse time feed with cutter radius comp");
03595 else if (first)
03596 status SET_TO convert_arc_comp1
03597 (move, block, settings, end_x, end_y, end_z);
03598 else
03599 status SET_TO convert_arc_comp2
03600 (move, block, settings, end_x, end_y, end_z);
03601 }
03602 else if (settings->plane IS CANON_PLANE_XZ)
03603 status SET_TO convert_arc_zx (move, block, settings, end_z, end_x, end_y);
03604 else if (settings->plane IS CANON_PLANE_YZ)
03605 status SET_TO convert_arc_yz (move, block, settings, end_y, end_z, end_x);
03606 else
03607 BUG_MACRO(name, "Plane is not XY, YZ, or XZ in convert_arc");
03608
03609 if (status ISNT RS274NGC_OK)
03610 ERROR_MACRO_PASS(name);
03611 else
03612 return RS274NGC_OK;
03613 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 2198 of file rs274ngc.cc. 02205 {
02206 static char name[] SET_TO "convert_arc_comp1";
02207 double center_x;
02208 double center_y;
02209 int turn; /* 1 for counterclockwise, -1 for clockwise */
02210 double gamma; /* direction of perpendicular to arc at end */
02211 double tolerance;
02212 double tool_radius;
02213 int side;
02214 int status;
02215
02216 side SET_TO settings->cutter_radius_compensation;
02217 tool_radius SET_TO
02218 (settings->tool_table[settings->tool_table_index].diameter)/2.0;
02219 if (tool_radius <= 0.0)
02220 ERROR_MACRO(_interpreter_linetext, name, "Bad tool radius value with cutter radius comp");
02221 tolerance SET_TO (settings->length_units IS CANON_UNITS_INCHES) ?
02222 TOLERANCE_INCH : TOLERANCE_MM;
02223
02224 if (block->r_flag)
02225 {
02226 status SET_TO
02227 arc_data_comp_r(move, side, tool_radius, settings->current_x,
02228 settings->current_y, end_x, end_y, block->r_number,
02229 ¢er_x, ¢er_y, &turn);
02230 }
02231 else
02232 {
02233 status SET_TO
02234 arc_data_comp_ijk(move, side, tool_radius, settings->current_x,
02235 settings->current_y, end_x, end_y,
02236 block->i_number, block->j_number,
02237 ¢er_x, ¢er_y, &turn, tolerance);
02238 }
02239
02240 if (status IS RS274NGC_ERROR)
02241 ERROR_MACRO_PASS(name);
02242
02243 gamma SET_TO
02244 (((side IS LEFT) AND (move IS G_3)) OR
02245 ((side IS RIGHT) AND (move IS G_2))) ?
02246 atan2 ((center_y - end_y), (center_x - end_x)) :
02247 atan2 ((end_y - center_y), (end_x - center_x));
02248
02249 settings->program_x SET_TO end_x;
02250 settings->program_y SET_TO end_y;
02251 end_x SET_TO (end_x + (tool_radius * cos(gamma)));
02252 end_y SET_TO (end_y + (tool_radius * sin(gamma)));
02253 ARC_FEED(end_x, end_y, center_x, center_y, turn, end_z);
02254 settings->current_x SET_TO end_x;
02255 settings->current_y SET_TO end_y;
02256 settings->current_z SET_TO end_z;
02257
02258 return RS274NGC_OK;
02259 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 2292 of file rs274ngc.cc. 02299 {
02300 static char name[] SET_TO "convert_arc_comp2";
02301 double center_x; /* center of arc */
02302 double center_y;
02303 double start_x;
02304 double start_y;
02305 int turn; /* number of full or partial circles CCW */
02306 double theta; /* direction of tangent to last cut */
02307 double delta; /* direction of radius from start of arc to center of arc */
02308 double alpha; /* direction of tangent to start of arc */
02309 double beta; /* angle between two tangents above */
02310 double gamma; /* direction of perpendicular to arc at end */
02311 double arc_radius;
02312 double tool_radius;
02313 /* small angle in radians for testing corners */
02314 double small SET_TO TOLERANCE_CONCAVE_CORNER;
02315 int side;
02316 int status;
02317 double tolerance;
02318
02319 /* find basic arc data: center_x, center_y, and turn */
02320
02321 start_x SET_TO settings->program_x;
02322 start_y SET_TO settings->program_y;
02323 tolerance SET_TO (settings->length_units IS CANON_UNITS_INCHES) ?
02324 TOLERANCE_INCH : TOLERANCE_MM;
02325
02326 if (block->r_flag)
02327 {
02328 status SET_TO arc_data_r(move, start_x, start_y, end_x, end_y,
02329 block->r_number, ¢er_x, ¢er_y, &turn);
02330 }
02331 else
02332 {
02333 status SET_TO
02334 arc_data_ijk(move, start_x, start_y, end_x, end_y,
02335 block->i_number, block->j_number,
02336 ¢er_x, ¢er_y, &turn, tolerance);
02337 }
02338
02339 if (status IS RS274NGC_ERROR)
02340 ERROR_MACRO_PASS(name);
02341
02342 /* compute other data */
02343 side SET_TO settings->cutter_radius_compensation;
02344 tool_radius SET_TO
02345 (settings->tool_table[settings->tool_table_index].diameter)/2.0;
02346 if (tool_radius <= 0.0)
02347 ERROR_MACRO(_interpreter_linetext, name, "Bad tool radius value with cutter radius comp");
02348 arc_radius SET_TO hypot((center_x - end_x), (center_y - end_y));
02349 theta SET_TO
02350 atan2(settings->current_y - start_y, settings->current_x - start_x);
02351 theta SET_TO (side IS LEFT) ? (theta - PI2) : (theta + PI2);
02352 delta SET_TO atan2(center_y - start_y, center_x - start_x);
02353 alpha SET_TO (move IS G_3) ? (delta - PI2) : (delta + PI2);
02354 beta SET_TO (side IS LEFT) ? (theta - alpha) : (alpha - theta);
02355 beta SET_TO (beta > (1.5 * PI)) ? (beta - TWO_PI) :
02356 (beta < -PI2) ? (beta + TWO_PI) : beta;
02357
02358 if (((side IS LEFT) AND (move IS G_3)) OR
02359 ((side IS RIGHT) AND (move IS G_2)))
02360 {
02361 gamma SET_TO atan2 ((center_y - end_y), (center_x - end_x));
02362 if (arc_radius <= tool_radius)
02363 ERROR_MACRO(_interpreter_linetext, name,
02364 "Tool radius not less than arc radius with cutter radius comp");
02365 }
02366 else
02367 {
02368 gamma SET_TO atan2 ((end_y - center_y), (end_x - center_x));
02369 delta SET_TO (delta + PI);
02370 }
02371
02372 settings->program_x SET_TO end_x;
02373 settings->program_y SET_TO end_y;
02374
02375 /* check if extra arc needed and insert if so */
02376
02377 if ((beta < -small) OR (beta > (PI + small)))
02378 ERROR_MACRO(_interpreter_linetext, name, "Concave corner with cutter radius comp");
02379 else if (beta > small) /* TWO ARCS NEEDED */
02380 ARC_FEED((start_x + (tool_radius * cos(delta))),
02381 (start_y + (tool_radius * sin(delta))),
02382 start_x, start_y, (side IS LEFT) ? -1 : 1,
02383 settings->current_z);
02384
02385 end_x SET_TO (end_x + (tool_radius * cos(gamma))); /* end_x reset actual */
02386 end_y SET_TO (end_y + (tool_radius * sin(gamma))); /* end_y reset actual */
02387
02388 /* insert main arc */
02389 ARC_FEED(end_x, end_y, center_x, center_y, turn, end_z);
02390
02391 settings->current_x SET_TO end_x;
02392 settings->current_y SET_TO end_y;
02393 settings->current_z SET_TO end_z;
02394
02395 return RS274NGC_OK;
02396 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 2418 of file rs274ngc.cc. 02425 {
02426 static char name[] SET_TO "convert_arc_xy";
02427 double center_x;
02428 double center_y;
02429 double length;
02430 double rate;
02431 int turn;
02432 int status;
02433 double tolerance;
02434
02435 tolerance SET_TO (settings->length_units IS CANON_UNITS_INCHES) ?
02436 TOLERANCE_INCH : TOLERANCE_MM;
02437
02438 if (block->r_flag)
02439 {
02440 status SET_TO
02441 arc_data_r(move, settings->current_x, settings->current_y, end_x,
02442 end_y, block->r_number, ¢er_x, ¢er_y, &turn);
02443 }
02444 else
02445 {
02446 status SET_TO
02447 arc_data_ijk(move, settings->current_x, settings->current_y,
02448 end_x, end_y, block->i_number, block->j_number,
02449 ¢er_x, ¢er_y, &turn, tolerance);
02450 }
02451
02452 if (status IS RS274NGC_ERROR)
02453 ERROR_MACRO_PASS(name);
02454
02455 if (settings->feed_mode IS INVERSE_TIME)
02456 {
02457 length SET_TO utility_find_arc_length
02458 (settings->current_x, settings->current_y, settings->current_z,
02459 center_x, center_y, turn, end_x, end_y, end_z);
02460 rate SET_TO MAX(0.1, (length * block->f_number));
02461 SET_FEED_RATE (rate);
02462 settings->feed_rate SET_TO rate;
02463 }
02464
02465 ARC_FEED(end_x, end_y, center_x, center_y, turn, end_z);
02466 settings->current_x SET_TO end_x;
02467 settings->current_y SET_TO end_y;
02468 settings->current_z SET_TO end_z;
02469 return RS274NGC_OK;
02470 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 2492 of file rs274ngc.cc. 02499 {
02500 static char name[] SET_TO "convert_arc_yz";
02501 double center_y;
02502 double center_z;
02503 double length;
02504 double rate;
02505 int turn;
02506 int status;
02507 double tolerance;
02508
02509 tolerance SET_TO (settings->length_units IS CANON_UNITS_INCHES) ?
02510 TOLERANCE_INCH : TOLERANCE_MM;
02511
02512 if (block->r_flag)
02513 {
02514 status SET_TO
02515 arc_data_r(move, settings->current_y, settings->current_z, end_y,
02516 end_z, block->r_number, ¢er_y, ¢er_z, &turn);
02517 }
02518 else
02519 {
02520 status SET_TO
02521 arc_data_ijk(move, settings->current_y, settings->current_z,
02522 end_y, end_z, block->j_number, block->k_number,
02523 ¢er_y, ¢er_z, &turn, tolerance);
02524 }
02525
02526 if (status IS RS274NGC_ERROR)
02527 ERROR_MACRO_PASS(name);
02528
02529 if (settings->feed_mode IS INVERSE_TIME)
02530 {
02531 length SET_TO utility_find_arc_length
02532 (settings->current_y, settings->current_z, settings->current_x,
02533 center_y, center_z, turn, end_y, end_z, end_x);
02534 rate SET_TO MAX(0.1, (length * block->f_number));
02535 SET_FEED_RATE (rate);
02536 settings->feed_rate SET_TO rate;
02537 }
02538
02539 ARC_FEED(end_y, end_z, center_y, center_z, turn, end_x);
02540 settings->current_y SET_TO end_y;
02541 settings->current_z SET_TO end_z;
02542 settings->current_x SET_TO end_x;
02543
02544 return RS274NGC_OK;
02545 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 2567 of file rs274ngc.cc. 02574 {
02575 static char name[] SET_TO "convert_arc_zx";
02576 double center_z;
02577 double center_x;
02578 double length;
02579 double rate;
02580 int turn;
02581 int status;
02582 double tolerance;
02583
02584 tolerance SET_TO (settings->length_units IS CANON_UNITS_INCHES) ?
02585 TOLERANCE_INCH : TOLERANCE_MM;
02586
02587 if (block->r_flag)
02588 {
02589 status SET_TO
02590 arc_data_r(move, settings->current_z, settings->current_x, end_z,
02591 end_x, block->r_number, ¢er_z, ¢er_x, &turn);
02592 }
02593 else
02594 {
02595 status SET_TO
02596 arc_data_ijk(move, settings->current_z, settings->current_x,
02597 end_z, end_x, block->k_number, block->i_number,
02598 ¢er_z, ¢er_x, &turn, tolerance);
02599 }
02600
02601 if (status IS RS274NGC_ERROR)
02602 ERROR_MACRO_PASS(name);
02603
02604 if (settings->feed_mode IS INVERSE_TIME)
02605 {
02606 length SET_TO utility_find_arc_length
02607 (settings->current_z, settings->current_x, settings->current_y,
02608 center_z, center_x, turn, end_z, end_x, end_y);
02609 rate SET_TO MAX(0.1, (length * block->f_number));
02610 SET_FEED_RATE (rate);
02611 settings->feed_rate SET_TO rate;
02612 }
02613
02614 ARC_FEED(end_z, end_x, center_z, center_x, turn, end_y);
02615 settings->current_z SET_TO end_z;
02616 settings->current_x SET_TO end_x;
02617 settings->current_y SET_TO end_y;
02618
02619 return RS274NGC_OK;
02620 }
|
|
||||||||||||||||
|
Definition at line 3663 of file rs274ngc.cc. 03667 {
03668 static char name[] SET_TO "convert_axis_offsets";
03669
03670 if (settings->cutter_radius_compensation ISNT OFF) /* not "IS ON" */
03671 ERROR_MACRO(_interpreter_linetext, name, "Cannot change axis offsets with cutter radius comp");
03672 else if (g_code IS G_92)
03673 {
03674 if (block->x_flag IS ON)
03675 {
03676 settings->axis_offset_x SET_TO
03677 (settings->current_x + settings->axis_offset_x - block->x_number);
03678 settings->current_x SET_TO block->x_number;
03679 }
03680
03681 if (block->y_flag IS ON)
03682 {
03683 settings->axis_offset_y SET_TO
03684 (settings->current_y + settings->axis_offset_y - block->y_number);
03685 settings->current_y SET_TO block->y_number;
03686 }
03687
03688 if (block->z_flag IS ON)
03689 {
03690 settings->axis_offset_z SET_TO
03691 (settings->current_z + settings->axis_offset_z - block->z_number);
03692 settings->current_z SET_TO block->z_number;
03693 }
03694
03695 SET_ORIGIN_OFFSETS(settings->origin_offset_x + settings->axis_offset_x,
03696 settings->origin_offset_y + settings->axis_offset_y,
03697 settings->origin_offset_z + settings->axis_offset_z);
03698
03699 settings->parameters[5211] SET_TO settings->axis_offset_x;
03700 settings->parameters[5212] SET_TO settings->axis_offset_y;
03701 settings->parameters[5213] SET_TO settings->axis_offset_z;
03702 }
03703 else if (g_code IS G_92_2)
03704 {
03705 settings->current_x SET_TO
03706 settings->current_x + settings->axis_offset_x;
03707 settings->current_y SET_TO
03708 settings->current_y + settings->axis_offset_y;
03709 settings->current_z SET_TO
03710 settings->current_z + settings->axis_offset_z;
03711 SET_ORIGIN_OFFSETS(settings->origin_offset_x,
03712 settings->origin_offset_y,
03713 settings->origin_offset_z);
03714 settings->axis_offset_x SET_TO 0.0;
03715 settings->axis_offset_y SET_TO 0.0;
03716 settings->axis_offset_z SET_TO 0.0;
03717
03718 settings->parameters[5211] SET_TO 0.0;
03719 settings->parameters[5212] SET_TO 0.0;
03720 settings->parameters[5213] SET_TO 0.0;
03721 }
03722 else
03723 BUG_MACRO(name, "Code is not G92 or G92.2 in convert_axis_offsets");
03724
03725 return RS274NGC_OK;
03726 }
|
|
|
Definition at line 6873 of file rs274ngc.cc. 06875 {
06876 int m;
06877 int item;
06878
06879 for (m SET_TO 0; ((item SET_TO comment[m]) IS ' ') OR (item IS '\t') ; m++);
06880 if ((item ISNT 'M') AND (item ISNT 'm'))
06881 {
06882 COMMENT(comment);
06883 return RS274NGC_OK;
06884 }
06885 for (m++; ((item SET_TO comment[m]) IS ' ') OR (item IS '\t') ; m++);
06886 if ((item ISNT 'S') AND (item ISNT 's'))
06887 {
06888 COMMENT(comment);
06889 return RS274NGC_OK;
06890 }
06891 for (m++; ((item SET_TO comment[m]) IS ' ') OR (item IS '\t') ; m++);
06892 if ((item ISNT 'G') AND (item ISNT 'g'))
06893 {
06894 COMMENT(comment);
06895 return RS274NGC_OK;
06896 }
06897 for (m++; ((item SET_TO comment[m]) IS ' ') OR (item IS '\t') ; m++);
06898 if (item ISNT ',')
06899 {
06900 COMMENT(comment);
06901 return RS274NGC_OK;
06902 }
06903 MESSAGE(comment + m + 1);
06904 return RS274NGC_OK;
06905 }
|
|
||||||||||||||||
|
Definition at line 5785 of file rs274ngc.cc. 05789 {
05790 static char name[] SET_TO "convert_control_mode";
05791 if (g_code IS G_61)
05792 {
05793 SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH);
05794 settings->control_mode SET_TO CANON_EXACT_PATH;
05795 }
05796 else if (g_code IS G_64)
05797 {
05798 SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS);
05799 settings->control_mode SET_TO CANON_CONTINUOUS;
05800 }
05801 else
05802 BUG_MACRO(name, "Code is not G61 or G64 in convert_control_mode");
05803 return RS274NGC_OK;
05804 }
|
|
||||||||||||||||
|
Definition at line 5877 of file rs274ngc.cc. 05881 {
05882 static char name[] SET_TO "convert_coordinate_system";
05883 int origin;
05884 double x;
05885 double y;
05886 double z;
05887 double * parameters;
05888
05889 parameters SET_TO settings->parameters;
05890 switch(g_code)
05891 {
05892 case 540:
05893 origin SET_TO 1;
05894 break;
05895 case 550:
05896 origin SET_TO 2;
05897 break;
05898 case 560:
05899 origin SET_TO 3;
05900 break;
05901 case 570:
05902 origin SET_TO 4;
05903 break;
05904 case 580:
05905 origin SET_TO 5;
05906 break;
05907 case 590:
05908 origin SET_TO 6;
05909 break;
05910 case 591:
05911 origin SET_TO 7;
05912 break;
05913 case 592:
05914 origin SET_TO 8;
05915 break;
05916 case 593:
05917 origin SET_TO 9;
05918 break;
05919 default:
05920 BUG_MACRO(name, "Code is not G54 to G59.3 in convert_coordinate_system");
05921 }
05922
05923 if (origin IS settings->origin_ngc) /* already using this origin */
05924 {
05925 #ifdef DEBUG_EMC
05926 COMMENT("interpreter: continuing to use same coordinate system");
05927 #endif
05928 return RS274NGC_OK;
05929 }
05930
05931 /* axis offsets could be included in the following calculcations
05932 but do not need to be because they would not change the result. */
05933 settings->current_x SET_TO
05934 (settings->current_x + settings->origin_offset_x);
05935 settings->current_y SET_TO
05936 (settings->current_y + settings->origin_offset_y);
05937 settings->current_z SET_TO
05938 (settings->current_z + settings->origin_offset_z);
05939
05940 x SET_TO parameters[5201 + (origin * 20)];
05941 y SET_TO parameters[5202 + (origin * 20)];
05942 z SET_TO parameters[5203 + (origin * 20)];
05943
05944 settings->origin_offset_x SET_TO x;
05945 settings->origin_offset_y SET_TO y;
05946 settings->origin_offset_z SET_TO z;
05947
05948 settings->current_x SET_TO (settings->current_x - x);
05949 settings->current_y SET_TO (settings->current_y - y);
05950 settings->current_z SET_TO (settings->current_z - z);
05951 settings->origin_ngc SET_TO origin;
05952
05953 SET_ORIGIN_OFFSETS(x + settings->axis_offset_x,
05954 y + settings->axis_offset_y,
05955 z + settings->axis_offset_z);
05956
05957 return RS274NGC_OK;
05958 }
|
|
||||||||||||||||
|
Definition at line 5983 of file rs274ngc.cc. 05987 {
05988 static char name[] SET_TO "convert_cutter_compensation";
05989 if (g_code IS G_40)
05990 {
05991 if (convert_cutter_compensation_off(settings) IS RS274NGC_ERROR)
05992 ERROR_MACRO_PASS(name);
05993 }
05994 else if (g_code IS G_41)
05995 {
05996 if (convert_cutter_compensation_on(LEFT, block, settings)
05997 IS RS274NGC_ERROR)
05998 ERROR_MACRO_PASS(name);
05999 }
06000 else if (g_code IS G_42)
06001 {
06002 if (convert_cutter_compensation_on(RIGHT, block, settings)
06003 IS RS274NGC_ERROR)
06004 ERROR_MACRO_PASS(name);
06005 }
06006 else
06007 BUG_MACRO(name,
06008 "Code is not G40, G41, or G42 in convert_cutter_compensation");
06009
06010 return RS274NGC_OK;
06011 }
|
|
|
Definition at line 3745 of file rs274ngc.cc. 03747 {
03748 #ifdef DEBUG_EMC
03749 COMMENT("interpreter: cutter radius compensation off");
03750 #endif
03751 settings->cutter_radius_compensation SET_TO OFF;
03752 settings->program_x SET_TO UNKNOWN;
03753 return RS274NGC_OK;
03754 }
|
|
||||||||||||||||
|
Definition at line 3785 of file rs274ngc.cc. 03789 {
03790 static char name[] SET_TO "convert_cutter_compensation_on";
03791
03792 if (settings->plane ISNT CANON_PLANE_XY)
03793 ERROR_MACRO(_interpreter_linetext, name, "Cannot turn cutter radius comp on out of XY-plane");
03794 if (block->d_number IS -1)
03795 ERROR_MACRO(_interpreter_linetext, name, "D word missing with cutter radius comp on");
03796 if (settings->cutter_radius_compensation ISNT OFF)
03797 ERROR_MACRO(_interpreter_linetext, name, "Cannot turn cutter radius comp on when already on");
03798
03799 #ifdef DEBUG_EMC
03800 if (side IS RIGHT)
03801 COMMENT("interpreter: cutter radius compensation on right");
03802 else
03803 COMMENT("interpreter: cutter radius compensation on left");
03804 #endif
03805
03806 /* radius is (settings->tool_table[block->d_number].diameter)/2.0) */
03807 settings->tool_table_index SET_TO block->d_number;
03808 settings->cutter_radius_compensation SET_TO side;
03809 return RS274NGC_OK;
03810 }
|
|
||||||||||||||||
|
Definition at line 3910 of file rs274ngc.cc. 03914 {
03915 static char name[] SET_TO "convert_cycle";
03916 double x_increment;
03917 double y_increment;
03918 double i;
03919 double j;
03920 double k;
03921 double x;
03922 double y;
03923 double clear_z;
03924 double old_z;
03925 double z;
03926 double r;
03927 int repeat;
03928 CANON_MOTION_MODE save_mode;
03929
03930 if (settings->motion_mode ISNT motion)
03931 {
03932 if (block->r_flag IS OFF)
03933 ERROR_MACRO(_interpreter_linetext, name, "R clearance plane unspecified in canned cycle");
03934 if (block->z_flag IS OFF)
03935 ERROR_MACRO(_interpreter_linetext, name, "Z value unspecified in canned cycle");
03936 }
03937
03938 block->r_number SET_TO
03939 block->r_flag IS ON ? block->r_number : settings->cycle_r;
03940 block->z_number SET_TO
03941 block->z_flag IS ON ? block->z_number : settings->cycle_z;
03942 old_z SET_TO settings->current_z;
03943
03944 if (settings->distance_mode IS MODE_ABSOLUTE)
03945 {
03946 x_increment SET_TO 0.0;
03947 y_increment SET_TO 0.0;
03948 r SET_TO block->r_number;
03949 z SET_TO block->z_number;
03950 x SET_TO block->x_flag IS ON ? block->x_number : settings->current_x;
03951 y SET_TO block->y_flag IS ON ? block->y_number : settings->current_y;
03952 }
03953 else if (settings->distance_mode IS MODE_INCREMENTAL)
03954 {
03955 x_increment SET_TO block->x_number;
03956 y_increment SET_TO block->y_number;
03957 r SET_TO (block->r_number + old_z);
03958 z SET_TO (r + block->z_number); /* [NCMS, page 98] */
03959 x SET_TO settings->current_x;
03960 y SET_TO settings->current_y;
03961 }
03962 else
03963 BUG_MACRO(name,
03964 "Distance mode is neither absolute nor incremental in convert_cycle");
03965
03966 if (r < z)
03967 ERROR_MACRO(_interpreter_linetext, name, "R value less than Z value in canned cycle");
03968
03969 if (block->l_number IS -1)
03970 block->l_number SET_TO 1;
03971 else if (block->l_number IS 0)
03972 ERROR_MACRO(_interpreter_linetext, name, "Cannot do zero repeats of cycle");
03973
03974 if (old_z < r)
03975 {
03976 STRAIGHT_TRAVERSE(settings->current_x, settings->current_y, r);
03977 old_z SET_TO r;
03978 }
03979 clear_z SET_TO (settings->retract_mode IS R_PLANE) ? r : old_z;
03980
03981 save_mode = GET_MOTION_CONTROL_MODE();
03982 if (save_mode ISNT CANON_EXACT_PATH)
03983 SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH);
03984
03985 switch(motion)
03986 {
03987 case G_81:
03988 CYCLE_MACRO(convert_cycle_g81(x, y, clear_z, z))
03989 break;
03990 case G_82:
03991 if ((settings->motion_mode ISNT G_82) AND (block->p_number IS -1.0))
03992 ERROR_MACRO(_interpreter_linetext, name, "P word (dwell time) missing with G82");
03993 block->p_number SET_TO
03994 block->p_number IS -1.0 ? settings->cycle_p : block->p_number;
03995 CYCLE_MACRO(convert_cycle_g82 (x, y, clear_z, z, block->p_number))
03996 settings->cycle_p SET_TO block->p_number;
03997 break;
03998 case G_83:
03999 if ((settings->motion_mode ISNT G_83) AND (block->q_number IS -1.0))
04000 ERROR_MACRO(_interpreter_linetext, name, "Q word (depth increment) missing with G83");
04001 block->q_number SET_TO
04002 block->q_number IS -1.0 ? settings->cycle_q : block->q_number;
04003 CYCLE_MACRO(convert_cycle_g83 (x, y, r, clear_z, z, block->q_number))
04004 settings->cycle_q SET_TO block->q_number;
04005 break;
04006 case G_84:
04007 CYCLE_MACRO(convert_cycle_g84 (x, y, clear_z, z,
04008 settings->spindle_turning, settings->speed_feed_mode))
04009 break;
04010 case G_85:
04011 CYCLE_MACRO(convert_cycle_g85 (x, y, clear_z, z))
04012 break;
04013 case G_86:
04014 if ((settings->motion_mode ISNT G_86) AND (block->p_number IS -1.0))
04015 ERROR_MACRO(_interpreter_linetext, name, "P word (dwell time) missing with G86");
04016 block->p_number SET_TO
04017 block->p_number IS -1.0 ? settings->cycle_p : block->p_number;
04018 CYCLE_MACRO(convert_cycle_g86 (x, y, clear_z, z, block->p_number,
04019 settings->spindle_turning))
04020 settings->cycle_p SET_TO block->p_number;
04021 break;
04022 case G_87:
04023 if (settings->motion_mode ISNT G_87)
04024 {
04025 if (block->i_flag IS OFF)
04026 ERROR_MACRO(_interpreter_linetext, name, "I word missing with G87");
04027 if (block->j_flag IS OFF)
04028 ERROR_MACRO(_interpreter_linetext, name, "J word missing with G87");
04029 if (block->k_flag IS OFF)
04030 ERROR_MACRO(_interpreter_linetext, name, "K word missing with G87");
04031 }
04032 i SET_TO block->i_flag IS ON ? block->i_number : settings->cycle_i;
04033 j SET_TO block->j_flag IS ON ? block->j_number : settings->cycle_j;
04034 k SET_TO block->k_flag IS ON ? block->k_number : settings->cycle_k;
04035 settings->cycle_i SET_TO i;
04036 settings->cycle_j SET_TO j;
04037 settings->cycle_k SET_TO k;
04038 if (settings->distance_mode IS MODE_INCREMENTAL)
04039 {
04040 k SET_TO (z + k); /* k always absolute in function call below */
04041 }
04042 CYCLE_MACRO(convert_cycle_g87 (x, (x + i), y, (y + j), r, clear_z, k,
04043 z, settings->spindle_turning))
04044 break;
04045 case G_88:
04046 if ((settings->motion_mode ISNT G_88) AND (block->p_number IS -1.0))
04047 ERROR_MACRO(_interpreter_linetext, name, "P word (dwell time) missing with G88");
04048 block->p_number SET_TO
04049 block->p_number IS -1.0 ? settings->cycle_p : block->p_number;
04050 CYCLE_MACRO(convert_cycle_g88 (x, y, z, block->p_number,
04051 settings->spindle_turning))
04052 settings->cycle_p SET_TO block->p_number;
04053 break;
04054 case G_89:
04055 if ((settings->motion_mode ISNT G_89) AND (block->p_number IS -1.0))
04056 ERROR_MACRO(_interpreter_linetext, name, "P word (dwell time) missing with G89");
04057 block->p_number SET_TO
04058 block->p_number IS -1.0 ? settings->cycle_p : block->p_number;
04059 CYCLE_MACRO(convert_cycle_g89 (x, y, clear_z, z, block->p_number))
04060 settings->cycle_p SET_TO block->p_number;
04061 break;
04062 default:
04063 BUG_MACRO(name, "Convert_cycle should not have been called");
04064 }
04065 settings->current_x SET_TO x;
04066 settings->current_y SET_TO y;
04067 settings->current_z SET_TO clear_z;
04068 settings->cycle_l SET_TO block->l_number;
04069 settings->cycle_r SET_TO block->r_number;
04070 settings->cycle_z SET_TO block->z_number;
04071 settings->motion_mode SET_TO motion;
04072
04073 if (save_mode ISNT CANON_EXACT_PATH)
04074 SET_MOTION_CONTROL_MODE(save_mode);
04075
04076 return RS274NGC_OK;
04077 }
|
|
||||||||||||||||||||
|
Definition at line 2643 of file rs274ngc.cc. 02648 {
02649 static char name[] SET_TO "convert_cycle_g81";
02650
02651 STRAIGHT_FEED(x, y, bottom_z);
02652 STRAIGHT_TRAVERSE(x, y, clear_z);
02653
02654 return RS274NGC_OK;
02655 }
|
|
||||||||||||||||||||||||
|
Definition at line 2677 of file rs274ngc.cc. 02683 {
02684 static char name[] SET_TO "convert_cycle_g82";
02685
02686 STRAIGHT_FEED(x, y, bottom_z);
02687 DWELL(dwell);
02688 STRAIGHT_TRAVERSE(x, y, clear_z);
02689
02690 return RS274NGC_OK;
02691 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 2723 of file rs274ngc.cc. 02730 {
02731 static char name[] SET_TO "convert_cycle_g83";
02732 double current_depth;
02733 double rapid_delta;
02734
02735 rapid_delta SET_TO G83_RAPID_DELTA;
02736 if (_interpreter_settings.length_units IS CANON_UNITS_MM)
02737 rapid_delta *= 25.4;
02738
02739 for (current_depth SET_TO (r - delta);
02740 current_depth > bottom_z;
02741 current_depth SET_TO (current_depth - delta))
02742 {
02743 STRAIGHT_FEED(x, y, current_depth);
02744 DWELL(0.25);
02745 STRAIGHT_TRAVERSE(x, y, clear_z);
02746 STRAIGHT_TRAVERSE(x, y, current_depth + rapid_delta);
02747 }
02748 STRAIGHT_FEED(x, y, bottom_z);
02749 DWELL(0.25);
02750 STRAIGHT_TRAVERSE(x, y, clear_z);
02751
02752 return RS274NGC_OK;
02753 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 2784 of file rs274ngc.cc. 02791 {
02792 static char name[] SET_TO "convert_cycle_g84";
02793
02794 if (direction ISNT CANON_CLOCKWISE)
02795 ERROR_MACRO(_interpreter_linetext, name, "Spindle not turning clockwise in G84 canned cycle");
02796 START_SPEED_FEED_SYNCH();
02797 STRAIGHT_FEED(x, y, bottom_z);
02798 STOP_SPINDLE_TURNING();
02799 START_SPINDLE_COUNTERCLOCKWISE();
02800 STRAIGHT_FEED(x, y, clear_z);
02801 if (mode ISNT CANON_SYNCHED)
02802 STOP_SPEED_FEED_SYNCH();
02803 STOP_SPINDLE_TURNING();
02804 START_SPINDLE_CLOCKWISE();
02805
02806 return RS274NGC_OK;
02807 }
|
|
||||||||||||||||||||
|
Definition at line 2828 of file rs274ngc.cc. 02833 {
02834 static char name[] SET_TO "convert_cycle_g85";
02835
02836 STRAIGHT_FEED(x, y, bottom_z);
02837 STRAIGHT_FEED(x, y, clear_z);
02838
02839 return RS274NGC_OK;
02840 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 2867 of file rs274ngc.cc. 02874 {
02875 static char name[] SET_TO "convert_cycle_g86";
02876
02877 if ((direction ISNT CANON_CLOCKWISE) AND
02878 (direction ISNT CANON_COUNTERCLOCKWISE))
02879 ERROR_MACRO(_interpreter_linetext, name, "Spindle not turning in G86 canned cycle");
02880
02881 STRAIGHT_FEED(x, y, bottom_z);
02882 DWELL(dwell);
02883 STOP_SPINDLE_TURNING();
02884 STRAIGHT_TRAVERSE(x, y, clear_z);
02885 if (direction IS CANON_CLOCKWISE)
02886 START_SPINDLE_CLOCKWISE();
02887 else
02888 START_SPINDLE_COUNTERCLOCKWISE();
02889
02890 return RS274NGC_OK;
02891 }
|
|
||||||||||||||||||||||||||||||||||||||||
|
Definition at line 2942 of file rs274ngc.cc. 02952 {
02953 static char name[] SET_TO "convert_cycle_g87";
02954
02955 if ((direction ISNT CANON_CLOCKWISE) AND
02956 (direction ISNT CANON_COUNTERCLOCKWISE))
02957 ERROR_MACRO(_interpreter_linetext, name, "Spindle not turning in G87 canned cycle");
02958
02959 STRAIGHT_TRAVERSE(offset_x, offset_y, r);
02960 STOP_SPINDLE_TURNING();
02961 ORIENT_SPINDLE(0.0, direction);
02962 STRAIGHT_TRAVERSE(offset_x, offset_y, bottom_z);
02963 STRAIGHT_TRAVERSE(x, y, bottom_z);
02964 if (direction IS CANON_CLOCKWISE)
02965 START_SPINDLE_CLOCKWISE();
02966 else
02967 START_SPINDLE_COUNTERCLOCKWISE();
02968 STRAIGHT_FEED(x, y, middle_z);
02969 STRAIGHT_FEED(x, y, bottom_z);
02970 STOP_SPINDLE_TURNING();
02971 ORIENT_SPINDLE(0.0, direction);
02972 STRAIGHT_TRAVERSE(offset_x, offset_y, bottom_z);
02973 STRAIGHT_TRAVERSE(offset_x, offset_y, clear_z);
02974 STRAIGHT_TRAVERSE(x, y, clear_z);
02975 if (direction IS CANON_CLOCKWISE)
02976 START_SPINDLE_CLOCKWISE();
02977 else
02978 START_SPINDLE_COUNTERCLOCKWISE();
02979
02980 return RS274NGC_OK;
02981 }
|
|
||||||||||||||||||||||||
|
Definition at line 3008 of file rs274ngc.cc. 03014 {
03015 static char name[] SET_TO "convert_cycle_g88";
03016
03017 if ((direction ISNT CANON_CLOCKWISE) AND
03018 (direction ISNT CANON_COUNTERCLOCKWISE))
03019 ERROR_MACRO(_interpreter_linetext, name, "Spindle not turning in G88 canned cycle");
03020
03021 STRAIGHT_FEED(x, y, bottom_z);
03022 DWELL(dwell);
03023 STOP_SPINDLE_TURNING();
03024 PROGRAM_STOP(); /* operator retracts the spindle here */
03025 if (direction IS CANON_CLOCKWISE)
03026 START_SPINDLE_CLOCKWISE();
03027 else
03028 START_SPINDLE_COUNTERCLOCKWISE();
03029
03030 return RS274NGC_OK;
03031 }
|
|
||||||||||||||||||||||||
|
Definition at line 3051 of file rs274ngc.cc. 03057 {
03058 static char name[] SET_TO "convert_cycle_g89";
03059
03060 STRAIGHT_FEED(x, y, bottom_z);
03061 DWELL(dwell);
03062 STRAIGHT_FEED(x, y, clear_z);
03063
03064 return RS274NGC_OK;
03065 }
|
|
||||||||||||||||
|
Definition at line 6032 of file rs274ngc.cc. 06036 {
06037 static char name[] SET_TO "convert_distance_mode";
06038 if (g_code IS G_90)
06039 {
06040 if (settings->distance_mode ISNT MODE_ABSOLUTE)
06041 {
06042 #ifdef DEBUG_EMC
06043 COMMENT("interpreter: distance mode changed to absolute");
06044 #endif
06045 settings->distance_mode SET_TO MODE_ABSOLUTE;
06046 }
06047 }
06048 else if (g_code IS G_91)
06049 {
06050 if (settings->distance_mode ISNT MODE_INCREMENTAL)
06051 {
06052 #ifdef DEBUG_EMC
06053 COMMENT("interpreter: distance mode changed to incremental");
06054 #endif
06055 settings->distance_mode SET_TO MODE_INCREMENTAL;
06056 }
06057 }
06058 else
06059 BUG_MACRO(name, "Code is not G90 or G91 in convert_distance_mode");
06060 return RS274NGC_OK;
06061 }
|
|
|
Definition at line 6076 of file rs274ngc.cc. 06078 {
06079 DWELL(time);
06080 return RS274NGC_OK;
06081 }
|
|
||||||||||||||||
|
Definition at line 6928 of file rs274ngc.cc. 06932 {
06933 static char name[] SET_TO "convert_feed_mode";
06934 if (g_code IS G_93)
06935 {
06936 #ifdef DEBUG_EMC
06937 COMMENT("interpreter: feed mode set to inverse time");
06938 #endif
06939 settings->feed_mode SET_TO INVERSE_TIME;
06940 }
06941 else if (g_code IS G_94)
06942 {
06943 #ifdef DEBUG_EMC
06944 COMMENT("interpreter: feed mode set to units per minute");
06945 #endif
06946 settings->feed_mode SET_TO UNITS_PER_MINUTE;
06947 }
06948 else
06949 BUG_MACRO(name, "Code is not G93 or G94 in convert_feed_mode");
06950 return RS274NGC_OK;
06951 }
|
|
||||||||||||
|
Definition at line 6968 of file rs274ngc.cc. 06971 {
06972 SET_FEED_RATE(block->f_number);
06973 settings->feed_rate SET_TO block->f_number;
06974 return RS274NGC_OK;
06975 }
|
|
||||||||||||
|
Definition at line 7039 of file rs274ngc.cc. 07042 {
07043 static char name[] SET_TO "convert_g";
07044
07045 if (block->g_modes[4] IS G_4)
07046 {
07047 if (convert_dwell(block->p_number) IS RS274NGC_ERROR)
07048 ERROR_MACRO_PASS(name);
07049 }
07050
07051 if (block->g_modes[2] ISNT -1)
07052 {
07053 if (convert_set_plane(block->g_modes[2], block, settings)
07054 IS RS274NGC_ERROR)
07055 ERROR_MACRO_PASS(name);
07056 }
07057
07058 if (block->g_modes[6] ISNT -1)
07059 {
07060 if (convert_length_units(block->g_modes[6], settings) IS RS274NGC_ERROR)
07061 ERROR_MACRO_PASS(name);
07062 }
07063
07064 if (block->g_modes[7] ISNT -1)
07065 {
07066 if (convert_cutter_compensation(block->g_modes[7], block, settings)
07067 IS RS274NGC_ERROR)
07068 ERROR_MACRO_PASS(name);
07069 }
07070
07071 if (block->g_modes[8] ISNT -1)
07072 {
07073 if (convert_tool_length_offset(block->g_modes[8], block, settings)
07074 IS RS274NGC_ERROR)
07075 ERROR_MACRO_PASS(name);
07076 }
07077
07078 if (block->g_modes[12] ISNT -1)
07079 {
07080 if (convert_coordinate_system (block->g_modes[12], block, settings)
07081 IS RS274NGC_ERROR)
07082 ERROR_MACRO_PASS(name);
07083 }
07084
07085 if (block->g_modes[13] ISNT -1)
07086 {
07087 if (convert_control_mode (block->g_modes[13], block, settings)
07088 IS RS274NGC_ERROR)
07089 ERROR_MACRO_PASS(name);
07090 }
07091
07092 if (block->g_modes[3] ISNT -1)
07093 {
07094 if (convert_distance_mode(block->g_modes[3], block, settings)
07095 IS RS274NGC_ERROR)
07096 ERROR_MACRO_PASS(name);
07097 }
07098
07099 if (block->g_modes[10] ISNT -1)
07100 {
07101 if (convert_retract_mode(block->g_modes[10], block, settings)
07102 IS RS274NGC_ERROR)
07103 ERROR_MACRO_PASS(name);
07104 }
07105
07106 if (block->g_modes[0] ISNT -1)
07107 {
07108 if (convert_modal_0(block->g_modes[0], block, settings)
07109 IS RS274NGC_ERROR)
07110 ERROR_MACRO_PASS(name);
07111 }
07112
07113 if (block->motion_to_be ISNT -1)
07114 {
07115 if (convert_motion(block->motion_to_be, block, settings)
07116 IS RS274NGC_ERROR)
07117 ERROR_MACRO_PASS(name);
07118 }
07119 return RS274NGC_OK;
07120 }
|
|
||||||||||||
|
Definition at line 6124 of file rs274ngc.cc. 06127 {
06128 static char name[] SET_TO "convert_length_units";
06129 if (settings->cutter_radius_compensation ISNT OFF)
06130 ERROR_MACRO(_interpreter_linetext, name, "Cannot change units with cutter radius comp");
06131 else if (g_code IS G_20)
06132 {
06133 USE_LENGTH_UNITS(CANON_UNITS_INCHES);
06134 if (settings->length_units ISNT CANON_UNITS_INCHES)
06135 {
06136 settings->length_units SET_TO CANON_UNITS_INCHES;
06137 settings->current_x SET_TO (settings->current_x * INCH_PER_MM);
06138 settings->current_y SET_TO (settings->current_y * INCH_PER_MM);
06139 settings->current_z SET_TO (settings->current_z * INCH_PER_MM);
06140 settings->axis_offset_x SET_TO
06141 (settings->axis_offset_x * INCH_PER_MM);
06142 settings->axis_offset_y SET_TO
06143 (settings->axis_offset_y * INCH_PER_MM);
06144 settings->axis_offset_z SET_TO
06145 (settings->axis_offset_z * INCH_PER_MM);
06146 settings->origin_offset_x SET_TO
06147 (settings->origin_offset_x * INCH_PER_MM);
06148 settings->origin_offset_y SET_TO
06149 (settings->origin_offset_y * INCH_PER_MM);
06150 settings->origin_offset_z SET_TO
06151 (settings->origin_offset_z * INCH_PER_MM);
06152 }
06153 }
06154 else if (g_code IS G_21)
06155 {
06156 USE_LENGTH_UNITS(CANON_UNITS_MM);
06157 if (settings->length_units ISNT CANON_UNITS_MM)
06158 {
06159 settings->length_units SET_TO CANON_UNITS_MM;
06160 settings->current_x SET_TO (settings->current_x * MM_PER_INCH);
06161 settings->current_y SET_TO (settings->current_y * MM_PER_INCH);
06162 settings->current_z SET_TO (settings->current_z * MM_PER_INCH);
06163 settings->axis_offset_x SET_TO
06164 (settings->axis_offset_x * MM_PER_INCH);
06165 settings->axis_offset_y SET_TO
06166 (settings->axis_offset_y * MM_PER_INCH);
06167 settings->axis_offset_z SET_TO
06168 (settings->axis_offset_z * MM_PER_INCH);
06169 settings->origin_offset_x SET_TO
06170 (settings->origin_offset_x * MM_PER_INCH);
06171 settings->origin_offset_y SET_TO
06172 (settings->origin_offset_y * MM_PER_INCH);
06173 settings->origin_offset_z SET_TO
06174 (settings->origin_offset_z * MM_PER_INCH);
06175 }
06176 }
06177 else
06178 BUG_MACRO(name, "Code is not G20 or G21 in convert_length_units");
06179 return RS274NGC_OK;
06180 }
|
|
||||||||||||
|
Definition at line 7149 of file rs274ngc.cc. 07152 {
07153 static char name[] SET_TO "convert_m";
07154 if (block->m_modes[6] ISNT -1)
07155 if (convert_tool_change(block, settings) IS RS274NGC_ERROR)
07156 ERROR_MACRO_PASS(name);
07157
07158 if (block->m_modes[7] IS 3)
07159 {
07160 START_SPINDLE_CLOCKWISE();
07161 settings->spindle_turning SET_TO CANON_CLOCKWISE;
07162 }
07163 else if (block->m_modes[7] IS 4)
07164 {
07165 START_SPINDLE_COUNTERCLOCKWISE();
07166 settings->spindle_turning SET_TO CANON_COUNTERCLOCKWISE;
07167 }
07168 else if (block->m_modes[7] IS 5)
07169 {
07170 STOP_SPINDLE_TURNING();
07171 settings->spindle_turning SET_TO CANON_STOPPED;
07172 }
07173
07174 if (block->m_modes[8] IS 7)
07175 {
07176 MIST_ON();
07177 settings->mist SET_TO ON;
07178 }
07179 else if (block->m_modes[8] IS 8)
07180 {
07181 FLOOD_ON();
07182 settings->flood SET_TO ON;
07183 }
07184 else if (block->m_modes[8] IS 9)
07185 {
07186 MIST_OFF();
07187 settings->mist SET_TO OFF;
07188 FLOOD_OFF();
07189 settings->flood SET_TO OFF;
07190 }
07191
07192 if (block->m_modes[9] IS 48)
07193 {
07194 ENABLE_FEED_OVERRIDE();
07195 ENABLE_SPEED_OVERRIDE();
07196 settings->feed_override SET_TO ON;
07197 settings->speed_override SET_TO ON;
07198 }
07199 else if (block->m_modes[9] IS 49)
07200 {
07201 DISABLE_FEED_OVERRIDE();
07202 DISABLE_SPEED_OVERRIDE();
07203 settings->feed_override SET_TO OFF;
07204 settings->speed_override SET_TO OFF;
07205 }
07206 return RS274NGC_OK;
07207 }
|
|
||||||||||||||||
|
Definition at line 6201 of file rs274ngc.cc. 06205 {
06206 static char name[] SET_TO "convert_modal_0";
06207
06208 if (code IS G_10)
06209 {
06210 if (convert_setup(block, settings) IS RS274NGC_ERROR)
06211 ERROR_MACRO_PASS(name);
06212 }
06213 else if ((code IS G_92) OR (code IS G_92_2))
06214 {
06215 if (convert_axis_offsets(code, block, settings) IS RS274NGC_ERROR)
06216 ERROR_MACRO_PASS(name);
06217 }
06218 else
06219 BUG_MACRO(name, "Code is not G10, G92, or G92.2 in convert_modal_0");
06220 return RS274NGC_OK;
06221 }
|
|
||||||||||||||||
|
Definition at line 6252 of file rs274ngc.cc. 06256 {
06257 static char name[] SET_TO "convert_motion";
06258
06259 if ((motion IS G_0) OR (motion IS G_1))
06260 {
06261 if (convert_straight (motion, block, settings) IS RS274NGC_ERROR)
06262 ERROR_MACRO_PASS(name);
06263 }
06264 else if ((motion IS G_3) OR (motion IS G_2))
06265 {
06266 if ((settings->feed_mode IS INVERSE_TIME) AND
06267 (block->f_number IS -1.0))
06268 ERROR_MACRO(_interpreter_linetext, name, "F word missing with inverse time arc move");
06269 if (convert_arc (motion, block, settings) IS RS274NGC_ERROR)
06270 ERROR_MACRO_PASS(name);
06271 }
06272 else if (motion IS G_38_2)
06273 {
06274 if (settings->feed_mode IS INVERSE_TIME)
06275 ERROR_MACRO(_interpreter_linetext, name, "Cannot probe in inverse time feed mode");
06276 if (settings->cutter_radius_compensation ISNT OFF) /* NOT "IS ON"! */
06277 ERROR_MACRO(_interpreter_linetext, name, "Cannot probe with cutter radius compensation on");
06278 if (settings->feed_rate IS 0.0)
06279 ERROR_MACRO(_interpreter_linetext, name, "Cannot probe with zero feed rate");
06280 if (convert_probe (block, settings) IS RS274NGC_ERROR)
06281 ERROR_MACRO_PASS(name);
06282 }
06283 else if (motion IS G_80)
06284 {
06285 if((block->x_flag) OR (block->y_flag) OR (block->z_flag))
06286 ERROR_MACRO(_interpreter_linetext, name, "Coordinate setting given with G80");
06287 else
06288 {
06289 #ifdef DEBUG_EMC
06290 COMMENT("interpreter: motion mode set to none");
06291 #endif
06292 settings->motion_mode SET_TO G_80;
06293 }
06294 }
06295 else if ((motion > G_80) AND (motion < G_90))
06296 {
06297 if (convert_cycle(motion, block, settings) IS RS274NGC_ERROR)
06298 ERROR_MACRO_PASS(name);
06299 }
06300 else
06301 BUG_MACRO(name, "Code is not G0 to G3 or G80 to G89 in convert_motion");
06302
06303 return RS274NGC_OK;
06304 }
|
|
||||||||||||
|
Definition at line 4111 of file rs274ngc.cc. 04114 {
04115 static char name[] SET_TO "convert_probe";
04116 double end_x;
04117 double end_y;
04118 double end_z;
04119
04120 if (((block->x_flag IS OFF) AND (block->y_flag IS OFF)) AND
04121 (block->z_flag IS OFF))
04122 ERROR_MACRO(_interpreter_linetext, name, "X, Y, and Z words all missing with G38.2");
04123 utility_find_ends(block, settings, &end_x, &end_y, &end_z);
04124 TURN_PROBE_ON();
04125 STRAIGHT_PROBE (end_x, end_y, end_z);
04126 TURN_PROBE_OFF();
04127 settings->motion_mode SET_TO G_38_2;
04128 settings->probe_flag SET_TO ON;
04129 #ifdef STAND_ALONE_INTERP
04130 settings->current_x SET_TO ((0.9 * end_x) + (0.1 * settings->current_x));
04131 settings->current_y SET_TO ((0.9 * end_y) + (0.1 * settings->current_y));
04132 settings->current_z SET_TO ((0.9 * end_z) + (0.1 * settings->current_z));
04133 #endif
04134 return RS274NGC_OK;
04135 }
|
|
||||||||||||||||
|
Definition at line 6327 of file rs274ngc.cc. 06331 {
06332 static char name[] SET_TO "convert_retract_mode";
06333 if (g_code IS G_98)
06334 {
06335 #ifdef DEBUG_EMC
06336 COMMENT("interpreter: retract mode set to old_z");
06337 #endif
06338 settings->retract_mode SET_TO OLD_Z;
06339 }
06340 else if (g_code IS G_99)
06341 {
06342 #ifdef DEBUG_EMC
06343 COMMENT("interpreter: retract mode set to r_plane");
06344 #endif
06345 settings->retract_mode SET_TO R_PLANE;
06346 }
06347 else
06348 BUG_MACRO(name, "Code is not G98 or G99 in convert_retract_mode");
06349 return RS274NGC_OK;
06350 }
|
|
||||||||||||||||
|
Definition at line 6369 of file rs274ngc.cc. 06373 {
06374 static char name[] SET_TO "convert_set_plane";
06375 if (g_code IS G_17)
06376 {
06377 SELECT_PLANE(CANON_PLANE_XY);
06378 settings->plane SET_TO CANON_PLANE_XY;
06379 }
06380 else if (g_code IS G_18)
06381 {
06382 if (settings->cutter_radius_compensation ISNT OFF)
06383 ERROR_MACRO(_interpreter_linetext, name, "Cannot use XZ plane with cutter radius comp");
06384 SELECT_PLANE(CANON_PLANE_XZ);
06385 settings->plane SET_TO CANON_PLANE_XZ;
06386 }
06387 else if (g_code IS G_19)
06388 {
06389 if (settings->cutter_radius_compensation ISNT OFF)
06390 ERROR_MACRO(_interpreter_linetext, name, "Cannot use YZ plane with cutter radius comp");
06391 SELECT_PLANE(CANON_PLANE_YZ);
06392 settings->plane SET_TO CANON_PLANE_YZ;
06393 }
06394 else
06395 BUG_MACRO(name, "Code is not G17, G18, or G19 in convert_set_plane");
06396 return RS274NGC_OK;
06397 }
|
|
||||||||||||
|
Definition at line 4163 of file rs274ngc.cc. 04166 {
04167 static char name[] SET_TO "convert_setup";
04168 double x;
04169 double y;
04170 double z;
04171 double * parameters;
04172 int p_int;
04173
04174 parameters SET_TO settings->parameters;
04175 p_int SET_TO (int)(block->p_number + 0.0001); /* p_number is a double */
04176
04177 if (block->x_flag IS ON)
04178 {
04179 x SET_TO block->x_number;
04180 parameters[5201 + (p_int * 20)] SET_TO x;
04181 }
04182 else
04183 x SET_TO parameters[5201 + (p_int * 20)];
04184
04185 if (block->y_flag IS ON)
04186 {
04187 y SET_TO block->y_number;
04188 parameters[5202 + (p_int * 20)] SET_TO y;
04189 }
04190 else
04191 y SET_TO parameters[5202 + (p_int * 20)];
04192
04193 if (block->z_flag IS ON)
04194 {
04195 z SET_TO block->z_number;
04196 parameters[5203 + (p_int * 20)] SET_TO z;
04197 }
04198 else
04199 z SET_TO parameters[5203 + (p_int * 20)];
04200
04201 /* axis offsets could be included in the following calculations but
04202 do not need to be because the results do not change */
04203 if (p_int IS settings->origin_ngc) /* system is currently used */
04204 {
04205 settings->current_x SET_TO
04206 (settings->current_x + settings->origin_offset_x);
04207 settings->current_y SET_TO
04208 (settings->current_y + settings->origin_offset_y);
04209 settings->current_z SET_TO
04210 (settings->current_z + settings->origin_offset_z);
04211
04212 settings->origin_offset_x SET_TO x;
04213 settings->origin_offset_y SET_TO y;
04214 settings->origin_offset_z SET_TO z;
04215
04216 SET_ORIGIN_OFFSETS(x + settings->axis_offset_x,
04217 y + settings->axis_offset_y,
04218 z + settings->axis_offset_z);
04219 settings->current_x SET_TO (settings->current_x - x);
04220 settings->current_y SET_TO (settings->current_y - y);
04221 settings->current_z SET_TO (settings->current_z - z);
04222 }
04223 #ifdef DEBUG_EMC
04224 else
04225 COMMENT("interpreter: setting coordinate system origin");
04226 #endif
04227 return RS274NGC_OK;
04228 }
|
|
||||||||||||
|
Definition at line 7224 of file rs274ngc.cc. 07227 {
07228 SET_SPINDLE_SPEED(block->s_number);
07229 settings->speed SET_TO block->s_number;
07230 return RS274NGC_OK;
07231 }
|
|
||||||||||||
|
Definition at line 7297 of file rs274ngc.cc. 07300 {
07301 static char name[] SET_TO "convert_stop";
07302
07303 if (block->m_modes[4] IS 0)
07304 {
07305 PROGRAM_STOP();
07306 }
07307 else if (block->m_modes[4] IS 60)
07308 {
07309 PALLET_SHUTTLE();
07310 PROGRAM_STOP();
07311 }
07312 else if (block->m_modes[4] IS 1)
07313 {
07314 OPTIONAL_PROGRAM_STOP();
07315 }
07316 else if ((block->m_modes[4] IS 2) OR (block->m_modes[4] IS 30))
07317 { /* reset stuff here */
07318 /*1*/
07319 settings->current_x SET_TO settings->current_x
07320 + settings->origin_offset_x;
07321 settings->current_y SET_TO settings->current_y
07322 + settings->origin_offset_y;
07323 settings->current_z SET_TO settings->current_z
07324 + settings->origin_offset_z;
07325 settings->origin_offset_x SET_TO settings->parameters[5221];
07326 settings->origin_offset_y SET_TO settings->parameters[5222];
07327 settings->origin_offset_z SET_TO settings->parameters[5223];
07328 settings->current_x SET_TO settings->current_x -
07329 settings->origin_offset_x;
07330 settings->current_y SET_TO settings->current_y -
07331 settings->origin_offset_y;
07332 settings->current_z SET_TO settings->current_z -
07333 settings->origin_offset_z;
07334 SET_ORIGIN_OFFSETS(settings->origin_offset_x + settings->axis_offset_x,
07335 settings->origin_offset_y + settings->axis_offset_y,
07336 settings->origin_offset_z + settings->axis_offset_z);
07337
07338 /*2*/ if (settings->plane ISNT CANON_PLANE_XY)
07339 {
07340 SELECT_PLANE(CANON_PLANE_XY);
07341 settings->plane SET_TO CANON_PLANE_XY;
07342 }
07343
07344 /*3*/ settings->distance_mode SET_TO MODE_ABSOLUTE;
07345
07346 /*4*/ settings->feed_mode SET_TO UNITS_PER_MINUTE;
07347
07348 /*5*/ if (settings->feed_override ISNT ON)
07349 {
07350 ENABLE_FEED_OVERRIDE();
07351 settings->feed_override SET_TO ON;
07352 }
07353 if (settings->speed_override ISNT ON)
07354 {
07355 ENABLE_SPEED_OVERRIDE();
07356 settings->speed_override SET_TO ON;
07357 }
07358
07359 /*6*/ settings->cutter_radius_compensation SET_TO OFF;
07360 settings->program_x SET_TO UNKNOWN;
07361
07362 /*7*/ STOP_SPINDLE_TURNING();
07363 settings->spindle_turning SET_TO CANON_STOPPED;
07364
07365 /*8*/ settings->motion_mode SET_TO G_1;
07366
07367 /*9*/ if (settings->mist IS ON)
07368 {
07369 MIST_OFF();
07370 settings->mist SET_TO OFF;
07371 }
07372 if (settings->flood IS ON)
07373 {
07374 FLOOD_OFF();
07375 settings->flood SET_TO OFF;
07376 }
07377
07378 if (block->m_modes[4] IS 30)
07379 PALLET_SHUTTLE();
07380 PROGRAM_END();
07381 return RS274NGC_EXIT;
07382 }
07383 else
07384 BUG_MACRO(name, "Code is not M0, M1, M2, M30 or M60 in convert_stop");
07385 return RS274NGC_OK;
07386 }
|
|
||||||||||||||||
|
Definition at line 4264 of file rs274ngc.cc. 04268 {
04269 static char name[] SET_TO "convert_straight";
04270 double end_x = 0.0;
04271 double end_y = 0.0;
04272 double end_z = 0.0;
04273 double length;
04274 double rate;
04275
04276 if (((block->x_flag IS OFF) AND (block->y_flag IS OFF)) AND
04277 (block->z_flag IS OFF))
04278 ERROR_MACRO(_interpreter_linetext, name, "X, Y, and Z words all missing with G0 or G1");
04279
04280 settings->motion_mode SET_TO move;
04281 utility_find_ends(block, settings, &end_x, &end_y, &end_z);
04282
04283 if (move IS G_0)
04284 {
04285 if (settings->cutter_radius_compensation ISNT OFF)
04286 ERROR_MACRO(_interpreter_linetext, name, "Cannot use G0 with cutter radius comp");
04287 STRAIGHT_TRAVERSE(end_x, end_y, end_z);
04288 settings->current_x SET_TO end_x;
04289 settings->current_y SET_TO end_y;
04290 }
04291 else if (move IS G_1)
04292 {
04293 if (settings->cutter_radius_compensation ISNT OFF) /* NOT "IS ON"! */
04294 {
04295 if (settings->feed_mode IS INVERSE_TIME)
04296 ERROR_MACRO(_interpreter_linetext, name,
04297 "Cannot use inverse time feed with cutter radius comp");
04298 else if (block->g_modes[4] IS G_53)
04299 ERROR_MACRO(_interpreter_linetext, name, "Cannot use G53 with cutter radius comp");
04300 else if (settings->feed_rate IS 0.0)
04301 ERROR_MACRO(_interpreter_linetext, name, "Cannot do G1 with zero feed rate");
04302 else if (settings->program_x IS UNKNOWN)
04303 {
04304 if (convert_straight_comp1(settings, end_x, end_y, end_z)
04305 IS RS274NGC_ERROR)
04306 ERROR_MACRO_PASS(name);
04307 }
04308 else
04309 {
04310 if (convert_straight_comp2(settings, end_x, end_y, end_z)
04311 IS RS274NGC_ERROR)
04312 ERROR_MACRO_PASS(name);
04313 }
04314 }
04315 else
04316 {
04317 if (settings->feed_mode IS INVERSE_TIME)
04318 {
04319 if (block->f_number IS -1.0)
04320 ERROR_MACRO(_interpreter_linetext, name,
04321 "F word missing with inverse time G1 move");
04322 else
04323 {
04324 length SET_TO utility_find_straight_length
04325 (end_x, end_y, end_z,
04326 settings->current_x, settings->current_y,
04327 settings->current_z);
04328 rate SET_TO MAX(0.1, (length * block->f_number));
04329 SET_FEED_RATE (rate);
04330 settings->feed_rate SET_TO rate;
04331 }
04332 }
04333 else if (settings->feed_rate IS 0.0)
04334 ERROR_MACRO(_interpreter_linetext, name, "Cannot do G1 with zero feed rate");
04335 STRAIGHT_FEED(end_x, end_y, end_z);
04336 settings->current_x SET_TO end_x;
04337 settings->current_y SET_TO end_y;
04338 }
04339 }
04340 else
04341 BUG_MACRO(name, "Code is not G0 or G1 in convert_straight");
04342
04343 settings->current_z SET_TO end_z;
04344 return RS274NGC_OK;
04345 }
|
|
||||||||||||||||||||
|
Definition at line 3099 of file rs274ngc.cc. 03104 {
03105 static char name[] SET_TO "convert_straight_comp1";
03106 double radius;
03107 double cx, cy;
03108 double distance;
03109 double theta;
03110 double alpha;
03111 int side;
03112
03113 side SET_TO settings->cutter_radius_compensation;
03114 cx SET_TO settings->current_x;
03115 cy SET_TO settings->current_y;
03116
03117 radius SET_TO
03118 (settings->tool_table[settings->tool_table_index].diameter)/2.0;
03119 if (radius <= 0.0)
03120 ERROR_MACRO(_interpreter_linetext, name, "Bad tool radius value with cutter radius comp");
03121 distance SET_TO hypot((px - cx), (py -cy));
03122
03123 if ((side ISNT LEFT) AND (side ISNT RIGHT))
03124 BUG_MACRO(name,
03125 "Side fails to be right or left in convert_straight_comp1");
03126 else if (distance <= radius)
03127 ERROR_MACRO(_interpreter_linetext, name, "Cutter gouging with cutter radius comp");
03128
03129 theta SET_TO acos(radius/distance);
03130 alpha SET_TO (side IS LEFT) ? (atan2((cy - py), (cx - px)) - theta) :
03131 (atan2((cy - py), (cx - px)) + theta);
03132 cx SET_TO (px + (radius * cos(alpha))); /* reset to end location */
03133 cy SET_TO (py + (radius * sin(alpha)));
03134 STRAIGHT_FEED (cx, cy, end_z);
03135 settings->current_x SET_TO cx;
03136 settings->current_y SET_TO cy;
03137 settings->program_x SET_TO px;
03138 settings->program_y SET_TO py;
03139 return RS274NGC_OK;
03140 }
|
|
||||||||||||||||||||
|
Definition at line 3193 of file rs274ngc.cc. 03198 {
03199 static char name[] SET_TO "convert_straight_comp2";
03200 double radius;
03201 double cx, cy; /* actual end point */
03202 double dx, dy; /* end of added arc, if needed */
03203 double start_x, start_y; /* programmed beginning point */
03204 double theta;
03205 double alpha;
03206 double beta;
03207 double gamma;
03208 /* small angle in radians for testing corners */
03209 double small SET_TO TOLERANCE_CONCAVE_CORNER;
03210 int side;
03211
03212 side SET_TO settings->cutter_radius_compensation;
03213 start_x SET_TO settings->program_x;
03214 start_y SET_TO settings->program_y;
03215 if ((start_x IS program_end_x) AND (start_y IS program_end_y))
03216 {
03217 STRAIGHT_FEED(settings->current_x, settings->current_y, end_z);
03218 return RS274NGC_OK;
03219 }
03220 radius SET_TO
03221 (settings->tool_table[settings->tool_table_index].diameter)/2.0;
03222 if (radius <= 0.0)
03223 ERROR_MACRO(_interpreter_linetext, name, "Bad tool radius value with cutter radius comp");
03224 theta SET_TO atan2(settings->current_y - start_y,
03225 settings->current_x - start_x);
03226 alpha SET_TO
03227 atan2(program_end_y - start_y, program_end_x - start_x);
03228
03229 if (side IS LEFT)
03230 {
03231 if (theta < alpha)
03232 theta SET_TO (theta + TWO_PI);
03233 beta SET_TO ((theta - alpha) - PI2);
03234 gamma SET_TO PI2;
03235 }
03236 else if (side IS RIGHT)
03237 {
03238 if (alpha < theta)
03239 alpha SET_TO (alpha + TWO_PI);
03240 beta SET_TO ((alpha - theta) - PI2);
03241 gamma SET_TO -PI2;
03242 }
03243 else
03244 BUG_MACRO(name,
03245 "Side fails to be right or left in convert_straight_comp2");
03246 cx SET_TO (program_end_x + (radius * cos(alpha + gamma)));
03247 cy SET_TO (program_end_y + (radius * sin(alpha + gamma)));
03248 dx SET_TO (start_x + (radius * cos(alpha + gamma)));
03249 dy SET_TO (start_y + (radius * sin(alpha + gamma)));
03250
03251 if ((beta < -small) OR (beta > (PI + small)))
03252 ERROR_MACRO(_interpreter_linetext, name, "Cannot have concave corner with cutter radius comp");
03253 else if (beta > small) /* ARC NEEDED */
03254 {
03255 ARC_FEED(dx, dy, start_x, start_y, (side IS LEFT) ? -1 : 1, end_z);
03256 STRAIGHT_FEED (cx, cy, end_z);
03257 }
03258 else STRAIGHT_FEED (cx, cy, end_z);
03259
03260 settings->current_x SET_TO cx;
03261 settings->current_y SET_TO cy;
03262 settings->program_x SET_TO program_end_x;
03263 settings->program_y SET_TO program_end_y;
03264 return RS274NGC_OK;
03265 }
|
|
||||||||||||
|
Definition at line 6458 of file rs274ngc.cc. 06461 {
06462 static char name[] SET_TO "convert_tool_change";
06463
06464 CHANGE_TOOL(settings->selected_tool_slot);
06465 settings->current_slot SET_TO settings->selected_tool_slot;
06466 settings->spindle_turning SET_TO CANON_STOPPED;
06467
06468 return RS274NGC_OK;
06469 }
|
|
||||||||||||||||
|
Definition at line 6503 of file rs274ngc.cc. 06507 {
06508 static char name[] SET_TO "convert_tool_length_offset";
06509 int index;
06510 double offset;
06511
06512 if (g_code IS G_49)
06513 {
06514 USE_TOOL_LENGTH_OFFSET(0.0);
06515 settings->current_z SET_TO (settings->current_z +
06516 settings->tool_length_offset);
06517 settings->tool_length_offset SET_TO 0.0;
06518 settings->length_offset_index SET_TO 0;
06519 }
06520 else if (g_code IS G_43)
06521 {
06522 index SET_TO block->h_number;
06523 if (index IS -1)
06524 ERROR_MACRO(_interpreter_linetext, name, "Offset index missing");
06525 else if (index > GET_EXTERNAL_TOOL_MAX())
06526 ERROR_MACRO(_interpreter_linetext, name, "Tool index out of bounds");
06527 else
06528 {
06529 offset SET_TO settings->tool_table[index].length;
06530 USE_TOOL_LENGTH_OFFSET(offset);
06531 settings->current_z SET_TO
06532 (settings->current_z + settings->tool_length_offset - offset);
06533 settings->tool_length_offset SET_TO offset;
06534 settings->length_offset_index SET_TO index;
06535 }
06536 }
06537 else
06538 BUG_MACRO(name, "Code is not G43 or G49 in convert_tool_length_offset");
06539 return RS274NGC_OK;
06540 }
|
|
||||||||||||
|
Definition at line 7406 of file rs274ngc.cc. 07409 {
07410 static char name[] SET_TO "convert_tool_select";
07411
07412 if (block->t_number > GET_EXTERNAL_TOOL_MAX())
07413 ERROR_MACRO(_interpreter_linetext, name, "Selected tool slot number too large");
07414
07415 SELECT_TOOL(block->t_number);
07416 settings->selected_tool_slot SET_TO block->t_number;
07417 return RS274NGC_OK;
07418 }
|
|
||||||||||||||||
|
Definition at line 607 of file rs274ngc.cc. 00611 {
00612 static char name[] SET_TO "execute_binary1";
00613 switch (operation)
00614 {
00615 case DIVIDED_BY:
00616 if (*right IS 0.0)
00617 ERROR_MACRO(_interpreter_linetext, name, "Attempt to divide by zero");
00618 else
00619 {
00620 *left SET_TO (*left / *right);
00621 return RS274NGC_OK;
00622 }
00623 case MODULO: /* always calculates a positive answer */
00624 *left SET_TO fmod(*left, *right);
00625 if (*left < 0.0)
00626 {
00627 *left SET_TO (*left + fabs(*right));
00628 }
00629 return RS274NGC_OK;
00630 case POWER:
00631 if ((*left < 0.0) AND (floor(*right) ISNT *right))
00632 ERROR_MACRO(_interpreter_linetext, name, "Cannot raise negative number to non-integer power");
00633 *left SET_TO pow(*left, *right);
00634 return RS274NGC_OK;
00635 case TIMES:
00636 *left SET_TO (*left * *right);
00637 return RS274NGC_OK;
00638 default:
00639 BUG_MACRO(name, "Unknown operation in execute_binary1");
00640 }
00641 }
|
|
||||||||||||||||
|
Definition at line 666 of file rs274ngc.cc. 00670 {
00671 static char name[] SET_TO "execute_binary2";
00672 switch (operation)
00673 {
00674 case AND2:
00675 *left SET_TO ((*left IS 0.0) OR (*right IS 0.0)) ? 0.0 : 1.0;
00676 return RS274NGC_OK;
00677 case EXCLUSIVE_OR:
00678 *left SET_TO (((*left IS 0.0) AND (*right ISNT 0.0)) OR
00679 ((*left ISNT 0.0) AND (*right IS 0.0))) ? 1.0 : 0.0;
00680 return RS274NGC_OK;
00681 case MINUS:
00682 *left SET_TO (*left - *right);
00683 return RS274NGC_OK;
00684 case NON_EXCLUSIVE_OR:
00685 *left SET_TO ((*left ISNT 0.0) OR (*right ISNT 0.0)) ? 1.0 : 0.0;
00686 return RS274NGC_OK;
00687 case PLUS:
00688 *left SET_TO (*left + *right);
00689 return RS274NGC_OK;
00690 default:
00691 BUG_MACRO(name, "Unknown operation in execute_binary2");
00692 }
00693 }
|
|
||||||||||||||||
|
Definition at line 7743 of file rs274ngc.cc. 07747 {
07748 static char name[] SET_TO "execute_block";
07749 if (block->comment[0] ISNT 0)
07750 {
07751 if (convert_comment(block->comment) IS RS274NGC_ERROR)
07752 ERROR_MACRO_PASS(name);
07753 }
07754 if (block->g_modes[5] ISNT -1)
07755 {
07756 if (convert_feed_mode(block->g_modes[5], block, settings)
07757 IS RS274NGC_ERROR)
07758 ERROR_MACRO_PASS(name);
07759 }
07760 if (block->f_number > -1.0)
07761 {
07762 if (settings->feed_mode IS INVERSE_TIME); /* handle elsewhere */
07763 else if (convert_feed_rate(block, settings) IS RS274NGC_ERROR)
07764 ERROR_MACRO_PASS(name);
07765 }
07766 if (block->s_number > -1.0)
07767 {
07768 if (convert_speed(block, settings) IS RS274NGC_ERROR)
07769 ERROR_MACRO_PASS(name);
07770 }
07771 if (block->t_number ISNT -1)
07772 {
07773 if (convert_tool_select(block, settings) IS RS274NGC_ERROR)
07774 ERROR_MACRO_PASS(name);
07775 }
07776 if (convert_m(block, settings) IS RS274NGC_ERROR)
07777 ERROR_MACRO_PASS(name);
07778 if (convert_g(block, settings) IS RS274NGC_ERROR)
07779 ERROR_MACRO_PASS(name);
07780 if (block->m_modes[4] ISNT -1) /* converts m0, m1, m2, m30, or m60 */
07781 {
07782 if (convert_stop(block, settings) IS RS274NGC_EXIT)
07783 return RS274NGC_EXIT;
07784 }
07785 if (settings->probe_flag IS ON)
07786 return RS274NGC_EXECUTE_FINISH;
07787 else
07788 return RS274NGC_OK;
07789 }
|
|
||||||||||||
|
Definition at line 720 of file rs274ngc.cc. 00723 {
00724 static char name[] SET_TO "execute_unary";
00725 switch (operation)
00726 {
00727 case ABS:
00728 if (*double_ptr < 0.0)
00729 *double_ptr SET_TO (-1.0 * *double_ptr);
00730 return RS274NGC_OK;
00731 case ACOS:
00732 if ((*double_ptr < -1.0) OR (*double_ptr > 1.0))
00733 ERROR_MACRO(_interpreter_linetext, name, "Argument to acos out of range");
00734 else
00735 {
00736 *double_ptr SET_TO acos(*double_ptr);
00737 *double_ptr SET_TO ((*double_ptr * 180.0)/ PI);
00738 return RS274NGC_OK;
00739 }
00740 case ASIN:
00741 if ((*double_ptr < -1.0) OR (*double_ptr > 1.0))
00742 ERROR_MACRO(_interpreter_linetext, name, "Argument to asin out of range");
00743 else
00744 {
00745 *double_ptr SET_TO asin(*double_ptr);
00746 *double_ptr SET_TO ((*double_ptr * 180.0)/ PI);
00747 return RS274NGC_OK;
00748 }
00749 case COS:
00750 *double_ptr SET_TO cos((*double_ptr * PI)/180.0);
00751 return RS274NGC_OK;
00752 case EXP:
00753 *double_ptr SET_TO exp(*double_ptr);
00754 return RS274NGC_OK;
00755 case FIX:
00756 *double_ptr SET_TO floor(*double_ptr);
00757 return RS274NGC_OK;
00758 case FUP:
00759 *double_ptr SET_TO ceil(*double_ptr);
00760 return RS274NGC_OK;
00761 case LN:
00762 if (*double_ptr <= 0.0)
00763 ERROR_MACRO(_interpreter_linetext, name, "Zero or negative argument to ln");
00764 else
00765 {
00766 *double_ptr SET_TO log(*double_ptr);
00767 return RS274NGC_OK;
00768 }
00769 case ROUND:
00770 *double_ptr SET_TO (double)
00771 ((int) (*double_ptr + ((*double_ptr < 0.0) ? -0.5 : 0.5)));
00772 return RS274NGC_OK;
00773 case SIN:
00774 *double_ptr SET_TO sin((*double_ptr * PI)/180.0);
00775 return RS274NGC_OK;
00776 case SQRT:
00777 if (*double_ptr < 0.0)
00778 ERROR_MACRO(_interpreter_linetext, name, "Negative argument to sqrt");
00779 else
00780 {
00781 *double_ptr SET_TO sqrt(*double_ptr);
00782 return RS274NGC_OK;
00783 }
00784 case TAN:
00785 *double_ptr SET_TO tan((*double_ptr * PI)/180.0);
00786 return RS274NGC_OK;
00787 default:
00788 BUG_MACRO(name, "Unknown operation in execute_unary");
00789 }
00790 }
|
|
|
Definition at line 7458 of file rs274ngc.cc. 07460 {
07461 int n;
07462 block->comment[0] SET_TO 0;
07463 block->d_number SET_TO -1;
07464 block->f_number SET_TO -1.0;
07465 block->g_count SET_TO 0;
07466 for (n SET_TO 0; n < 14; n++)
07467 {
07468 block->g_modes[n] SET_TO -1;
07469 }
07470 block->h_number SET_TO -1;
07471 block->i_flag SET_TO OFF;
07472 block->j_flag SET_TO OFF;
07473 block->k_flag SET_TO OFF;
07474 block->l_number SET_TO -1;
07475 block->line_number SET_TO -1;
07476 block->motion_to_be SET_TO -1;
07477 block->m_count SET_TO 0;
07478 for (n SET_TO 0; n < 10; n++)
07479 {
07480 block->m_modes[n] SET_TO -1;
07481 }
07482 block->p_number SET_TO -1.0;
07483 block->q_number SET_TO -1.0;
07484 block->r_flag SET_TO OFF;
07485 block->s_number SET_TO -1.0;
07486 block->t_number SET_TO -1;
07487 block->x_flag SET_TO OFF;
07488 block->y_flag SET_TO OFF;
07489 block->z_flag SET_TO OFF;
07490
07491 return RS274NGC_OK;
07492 }
|
|
||||||||||||||||||||
|
Definition at line 826 of file rs274ngc.cc. 00827 : line of RS274/NGC code being processed */
00828 int * counter, /* pointer to a counter for position on line */
00829 double * double_ptr, /* pointer to double to be read */
00830 double * parameters) /* array of system parameters */
00831 {
00832 static char name[] SET_TO "read_atan";
00833 double argument2;
00834
00835 if (line [*counter] ISNT '/')
00836 ERROR_MACRO(_interpreter_linetext, name, "Slash missing");
00837
00838 *counter SET_TO (*counter + 1);
00839
00840 if(line[*counter] ISNT '[')
00841 ERROR_MACRO(_interpreter_linetext, name, "Left bracket missing after slash with atan operator");
00842
00843 if (read_real_expression (line, counter, &argument2, parameters)
00844 IS RS274NGC_ERROR)
00845 ERROR_MACRO_PASS(name);
00846
00847 *double_ptr SET_TO atan2(*double_ptr, argument2); /* value in radians */
00848 *double_ptr SET_TO ((*double_ptr * 180.0)/PI); /* convert to degrees */
00849 return RS274NGC_OK;
00850 }
|
|
||||||||||||||||||||
|
Definition at line 4379 of file rs274ngc.cc. 04380 : line of RS274 code being processed */ 04381 int * counter, /* pointer to a counter for position on the line */ 04382 block_pointer block, /* pointer to a block being filled from the line */ 04383 double * parameters) /* array of system parameters */ 04384 { 04385 static char name[] SET_TO "read_comment"; 04386 int n; 04387 04388 if (line[*counter] ISNT '(') 04389 BUG_MACRO(name, "Read_comment should not have been called"); 04390 04391 (*counter)++; 04392 for (n SET_TO 0; line[*counter] ISNT ')' ; (*counter)++, n++) 04393 { 04394 block->comment[n] SET_TO line[*counter]; 04395 } 04396 block->comment[n] SET_TO 0; 04397 (*counter)++; 04398 return RS274NGC_OK; 04399 } |
|
||||||||||||||||||||
|
Definition at line 4429 of file rs274ngc.cc. 04430 : line of RS274 code being processed */ 04431 int * counter, /* pointer to a counter for position on the line */ 04432 block_pointer block, /* pointer to a block being filled from the line */ 04433 double * parameters) /* array of system parameters */ 04434 { 04435 static char name[] SET_TO "read_d"; 04436 int value; 04437 04438 if (line[*counter] ISNT 'd') 04439 BUG_MACRO(name, "Read_d should not have been called"); 04440 04441 *counter SET_TO (*counter + 1); 04442 04443 if (block->d_number > -1) 04444 ERROR_MACRO(_interpreter_linetext, name, "Multiple D words on one line"); 04445 else if (read_integer_value(line, counter, &value, parameters) 04446 IS RS274NGC_ERROR) 04447 ERROR_MACRO_PASS(name); 04448 else if (value < 0) 04449 ERROR_MACRO(_interpreter_linetext, name, "Negative D code used"); 04450 else 04451 { 04452 block->d_number SET_TO value; 04453 return RS274NGC_OK; 04454 } 04455 } |
|
||||||||||||||||||||
|
Definition at line 4487 of file rs274ngc.cc. 04488 : line of RS274 code being processed */ 04489 int * counter, /* pointer to a counter for position on the line */ 04490 block_pointer block, /* pointer to a block being filled from the line */ 04491 double * parameters) /* array of system parameters */ 04492 { 04493 static char name[] SET_TO "read_f"; 04494 double value; 04495 04496 if (line[*counter] ISNT 'f') 04497 BUG_MACRO(name, "Read_f should not have been called"); 04498 04499 *counter SET_TO (*counter + 1); 04500 04501 if (block->f_number > -1.0) 04502 ERROR_MACRO(_interpreter_linetext, name, "Multiple F words on one line"); 04503 else if (read_real_value(line, counter, &value, parameters) 04504 IS RS274NGC_ERROR) 04505 ERROR_MACRO_PASS(name); 04506 else if (value < 0.0) 04507 ERROR_MACRO(_interpreter_linetext, name, "Negative F word found"); 04508 else 04509 { 04510 block->f_number SET_TO value; 04511 return RS274NGC_OK; 04512 } 04513 } |
|
||||||||||||||||||||
|
Definition at line 4563 of file rs274ngc.cc. 04564 : line of RS274/NGC code being processed */ 04565 int * counter, /* pointer to a counter for position on the line */ 04566 block_pointer block, /* pointer to a block being filled from the line */ 04567 double * parameters) /* array of system parameters */ 04568 { 04569 static char name[] SET_TO "read_g"; 04570 double value_read; 04571 int value; 04572 int mode; 04573 04574 if (line[*counter] ISNT 'g') 04575 BUG_MACRO(name, "Read_g should not have been called"); 04576 04577 *counter SET_TO (*counter + 1); 04578 if (read_real_value(line, counter, &value_read, parameters) 04579 IS RS274NGC_ERROR) 04580 ERROR_MACRO_PASS(name); 04581 value_read SET_TO (10.0 * value_read); 04582 value SET_TO (int)floor(value_read); 04583 04584 if ((value_read - value) > 0.999) 04585 value SET_TO (int)ceil(value_read); 04586 else if ((value_read - value) > 0.001) 04587 ERROR_MACRO(_interpreter_linetext, name,"G code out of range"); 04588 04589 if (value > 999) 04590 ERROR_MACRO(_interpreter_linetext, name, "G code out of range"); 04591 else if (value < 0) 04592 ERROR_MACRO(_interpreter_linetext, name, "Negative G code used"); 04593 04594 mode SET_TO gees[value]; 04595 04596 if (mode IS -1) 04597 ERROR_MACRO(_interpreter_linetext, name, "Unknown G code used"); 04598 else if (block->g_modes[mode] ISNT -1) 04599 ERROR_MACRO(_interpreter_linetext, name, "Two G codes used from same modal group"); 04600 else 04601 { 04602 block->g_modes[mode] SET_TO value; 04603 block->g_count++; 04604 return RS274NGC_OK; 04605 } 04606 } |
|
||||||||||||||||||||
|
Definition at line 4639 of file rs274ngc.cc. 04640 : line of RS274 code being processed */ 04641 int * counter, /* pointer to a counter for position on the line */ 04642 block_pointer block, /* pointer to a block being filled from the line */ 04643 double * parameters) /* array of system parameters */ 04644 { 04645 static char name[] SET_TO "read_i"; 04646 double value; 04647 04648 if (line[*counter] ISNT 'i') 04649 BUG_MACRO(name, "Read_i should not have been called"); 04650 04651 *counter SET_TO (*counter + 1); 04652 04653 if (block->i_flag ISNT OFF) 04654 ERROR_MACRO(_interpreter_linetext, name, "Multiple I words on one line"); 04655 else if (read_real_value(line, counter, &value, parameters) 04656 IS RS274NGC_ERROR) 04657 ERROR_MACRO_PASS(name); 04658 else 04659 { 04660 block->i_flag SET_TO ON; 04661 block->i_number SET_TO value; 04662 return RS274NGC_OK; 04663 } 04664 } |
|
||||||||||||||||
|
Definition at line 3291 of file rs274ngc.cc. 03292 : line of RS274 code being processed */
03293 int * counter, /* pointer to a counter for position on the line */
03294 int * integer_ptr) /* pointer to the value being read */
03295 {
03296 static char name[] SET_TO "read_integer_unsigned";
03297 int n;
03298 char c;
03299
03300 for (n SET_TO *counter; ; n++)
03301 {
03302 c SET_TO line[n];
03303 if ((c < 48) OR (c > 57))
03304 break;
03305 }
03306 if (n IS *counter)
03307 ERROR_MACRO(_interpreter_linetext, name, "Bad format unsigned integer");
03308 if (sscanf(line + *counter, "%d", integer_ptr) IS 0)
03309 BUG_MACRO(name, "Sscanf failure in read_integer_unsigned");
03310 else
03311 {
03312 *counter SET_TO n;
03313 return RS274NGC_OK;
03314 }
03315 }
|
|
||||||||||||||||||||
|
Definition at line 884 of file rs274ngc.cc. 00885 : line of RS274/NGC code being processed */
00886 int * counter, /* pointer to a counter for position on the line */
00887 int * integer_ptr, /* pointer to the value being read */
00888 double * parameters) /* array of system parameters */
00889 {
00890 static char name[] SET_TO "read_integer_value";
00891 double float_value;
00892
00893 if (read_real_value(line, counter, &float_value, parameters)
00894 IS RS274NGC_ERROR)
00895 ERROR_MACRO_PASS(name);
00896 *integer_ptr SET_TO (int)floor(float_value);
00897 if ((float_value - *integer_ptr) > 0.9999)
00898 {
00899 *integer_ptr SET_TO (int)ceil(float_value);
00900 }
00901 else if ((float_value - *integer_ptr) > 0.0001)
00902 ERROR_MACRO(_interpreter_linetext, name, "Non-integer value for integer");
00903 return RS274NGC_OK;
00904 }
|
|
||||||||||||||||
|
Definition at line 7511 of file rs274ngc.cc. 07513 : line of RS274/NGC code being processed */
07514 double * parameters) /* array of system parameters */
07515 {
07516 static char name[] SET_TO "read_items";
07517 int counter;
07518 int length;
07519
07520 length SET_TO strlen(line);
07521 counter SET_TO 0;
07522
07523 if (line[counter] IS '/')
07524 counter++;
07525 if (line[counter] IS 'n')
07526 {
07527 if (read_line_number(line, &counter, block) IS RS274NGC_ERROR)
07528 ERROR_MACRO_PASS(name);
07529 }
07530 for ( ; counter < length; )
07531 {
07532 if (read_one_item (line, &counter, block, parameters) IS RS274NGC_ERROR)
07533 ERROR_MACRO_PASS(name);
07534 }
07535 return RS274NGC_OK;
07536 }
|
|
||||||||||||||||||||
|
Definition at line 4697 of file rs274ngc.cc. 04698 : line of RS274 code being processed */ 04699 int * counter, /* pointer to a counter for position on the line */ 04700 block_pointer block, /* pointer to a block being filled from the line */ 04701 double * parameters) /* array of system parameters */ 04702 { 04703 static char name[] SET_TO "read_j"; 04704 double value; 04705 04706 if (line[*counter] ISNT 'j') 04707 BUG_MACRO(name, "Read_j should not have been called"); 04708 04709 *counter SET_TO (*counter + 1); 04710 04711 if (block->j_flag ISNT OFF) 04712 ERROR_MACRO(_interpreter_linetext, name, "Multiple J words on one line"); 04713 else if (read_real_value(line, counter, &value, parameters) 04714 IS RS274NGC_ERROR) 04715 ERROR_MACRO_PASS(name); 04716 else 04717 { 04718 block->j_flag SET_TO ON; 04719 block->j_number SET_TO value; 04720 return RS274NGC_OK; 04721 } 04722 } |
|
||||||||||||||||||||
|
Definition at line 4755 of file rs274ngc.cc. 04756 : line of RS274 code being processed */ 04757 int * counter, /* pointer to a counter for position on the line */ 04758 block_pointer block, /* pointer to a block being filled from the line */ 04759 double * parameters) /* array of system parameters */ 04760 { 04761 static char name[] SET_TO "read_k"; 04762 double value; 04763 04764 if (line[*counter] ISNT 'k') 04765 BUG_MACRO(name, "Read_k should not have been called"); 04766 04767 *counter SET_TO (*counter + 1); 04768 04769 if (block->k_flag ISNT OFF) 04770 ERROR_MACRO(_interpreter_linetext, name, "Multiple K words on one line"); 04771 else if (read_real_value(line, counter, &value, parameters) 04772 IS RS274NGC_ERROR) 04773 ERROR_MACRO_PASS(name); 04774 else 04775 { 04776 block->k_flag SET_TO ON; 04777 block->k_number SET_TO value; 04778 return RS274NGC_OK; 04779 } 04780 } |
|
||||||||||||||||||||
|
Definition at line 4811 of file rs274ngc.cc. 04812 : line of RS274/NGC code being processed */ 04813 int * counter, /* pointer to a counter for position on the line */ 04814 block_pointer block, /* pointer to a block being filled from the line */ 04815 double * parameters) /* array of system parameters */ 04816 { 04817 static char name[] SET_TO "read_l"; 04818 int value; 04819 04820 if (line[*counter] ISNT 'l') 04821 BUG_MACRO(name, "Read_l should not have been called"); 04822 04823 *counter SET_TO (*counter + 1); 04824 04825 if (block->l_number > -1) 04826 ERROR_MACRO(_interpreter_linetext, name, "Multiple L words on one line"); 04827 else if (read_integer_value(line, counter, &value, parameters) 04828 IS RS274NGC_ERROR) 04829 ERROR_MACRO_PASS(name); 04830 else if (value < 0) 04831 ERROR_MACRO(_interpreter_linetext, name, "Negative L word used"); 04832 else 04833 { 04834 block->l_number SET_TO value; 04835 return RS274NGC_OK; 04836 } 04837 } |
|
||||||||||||||||
|
Definition at line 7810 of file rs274ngc.cc. Referenced by rs274ngc_read().
07814 {
07815 static char name[] SET_TO "read_line";
07816 if (init_block (block) IS RS274NGC_ERROR)
07817 ERROR_MACRO_PASS(name);
07818 if (read_items(block, line, settings->parameters) IS RS274NGC_ERROR)
07819 ERROR_MACRO_PASS(name);
07820 if (utility_enhance_block(block, settings) IS RS274NGC_ERROR)
07821 ERROR_MACRO_PASS(name);
07822 if (check_items (block, settings) IS RS274NGC_ERROR)
07823 ERROR_MACRO_PASS(name);
07824 return RS274NGC_OK;
07825 }
|
|
||||||||||||||||
|
Definition at line 6569 of file rs274ngc.cc. 06570 : line of RS274 code being processed */ 06571 int * counter, /* pointer to a counter for position on the line */ 06572 block_pointer block) /* pointer to a block being filled from the line */ 06573 { 06574 static char name[] SET_TO "read_line_number"; 06575 int value; 06576 06577 if (line[*counter] ISNT 'n') 06578 BUG_MACRO(name, "Read_line_number should not have been called"); 06579 06580 *counter SET_TO (*counter + 1); 06581 if (read_integer_unsigned(line, counter, &value) IS RS274NGC_ERROR) 06582 ERROR_MACRO_PASS(name); 06583 else if (value > 99999) 06584 ERROR_MACRO(_interpreter_linetext, name, "Line number greater than 99999"); 06585 else 06586 { 06587 block->line_number SET_TO value; 06588 return RS274NGC_OK; 06589 } 06590 } |
|
||||||||||||||||||||
|
Definition at line 4871 of file rs274ngc.cc. 04872 : line of RS274 code being processed */ 04873 int * counter, /* pointer to a counter for position on the line */ 04874 block_pointer block, /* pointer to a block being filled from the line */ 04875 double * parameters) /* array of system parameters */ 04876 { 04877 static char name[] SET_TO "read_m"; 04878 int value; 04879 int mode; 04880 04881 if (line[*counter] ISNT 'm') 04882 BUG_MACRO(name, "Read_m should not have been called"); 04883 04884 *counter SET_TO (*counter + 1); 04885 04886 if (read_integer_value(line, counter, &value, parameters) IS RS274NGC_ERROR) 04887 ERROR_MACRO_PASS(name); 04888 else if (value < 0) 04889 ERROR_MACRO(_interpreter_linetext, name, "Negative M code used"); 04890 else if (value > 99) 04891 ERROR_MACRO(_interpreter_linetext, name, "M code greater than 99"); 04892 04893 mode SET_TO ems[value]; 04894 04895 if (mode IS -1) 04896 ERROR_MACRO(_interpreter_linetext, name, "Unknown M code used"); 04897 else if (block->m_modes[mode] ISNT -1) 04898 ERROR_MACRO(_interpreter_linetext, name, "Two M codes used from same modal group"); 04899 else 04900 { 04901 block->m_modes[mode] SET_TO value; 04902 block->m_count++; 04903 return RS274NGC_OK; 04904 } 04905 } |
|
||||||||||||||||||||
|
Definition at line 6634 of file rs274ngc.cc. 06635 : line of RS274/NGC code being processed */ 06636 int * counter, /* pointer to a counter for position on the line */ 06637 block_pointer block, /* pointer to a block being filled from the line */ 06638 double * parameters) /* array of system parameters */ 06639 { 06640 static char name[] SET_TO "read_one_item"; 06641 _function_pointer function_pointer; 06642 06643 switch (line[*counter]) 06644 { 06645 case 'd': 06646 function_pointer SET_TO read_d; 06647 break; 06648 case 'f': 06649 function_pointer SET_TO read_f; 06650 break; 06651 case 'g': 06652 function_pointer SET_TO read_g; 06653 break; 06654 case 'h': 06655 function_pointer SET_TO read_tool_length_offset; 06656 break; 06657 case 'i': 06658 function_pointer SET_TO read_i; 06659 break; 06660 case 'j': 06661 function_pointer SET_TO read_j; 06662 break; 06663 case 'k': 06664 function_pointer SET_TO read_k; 06665 break; 06666 case 'l': 06667 function_pointer SET_TO read_l; 06668 break; 06669 case 'm': 06670 function_pointer SET_TO read_m; 06671 break; 06672 case 'p': 06673 function_pointer SET_TO read_p; 06674 break; 06675 case 'q': 06676 function_pointer SET_TO read_q; 06677 break; 06678 case 'r': 06679 function_pointer SET_TO read_r; 06680 break; 06681 case 's': 06682 function_pointer SET_TO read_spindle_speed; 06683 break; 06684 case 't': 06685 function_pointer SET_TO read_tool; 06686 break; 06687 case 'x': 06688 function_pointer SET_TO read_x; 06689 break; 06690 case 'y': 06691 function_pointer SET_TO read_y; 06692 break; 06693 case 'z': 06694 function_pointer SET_TO read_z; 06695 break; 06696 case '(': 06697 function_pointer SET_TO read_comment; 06698 break; 06699 case '#': 06700 function_pointer SET_TO read_parameter_setting; 06701 break; 06702 default: 06703 ERROR_MACRO(_interpreter_linetext, name, "Bad character used"); 06704 } 06705 if (function_pointer (line, counter, block, parameters) IS RS274NGC_ERROR) 06706 ERROR_MACRO_PASS(name); 06707 return RS274NGC_OK; 06708 } |
|
||||||||||||||||
|
Definition at line 922 of file rs274ngc.cc. 00923 : line of RS274/NGC code being processed */
00924 int * counter, /* pointer to a counter for position on the line */
00925 int * operation) /* pointer to operation to be read */
00926 {
00927 static char name[] SET_TO "read_operation";
00928 char c;
00929
00930 c SET_TO line[*counter];
00931 *counter SET_TO (*counter + 1);
00932 switch(c)
00933 {
00934 case '+':
00935 *operation SET_TO PLUS;
00936 return RS274NGC_OK;
00937 case '-':
00938 *operation SET_TO MINUS;
00939 return RS274NGC_OK;
00940 case '/':
00941 *operation SET_TO DIVIDED_BY;
00942 return RS274NGC_OK;
00943 case '*':
00944 if(strncmp((line + *counter), "*", 1) IS 0)
00945 {
00946 *operation SET_TO POWER;
00947 *counter SET_TO (*counter + 1);
00948 return RS274NGC_OK;
00949 }
00950 else
00951 {
00952 *operation SET_TO TIMES;
00953 return RS274NGC_OK;
00954 }
00955 case ']':
00956 *operation SET_TO RIGHT_BRACKET;
00957 return RS274NGC_OK;
00958 case 'a':
00959 if(strncmp((line + *counter), "nd", 2) IS 0)
00960 {
00961 *operation SET_TO AND2;
00962 *counter SET_TO (*counter + 2);
00963 return RS274NGC_OK;
00964 }
00965 else
00966 ERROR_MACRO(_interpreter_linetext, name, "Unknown operation name starting with A");
00967 case 'm':
00968 if(strncmp((line + *counter), "od", 2) IS 0)
00969 {
00970 *operation SET_TO MODULO;
00971 *counter SET_TO (*counter + 2);
00972 return RS274NGC_OK;
00973 }
00974 else
00975 ERROR_MACRO(_interpreter_linetext, name, "Unknown operation name starting with M");
00976 case 'o':
00977 if(strncmp((line + *counter), "r", 1) IS 0)
00978 {
00979 *operation SET_TO NON_EXCLUSIVE_OR;
00980 *counter SET_TO (*counter + 1);
00981 return RS274NGC_OK;
00982 }
00983 else
00984 ERROR_MACRO(_interpreter_linetext, name, "Unknown operation name starting with O");
00985 case 'x':
00986 if(strncmp((line + *counter), "or", 2) IS 0)
00987 {
00988 *operation SET_TO EXCLUSIVE_OR;
00989 *counter SET_TO (*counter + 2);
00990 return RS274NGC_OK;
00991 }
00992 else
00993 ERROR_MACRO(_interpreter_linetext, name, "Unknown operation name starting with X");
00994 case 0:
00995 ERROR_MACRO(_interpreter_linetext, name, "Unclosed expression");
00996 default:
00997 ERROR_MACRO(_interpreter_linetext, name, "Unknown operation");
00998 }
00999 }
|
|
||||||||||||||||
|
Definition at line 1023 of file rs274ngc.cc. 01024 : line of RS274/NGC code being processed */
01025 int * counter, /* pointer to a counter for position on the line */
01026 int * operation) /* pointer to operation to be read */
01027 {
01028 static char name[] SET_TO "read_operation_unary";
01029 char c;
01030
01031 c SET_TO line[*counter];
01032 *counter SET_TO (*counter + 1);
01033 switch (c)
01034 {
01035 case 'a':
01036 if(strncmp((line + *counter), "bs", 2) IS 0)
01037 {
01038 *operation SET_TO ABS;
01039 *counter SET_TO (*counter + 2);
01040 return RS274NGC_OK;
01041 }
01042 else if(strncmp((line + *counter), "cos", 3) IS 0)
01043 {
01044 *operation SET_TO ACOS;
01045 *counter SET_TO (*counter + 3);
01046 return RS274NGC_OK;
01047 }
01048 else if(strncmp((line + *counter), "sin", 3) IS 0)
01049 {
01050 *operation SET_TO ASIN;
01051 *counter SET_TO (*counter + 3);
01052 return RS274NGC_OK;
01053 }
01054 else if(strncmp((line + *counter), "tan", 3) IS 0)
01055 {
01056 *operation SET_TO ATAN;
01057 *counter SET_TO (*counter + 3);
01058 return RS274NGC_OK;
01059 }
01060 else
01061 ERROR_MACRO(_interpreter_linetext, name, "Unknown word starting with A");
01062 case 'c':
01063 if(strncmp((line + *counter), "os", 2) IS 0)
01064 {
01065 *operation SET_TO COS;
01066 *counter SET_TO (*counter + 2);
01067 return RS274NGC_OK;
01068 }
01069 else
01070 ERROR_MACRO(_interpreter_linetext, name, "Unknown word starting with C");
01071 case 'e':
01072 if(strncmp((line + *counter), "xp", 2) IS 0)
01073 {
01074 *operation SET_TO EXP;
01075 *counter SET_TO (*counter + 2);
01076 return RS274NGC_OK;
01077 }
01078 else
01079 ERROR_MACRO(_interpreter_linetext, name, "Unknown word starting with E");
01080 case 'f':
01081 if(strncmp((line + *counter), "ix", 2) IS 0)
01082 {
01083 *operation SET_TO FIX;
01084 *counter SET_TO (*counter + 2);
01085 return RS274NGC_OK;
01086 }
01087 else if(strncmp((line + *counter), "up", 2) IS 0)
01088 {
01089 *operation SET_TO FUP;
01090 *counter SET_TO (*counter + 2);
01091 return RS274NGC_OK;
01092 }
01093 else
01094 ERROR_MACRO(_interpreter_linetext, name, "Unknown word starting with F");
01095 case 'l':
01096 if(strncmp((line + *counter), "n", 1) IS 0)
01097 {
01098 *operation SET_TO LN;
01099 *counter SET_TO (*counter + 1);
01100 return RS274NGC_OK;
01101 }
01102 else
01103 ERROR_MACRO(_interpreter_linetext, name, "Unknown word starting with L");
01104 case 'r':
01105 if(strncmp((line + *counter), "ound", 4) IS 0)
01106 {
01107 *operation SET_TO ROUND;
01108 *counter SET_TO (*counter + 4);
01109 return RS274NGC_OK;
01110 }
01111 else
01112 ERROR_MACRO(_interpreter_linetext, name, "Unknown word starting with R");
01113 case 's':
01114 if(strncmp((line + *counter), "in", 2) IS 0)
01115 {
01116 *operation SET_TO SIN;
01117 *counter SET_TO (*counter + 2);
01118 return RS274NGC_OK;
01119 }
01120 else if(strncmp((line + *counter), "qrt", 3) IS 0)
01121 {
01122 *operation SET_TO SQRT;
01123 *counter SET_TO (*counter + 3);
01124 return RS274NGC_OK;
01125 }
01126 else
01127 ERROR_MACRO(_interpreter_linetext, name, "Unknown word starting with S");
01128 case 't':
01129 if(strncmp((line + *counter), "an", 2) IS 0)
01130 {
01131 *operation SET_TO TAN;
01132 *counter SET_TO (*counter + 2);
01133 return RS274NGC_OK;
01134 }
01135 else
01136 ERROR_MACRO(_interpreter_linetext, name, "Unknown word starting with T");
01137 default:
01138 ERROR_MACRO(_interpreter_linetext, name, "Unknown word where unary operation could be");
01139 }
01140 }
|
|
||||||||||||||||||||
|
Definition at line 4938 of file rs274ngc.cc. 04939 : line of RS274/NGC code being processed */ 04940 int * counter, /* pointer to a counter for position on the line */ 04941 block_pointer block, /* pointer to a block being filled from the line */ 04942 double * parameters) /* array of system parameters */ 04943 { 04944 static char name[] SET_TO "read_p"; 04945 double value; 04946 04947 if (line[*counter] ISNT 'p') 04948 BUG_MACRO(name, "Read_p should not have been called"); 04949 04950 *counter SET_TO (*counter + 1); 04951 if (block->p_number > -1.0) 04952 ERROR_MACRO(_interpreter_linetext, name, "Multiple P words on one line"); 04953 else if (read_real_value(line, counter, &value, parameters) 04954 IS RS274NGC_ERROR) 04955 ERROR_MACRO_PASS(name); 04956 else if (value < 0.0) 04957 ERROR_MACRO(_interpreter_linetext, name, "Negative P value used"); 04958 else 04959 { 04960 block->p_number SET_TO value; 04961 return RS274NGC_OK; 04962 } 04963 } |
|
||||||||||||||||||||
|
Definition at line 1523 of file rs274ngc.cc. 01524 : line of RS274/NGC code being processed */
01525 int * counter, /* pointer to a counter for position on the line */
01526 double * double_ptr, /* pointer to double to be read */
01527 double * parameters) /* array of system parameters */
01528 {
01529 static char name[] SET_TO "read_parameter";
01530 int index;
01531
01532 if (line[*counter] ISNT '#')
01533 BUG_MACRO(name, "Read_parameter should not have been called");
01534 *counter SET_TO (*counter + 1);
01535 if (read_integer_value(line, counter, &index, parameters) IS RS274NGC_ERROR)
01536 ERROR_MACRO_PASS(name);
01537 else if ((index < 1) OR (index >= RS274NGC_MAX_PARAMETERS))
01538 ERROR_MACRO(_interpreter_linetext, name, "Parameter number out of range");
01539 else
01540 {
01541 *double_ptr SET_TO parameters[index];
01542 return RS274NGC_OK;
01543 }
01544 }
|
|
||||||||||||||||||||
|
Definition at line 5015 of file rs274ngc.cc. 05016 : line of RS274/NGC code being processed */ 05017 int * counter, /* pointer to a counter for position on the line */ 05018 block_pointer block, /* pointer to a block being filled from the line */ 05019 double * parameters) /* array of system parameters */ 05020 { 05021 static char name[] SET_TO "read_parameter_setting"; 05022 int index; 05023 double value; 05024 05025 if (line[*counter] ISNT '#') 05026 BUG_MACRO(name, "Read_parameter_setting should not have been called"); 05027 *counter SET_TO (*counter + 1); 05028 if (read_integer_value(line, counter, &index, parameters) IS RS274NGC_ERROR) 05029 ERROR_MACRO_PASS(name); 05030 else if ((index < 1) OR (index >= RS274NGC_MAX_PARAMETERS)) 05031 ERROR_MACRO(_interpreter_linetext, name, "Parameter number out of range"); 05032 else if (line[*counter] ISNT '=') 05033 ERROR_MACRO(_interpreter_linetext, name, "Equal sign missing in parameter setting"); 05034 *counter SET_TO (*counter + 1); 05035 if (read_real_value(line, counter, &value, parameters) IS RS274NGC_ERROR) 05036 ERROR_MACRO_PASS(name); 05037 else 05038 { 05039 parameters[index] SET_TO value; 05040 return RS274NGC_OK; 05041 } 05042 } |
|
||||||||||||||||||||
|
Definition at line 5072 of file rs274ngc.cc. 05073 : line of RS274/NGC code being processed */ 05074 int * counter, /* pointer to a counter for position on the line */ 05075 block_pointer block, /* pointer to a block being filled from the line */ 05076 double * parameters) /* array of system parameters */ 05077 { 05078 static char name[] SET_TO "read_q"; 05079 double value; 05080 05081 if (line[*counter] ISNT 'q') 05082 BUG_MACRO(name, "Read_q should not have been called"); 05083 05084 *counter SET_TO (*counter + 1); 05085 if (block->q_number > -1.0) 05086 ERROR_MACRO(_interpreter_linetext, name, "Multiple Q words on one line"); 05087 else if (read_real_value(line, counter, &value, parameters) 05088 IS RS274NGC_ERROR) 05089 ERROR_MACRO_PASS(name); 05090 else if (value < 0.0) 05091 ERROR_MACRO(_interpreter_linetext, name, "Negative Q value used"); 05092 else 05093 { 05094 block->q_number SET_TO value; 05095 return RS274NGC_OK; 05096 } 05097 } |
|
||||||||||||||||||||
|
Definition at line 5130 of file rs274ngc.cc. 05131 : line of RS274 code being processed */ 05132 int * counter, /* pointer to a counter for position on the line */ 05133 block_pointer block, /* pointer to a block being filled from the line */ 05134 double * parameters) /* array of system parameters */ 05135 { 05136 static char name[] SET_TO "read_r"; 05137 double value; 05138 05139 if (line[*counter] ISNT 'r') 05140 BUG_MACRO(name, "Read_r should not have been called"); 05141 05142 *counter SET_TO (*counter + 1); 05143 05144 if (block->r_flag ISNT OFF) 05145 ERROR_MACRO(_interpreter_linetext, name, "Multiple R words on one line"); 05146 else if (read_real_value(line, counter, &value, parameters) 05147 IS RS274NGC_ERROR) 05148 ERROR_MACRO_PASS(name); 05149 else 05150 { 05151 block->r_flag SET_TO ON; 05152 block->r_number SET_TO value; 05153 return RS274NGC_OK; 05154 } 05155 } |
|
||||||||||||||||||||
|
Definition at line 1853 of file rs274ngc.cc. 01854 : line of RS274/NGC code being processed */
01855 int * counter, /* pointer to a counter for position on the line */
01856 double * hold2, /* pointer to double to be read */
01857 double * parameters) /* array of system parameters */
01858 {
01859 static char name[] SET_TO "read_real_expression";
01860 double value;
01861 double hold1;
01862 int waiting_operation; /* always a bop2 */
01863 int last_operation;
01864 int next_operation;
01865
01866 if (line[*counter] ISNT '[')
01867 BUG_MACRO(name, "Read_real_expression should not have been called");
01868 *counter SET_TO (*counter + 1);
01869 waiting_operation SET_TO PLUS;
01870 *hold2 SET_TO 0.0;
01871 last_operation SET_TO PLUS;
01872
01873 for (;;)
01874 {
01875 if (read_real_value(line, counter, &value, parameters) ISNT RS274NGC_OK)
01876 ERROR_MACRO_PASS(name);
01877 if (read_operation(line, counter, &next_operation) ISNT RS274NGC_OK)
01878 ERROR_MACRO_PASS(name);
01879 if (next_operation IS RIGHT_BRACKET)
01880 {
01881 if (last_operation < AND2)
01882 {
01883 if (execute_binary1(&hold1,last_operation, &value)
01884 ISNT RS274NGC_OK)
01885 ERROR_MACRO_PASS(name);
01886 if (execute_binary2(hold2, waiting_operation, &hold1)
01887 ISNT RS274NGC_OK)
01888 ERROR_MACRO_PASS(name);
01889 }
01890 else if (execute_binary2(hold2, waiting_operation, &value)
01891 ISNT RS274NGC_OK)
01892 ERROR_MACRO_PASS(name);
01893 else {}
01894 return RS274NGC_OK;
01895 }
01896 else if (next_operation < AND2) /* next operation is a bop1 */
01897 {
01898 if (last_operation >= AND2)
01899 {
01900 hold1 SET_TO value;
01901 }
01902 else if (execute_binary1(&hold1, last_operation, &value)
01903 ISNT RS274NGC_OK)
01904 ERROR_MACRO_PASS(name);
01905 }
01906 else /* next operation is a bop2 */
01907 {
01908 if (last_operation < AND2)
01909 {
01910 if (execute_binary1(&hold1, last_operation, &value)
01911 ISNT RS274NGC_OK)
01912 ERROR_MACRO_PASS(name);
01913 if (execute_binary2(hold2, waiting_operation, &hold1)
01914 ISNT RS274NGC_OK)
01915 ERROR_MACRO_PASS(name);
01916 }
01917 else
01918 {
01919 if (execute_binary2(hold2, waiting_operation, &value)
01920 ISNT RS274NGC_OK)
01921 ERROR_MACRO_PASS(name);
01922 }
01923 waiting_operation SET_TO next_operation;
01924 }
01925 last_operation SET_TO next_operation;
01926 }
01927 }
|
|
||||||||||||||||
|
Definition at line 1965 of file rs274ngc.cc. 01966 : line of RS274/NGC code being processed */
01967 int * counter, /* pointer to a counter for position on the line */
01968 double * double_ptr) /* pointer to double to be read */
01969 {
01970 static char name[] SET_TO "read_real_number";
01971 int n;
01972 char c;
01973 int flag_point; /* set to ON if decimal point found */
01974 int flag_digit; /* set to ON if digit found */
01975
01976 n SET_TO *counter;
01977 flag_point SET_TO OFF;
01978 flag_digit SET_TO OFF;
01979
01980 /* check first character */
01981 c SET_TO line[n];
01982 if (c IS '+')
01983 {
01984 *counter SET_TO (*counter + 1); /* skip plus sign */
01985 n++;
01986 }
01987 else if (c IS '-')
01988 {
01989 n++;
01990 }
01991 else if ((c ISNT '.') AND ((c < 48) OR (c > 57)))
01992 ERROR_MACRO(_interpreter_linetext, name, "Bad number format");
01993
01994 /* check out rest of characters (must be digit or decimal point) */
01995 for (; (c SET_TO line[n]) ISNT (char) NULL; n++)
01996 {
01997 if (( 47 < c) AND ( c < 58))
01998 {
01999 flag_digit SET_TO ON;
02000 }
02001 else if (c IS '.')
02002 {
02003 if (flag_point IS OFF)
02004 {
02005 flag_point SET_TO ON;
02006 }
02007 else
02008 break;
02009 }
02010 else
02011 break;
02012 }
02013
02014 if (flag_digit IS OFF)
02015 ERROR_MACRO(_interpreter_linetext, name, "No digits found where real number should be");
02016
02017 line[n] SET_TO (char) NULL; /* temporary string termination for sscanf */
02018 if (sscanf(line + *counter, "%lf", double_ptr) IS 0)
02019 {
02020 line[n] SET_TO c;
02021 BUG_MACRO(name, "Sscanf failure in read_real_number");
02022 }
02023 else
02024 {
02025 line[n] SET_TO c;
02026 *counter SET_TO n;
02027 return RS274NGC_OK;
02028 }
02029 }
|
|
||||||||||||||||||||
|
Definition at line 3357 of file rs274ngc.cc. 03358 : line of RS274/NGC code being processed */
03359 int * counter, /* pointer to a counter for position on the line */
03360 double * double_ptr, /* pointer to double to be read */
03361 double * parameters) /* array of system parameters */
03362 {
03363 static char name[] SET_TO "read_real_value";
03364 char c;
03365
03366 c SET_TO line[*counter];
03367 if (c IS 0)
03368 ERROR_MACRO(_interpreter_linetext, name, "No characters found in reading real value");
03369 else if (c IS '[')
03370 return read_real_expression (line, counter, double_ptr, parameters);
03371 else if (c IS '#')
03372 return read_parameter(line, counter, double_ptr, parameters);
03373 else if ((c >= 'a') AND (c <= 'z'))
03374 return read_unary(line, counter, double_ptr, parameters);
03375 else
03376 return read_real_number(line, counter, double_ptr);
03377 }
|
|
||||||||||||||||||||
|
Definition at line 5186 of file rs274ngc.cc. 05187 : line of RS274 code being processed */ 05188 int * counter, /* pointer to a counter for position on the line */ 05189 block_pointer block, /* pointer to a block being filled from the line */ 05190 double * parameters) /* array of system parameters */ 05191 { 05192 static char name[] SET_TO "read_spindle_speed"; 05193 double speed; 05194 05195 if (line[*counter] ISNT 's') 05196 BUG_MACRO(name, "Read_spindle_speed should not have been called"); 05197 05198 *counter SET_TO (*counter + 1); 05199 05200 if (block->s_number > -1.0) 05201 ERROR_MACRO(_interpreter_linetext, name, "Multiple S word spindle speed settings on one line"); 05202 else if (read_real_value(line, counter, &speed, parameters) 05203 IS RS274NGC_ERROR) 05204 ERROR_MACRO_PASS(name); 05205 else if (speed < 0.0) 05206 ERROR_MACRO(_interpreter_linetext, name, "Negative spindle speed found"); 05207 else 05208 { 05209 block->s_number SET_TO speed; 05210 return RS274NGC_OK; 05211 } 05212 } |
|
||||||||||||||||||||||||||||
|
Definition at line 7879 of file rs274ngc.cc. 07886 {
07887 static char name[] SET_TO "read_text";
07888 char * returned_value;
07889 int len;
07890
07891 if (command IS NULL)
07892 {
07893 returned_value SET_TO fgets(raw_line, INTERP_TEXT_SIZE, inport);
07894 // knock off CR, LF
07895 len = strlen(raw_line) - 1; // set len to index of last char
07896 while (len >= 0)
07897 {
07898 if (isspace(raw_line[len]))
07899 {
07900 raw_line[len] = 0;
07901 len--;
07902 }
07903 else
07904 {
07905 break;
07906 }
07907 }
07908 if (returned_value IS NULL)
07909 return RS274NGC_ENDFILE;
07910 else
07911 strcpy(line, raw_line);
07912 }
07913 else
07914 {
07915 strcpy(raw_line, command);
07916 strcpy(line, command);
07917 }
07918
07919 if (close_and_downcase(line) IS RS274NGC_ERROR)
07920 ERROR_MACRO_PASS(name);
07921
07922 if (((line[0] IS '/') AND ((block_delete IS ON) OR (line[1] IS 0))) OR
07923 (line[0] IS 0))
07924 *length SET_TO 0;
07925 else
07926 *length SET_TO strlen(line);
07927
07928 return RS274NGC_OK;
07929 }
|
|
||||||||||||||||||||
|
Definition at line 5239 of file rs274ngc.cc. 05240 : line of RS274/NGC code being processed */ 05241 int * counter, /* pointer to a counter for position on the line */ 05242 block_pointer block, /* pointer to a block being filled from the line */ 05243 double * parameters) /* array of system parameters */ 05244 { 05245 static char name[] SET_TO "read_tool"; 05246 int value; 05247 05248 if (line[*counter] ISNT 't') 05249 BUG_MACRO(name, "Read_tool should not have been called"); 05250 05251 *counter SET_TO (*counter + 1); 05252 if (block->t_number > -1) 05253 ERROR_MACRO(_interpreter_linetext, name, "Multiple T words (tool ids) on one line"); 05254 if (read_integer_value(line, counter, &value, parameters) IS RS274NGC_ERROR) 05255 ERROR_MACRO_PASS(name); 05256 else if (value < 0) 05257 ERROR_MACRO(_interpreter_linetext, name, "Negative tool id used"); 05258 else 05259 { 05260 block->t_number SET_TO value; 05261 return RS274NGC_OK; 05262 } 05263 } |
|
||||||||||||||||||||
|
Definition at line 5292 of file rs274ngc.cc. 05293 : line of RS274/NGC code being processed */ 05294 int * counter, /* pointer to a counter for position on the line */ 05295 block_pointer block, /* pointer to a block being filled from the line */ 05296 double * parameters) /* array of system parameters */ 05297 { 05298 static char name[] SET_TO "read_tool_length_offset"; 05299 int value; 05300 05301 if (line[*counter] ISNT 'h') 05302 BUG_MACRO(name, "Read_tool_length_offset should not have been called"); 05303 05304 *counter SET_TO (*counter + 1); 05305 if (block->h_number > -1) 05306 ERROR_MACRO(_interpreter_linetext, name, "Multiple tool length offsets on one line"); 05307 if (read_integer_value(line, counter, &value, parameters) IS RS274NGC_ERROR) 05308 ERROR_MACRO_PASS(name); 05309 else if (value < 0) 05310 ERROR_MACRO(_interpreter_linetext, name, "Negative tool length offset used"); 05311 else 05312 { 05313 block->h_number SET_TO value; 05314 return RS274NGC_OK; 05315 } 05316 } |
|
||||||||||||||||||||
|
Definition at line 2057 of file rs274ngc.cc. 02058 : line of RS274/NGC code being processed */
02059 int * counter, /* pointer to a counter for position on the line */
02060 double * double_ptr, /* pointer to double to be read */
02061 double * parameters) /* array of system parameters */
02062 {
02063 static char name[] SET_TO "read_unary";
02064 int operation;
02065
02066 if (read_operation_unary (line, counter, &operation) IS RS274NGC_ERROR)
02067 ERROR_MACRO_PASS(name);
02068 if (line[*counter] ISNT '[')
02069 ERROR_MACRO(_interpreter_linetext, name, "Left bracket missing after unary operation name");
02070 if (read_real_expression (line, counter, double_ptr, parameters)
02071 IS RS274NGC_ERROR)
02072 ERROR_MACRO_PASS(name);
02073
02074 if (operation IS ATAN)
02075 return read_atan(line, counter, double_ptr, parameters);
02076 else
02077 return execute_unary (double_ptr, operation);
02078 }
|
|
||||||||||||||||||||
|
Definition at line 5349 of file rs274ngc.cc. 05350 : line of RS274 code being processed */ 05351 int * counter, /* pointer to a counter for position on the line */ 05352 block_pointer block, /* pointer to a block being filled from the line */ 05353 double * parameters) /* array of system parameters */ 05354 { 05355 static char name[] SET_TO "read_x"; 05356 double value; 05357 05358 if (line[*counter] ISNT 'x') 05359 BUG_MACRO(name, "Read_x should not have been called"); 05360 05361 *counter SET_TO (*counter + 1); 05362 05363 if (block->x_flag ISNT OFF) 05364 ERROR_MACRO(_interpreter_linetext, name, "Multiple X words on one line"); 05365 else if (read_real_value(line, counter, &value, parameters) 05366 IS RS274NGC_ERROR) 05367 ERROR_MACRO_PASS(name); 05368 else 05369 { 05370 block->x_flag SET_TO ON; 05371 block->x_number SET_TO value; 05372 return RS274NGC_OK; 05373 } 05374 } |
|
||||||||||||||||||||
|
Definition at line 5407 of file rs274ngc.cc. 05408 : line of RS274 code being processed */ 05409 int * counter, /* pointer to a counter for position on the line */ 05410 block_pointer block, /* pointer to a block being filled from the line */ 05411 double * parameters) /* array of system parameters */ 05412 { 05413 static char name[] SET_TO "read_y"; 05414 double value; 05415 05416 if (line[*counter] ISNT 'y') 05417 BUG_MACRO(name, "Read_y should not have been called"); 05418 05419 *counter SET_TO (*counter + 1); 05420 05421 if (block->y_flag ISNT OFF) 05422 ERROR_MACRO(_interpreter_linetext, name, "Multiple Y words on one line"); 05423 else if (read_real_value(line, counter, &value, parameters) 05424 IS RS274NGC_ERROR) 05425 ERROR_MACRO_PASS(name); 05426 else 05427 { 05428 block->y_flag SET_TO ON; 05429 block->y_number SET_TO value; 05430 return RS274NGC_OK; 05431 } 05432 } |
|
||||||||||||||||||||
|
Definition at line 5465 of file rs274ngc.cc. 05466 : line of RS274 code being processed */ 05467 int * counter, /* pointer to a counter for position on the line */ 05468 block_pointer block, /* pointer to a block being filled from the line */ 05469 double * parameters) /* array of system parameters */ 05470 { 05471 static char name[] SET_TO "read_z"; 05472 double value; 05473 05474 if (line[*counter] ISNT 'z') 05475 BUG_MACRO(name, "Read_z should not have been called"); 05476 05477 *counter SET_TO (*counter + 1); 05478 05479 if (block->z_flag ISNT OFF) 05480 ERROR_MACRO(_interpreter_linetext, name, "Multiple Z words on one line"); 05481 else if (read_real_value(line, counter, &value, parameters) 05482 IS RS274NGC_ERROR) 05483 ERROR_MACRO_PASS(name); 05484 else 05485 { 05486 block->z_flag SET_TO ON; 05487 block->z_number SET_TO value; 05488 return RS274NGC_OK; 05489 } 05490 } |
|
|
Definition at line 8832 of file rs274ngc.cc. 08833 {
08834 int t;
08835
08836 for (t = 0; t < RS274NGC_ACTIVE_G_CODES; t++)
08837 {
08838 codes[t] = _interpreter_active_g_codes[t];
08839 }
08840
08841 return RS274NGC_OK;
08842 }
|
|
|
Definition at line 8856 of file rs274ngc.cc. 08857 {
08858 int t;
08859
08860 for (t = 0; t < RS274NGC_ACTIVE_M_CODES; t++)
08861 {
08862 codes[t] = _interpreter_active_m_codes[t];
08863 }
08864
08865 return RS274NGC_OK;
08866 }
|
|
|
Definition at line 8880 of file rs274ngc.cc. 08881 {
08882 int t;
08883
08884 for (t = 0; t < RS274NGC_ACTIVE_SETTINGS; t++)
08885 {
08886 settings[t] = _interpreter_active_settings[t];
08887 }
08888
08889 return RS274NGC_OK;
08890 }
|
|
|
Definition at line 8096 of file rs274ngc.cc. Referenced by emcTaskPlanClose(), and main().
08097 {
08098 if (_interpreter_fp ISNT NULL)
08099 {
08100 fclose(_interpreter_fp);
08101 _interpreter_fp SET_TO NULL;
08102 }
08103
08104 _interpreter_filename[0] SET_TO 0;
08105
08106 rs274ngc_reset();
08107
08108 return RS274NGC_OK;
08109 }
|
|
|
Definition at line 8029 of file rs274ngc.cc. Referenced by emcTaskPlanCommand().
08030 {
08031 return _interpreter_linetext;
08032 }
|
|
|
Definition at line 8150 of file rs274ngc.cc. 08151 : line of NC code to execute (may be null) */
08152 {
08153 static char name[] SET_TO "rs274ngc_execute";
08154
08155 if (_interpreter_settings.probe_flag IS ON)
08156 {
08157 if (IS_EXTERNAL_QUEUE_EMPTY() IS 0)
08158 {
08159 /* rs274ngc_reset(); */
08160 ERR_MACRO(_interpreter_linetext, name, "Queue is not empty after probing");
08161 }
08162 set_probe_data(&_interpreter_settings);
08163 _interpreter_settings.probe_flag SET_TO OFF;
08164 }
08165
08166 if (command ISNT NULL)
08167 {
08168 if(strlen(command) > (INTERP_TEXT_SIZE -1))
08169 ERR_MACRO(_interpreter_linetext, name, "Command too long");
08170 else if (read_text (command, NULL, _interpreter_linetext,
08171 _interpreter_blocktext, &_interpreter_length,
08172 _interpreter_settings.block_delete) ISNT RS274NGC_OK)
08173 ERR_MACRO_PASS(name);
08174 else if (_interpreter_length IS 0) /* blank or block-deleted command */
08175 return RS274NGC_OK;
08176 else if (read_line(_interpreter_blocktext, &_interpreter_block,
08177 &_interpreter_settings) IS RS274NGC_ERROR)
08178 ERR_MACRO_PASS(name);
08179 _textline++;
08180 }
08181
08182 if (_interpreter_length IS 0) /* blank or block deleted line from file */
08183 {
08184 write_g_codes((block *) NULL, &_interpreter_settings, _textline,
08185 &_interpreter_active_g_codes[0]);
08186 write_m_codes((block *) NULL, &_interpreter_settings, _textline,
08187 &_interpreter_active_m_codes[0]);
08188 write_settings((block *) NULL, &_interpreter_settings, _textline,
08189 &_interpreter_active_settings[0]);
08190
08191 return RS274NGC_OK;
08192 }
08193
08194 _interpreter_status SET_TO
08195 execute_block (&_interpreter_block, &_interpreter_settings, _textline);
08196
08197 // write most recent G codes
08198 write_g_codes(&_interpreter_block, &_interpreter_settings, _textline,
08199 &_interpreter_active_g_codes[0]);
08200 write_m_codes(&_interpreter_block, &_interpreter_settings, _textline,
08201 &_interpreter_active_m_codes[0]);
08202 write_settings(&_interpreter_block, &_interpreter_settings, _textline,
08203 &_interpreter_active_settings[0]);
08204
08205 if (_interpreter_status IS RS274NGC_EXIT) /* program over */
08206 {
08207 if (_interpreter_fp ISNT NULL)
08208 {
08209 fclose(_interpreter_fp);
08210 _interpreter_fp SET_TO NULL;
08211 _textline SET_TO 0;
08212 _interpreter_linetext[0] SET_TO 0;
08213 }
08214 return RS274NGC_EXIT;
08215 }
08216 else if (_interpreter_status IS RS274NGC_ERROR)
08217 ERR_MACRO_PASS(name);
08218 else if (_interpreter_status IS RS274NGC_EXECUTE_FINISH)
08219 return RS274NGC_EXECUTE_FINISH;
08220 else /* satisfactory execution of a line */
08221 return RS274NGC_OK;
08222 }
|
|
|
Definition at line 8240 of file rs274ngc.cc. Referenced by emcTaskPlanExit(), and main().
08241 {
08242 rs274ngc_save_parameters(RS274NGC_PARAMETER_FILE,
08243 _interpreter_settings.parameters);
08244
08245 rs274ngc_reset();
08246
08247 return RS274NGC_OK;
08248 }
|
|
|
Definition at line 8049 of file rs274ngc.cc. 08050 {
08051 return _interpreter_filename;
08052 }
|
|
|
load settings from INI file.
Definition at line 8791 of file rs274ngc.cc. 08792 {
08793 INIFILE inifile;
08794 const char *inistring;
08795
08796 // open it
08797 if (-1 == inifile.open(filename))
08798 {
08799 return -1;
08800 }
08801
08802 if (NULL != (inistring = inifile.find("PARAMETER_FILE", "RS274NGC")))
08803 {
08804 // found it
08805 strcpy(RS274NGC_PARAMETER_FILE, inistring);
08806 }
08807 else
08808 {
08809 // not found, leave RS274NGC_PARAMETER_FILE alone
08810 }
08811
08812 // close it
08813 inifile.close();
08814
08815 return RS274NGC_OK;
08816 }
|
|
|
calling interface Definition at line 8332 of file rs274ngc.cc. Referenced by emcTaskPlanInit(), and main().
08333 {
08334 CANON_VECTOR axis_offset;
08335 CANON_VECTOR origin_point;
08336 int k;
08337
08338 rs274ngc_reset();
08339
08340 INIT_CANON();
08341
08342 _interpreter_settings.length_units SET_TO CANON_UNITS_INCHES;
08343 USE_LENGTH_UNITS(_interpreter_settings.length_units);
08344
08345 for (k SET_TO 5161; k < 5387; k++)
08346 {
08347 _interpreter_settings.parameters[k] SET_TO 0.0;
08348 }
08349 rs274ngc_restore_parameters(
08350 #ifdef STAND_ALONE_INTERP
08351 DEFAULT_RS274NGC_PARAMETER_FILE,
08352 #else
08353 RS274NGC_PARAMETER_FILE,
08354 #endif
08355 _interpreter_settings.parameters);
08356
08357 // Get axis offsets from parameters
08358 axis_offset.x SET_TO _interpreter_settings.parameters[5211];
08359 axis_offset.y SET_TO _interpreter_settings.parameters[5212];
08360 axis_offset.z SET_TO _interpreter_settings.parameters[5213];
08361
08362 // Get origin from parameters for G54 default coordinate system
08363 origin_point.x SET_TO _interpreter_settings.parameters[5221];
08364 origin_point.y SET_TO _interpreter_settings.parameters[5222];
08365 origin_point.z SET_TO _interpreter_settings.parameters[5223];
08366
08367 // Set the origin offsets
08368 SET_ORIGIN_OFFSETS(origin_point.x + axis_offset.x,
08369 origin_point.y + axis_offset.y,
08370 origin_point.z + axis_offset.z);
08371
08372 SET_FEED_REFERENCE(CANON_XYZ);
08373
08374 _textline SET_TO 0;
08375 _interpreter_settings.axis_offset_x SET_TO 0.0;
08376 _interpreter_settings.axis_offset_y SET_TO 0.0;
08377 _interpreter_settings.axis_offset_z SET_TO 0.0;
08378 _interpreter_settings.block_delete SET_TO OFF;
08379 /*_interpreter_settings.control_mode set in rs274ngc_synch */
08380 /*_interpreter_settings.current_slot set in rs274ngc_synch */
08381 _interpreter_settings.current_x SET_TO 0.0; /* reset by rs274ngc_synch */
08382 _interpreter_settings.current_y SET_TO 0.0; /* reset by rs274ngc_synch */
08383 _interpreter_settings.current_z SET_TO 0.0; /* reset by rs274ngc_synch */
08384 _interpreter_settings.cutter_radius_compensation SET_TO OFF;
08385 /* cycle values do not need initialization */
08386 _interpreter_settings.distance_mode SET_TO MODE_ABSOLUTE;
08387 _interpreter_settings.feed_mode SET_TO UNITS_PER_MINUTE;
08388 _interpreter_settings.feed_override SET_TO ON;
08389 /*_interpreter_settings.feed_rate set in rs274ngc_synch */
08390 /*_interpreter_settings.flood set in rs274ngc_synch */
08391 _interpreter_settings.length_offset_index SET_TO 1;
08392 /*_interpreter_settings.length_units set above */
08393 /*_interpreter_settings.mist set in rs274ngc_synch */
08394 _interpreter_settings.motion_mode SET_TO G_1;
08395 _interpreter_settings.origin_ngc SET_TO 1;
08396 _interpreter_settings.axis_offset_x SET_TO axis_offset.x;
08397 _interpreter_settings.axis_offset_y SET_TO axis_offset.y;
08398 _interpreter_settings.axis_offset_z SET_TO axis_offset.z;
08399 _interpreter_settings.origin_offset_x SET_TO origin_point.x;
08400 _interpreter_settings.origin_offset_y SET_TO origin_point.y;
08401 _interpreter_settings.origin_offset_z SET_TO origin_point.z;
08402 /*_interpreter_settings.parameters set above */
08403 _interpreter_settings.plane SET_TO CANON_PLANE_XY;
08404 SELECT_PLANE(_interpreter_settings.plane);
08405 _interpreter_settings.probe_flag SET_TO OFF;
08406 _interpreter_settings.program_x SET_TO UNKNOWN; /* for cutter comp */
08407 _interpreter_settings.program_y SET_TO UNKNOWN; /* for cutter comp */
08408 _interpreter_settings.retract_mode SET_TO R_PLANE;
08409 /*_interpreter_settings.selected_tool_slot set in rs274ngc_synch */
08410 /*_interpreter_settings.speed set in rs274ngc_synch */
08411 _interpreter_settings.speed_feed_mode SET_TO CANON_INDEPENDENT;
08412 _interpreter_settings.speed_override SET_TO ON;
08413 _interpreter_settings.tool_length_offset SET_TO 0.0;
08414 /*_interpreter_settings.tool_table set in rs274ngc_synch */
08415 _interpreter_settings.tool_table_index SET_TO 1;
08416 /*_interpreter_settings.traverse_rate set in rs274ngc_synch */
08417
08418 write_g_codes((block_pointer)NULL, &_interpreter_settings,
08419 _textline, &_interpreter_active_g_codes[0]);
08420 write_m_codes((block_pointer)NULL, &_interpreter_settings,
08421 _textline, &_interpreter_active_m_codes[0]);
08422 write_settings((block_pointer)NULL, &_interpreter_settings,
08423 _textline, &_interpreter_active_settings[0]);
08424
08425 // Synch rest of settings to external world
08426 rs274ngc_synch();
08427
08428 return RS274NGC_OK;
08429 }
|
|
|
Definition at line 8075 of file rs274ngc.cc. Referenced by emcTaskPlanLine().
08076 {
08077 return _textline;
08078 }
|
|
|
Definition at line 8599 of file rs274ngc.cc. Referenced by rs274ngc_synch().
08600 {
08601 int t;
08602
08603 for (t SET_TO 0; t <= CANON_TOOL_MAX; t++)
08604 {
08605 _interpreter_settings.tool_table[t] SET_TO GET_EXTERNAL_TOOL_TABLE(t);
08606 }
08607
08608 return 0;
08609 }
|
|
|
Definition at line 8457 of file rs274ngc.cc. 08458 : the name of the input NC-program file */
08459 {
08460 static char name[] SET_TO "rs274ngc_open";
08461
08462 _interpreter_fp SET_TO fopen(filename, "r");
08463 if (_interpreter_fp IS NULL)
08464 ERR_MACRO(_interpreter_linetext, name, "Unable to open file");
08465
08466 _textline SET_TO 0;
08467
08468 strcpy(_interpreter_filename, filename);
08469
08470 return RS274NGC_OK;
08471 }
|
|
|
Definition at line 8518 of file rs274ngc.cc. Referenced by emcTaskPlanRead(), interpret_from_file(), interpret_from_keyboard(), and rs274ngc_execute().
08519 {
08520 static char name[] SET_TO "rs274ngc_read";
08521 int status;
08522
08523 if (_interpreter_settings.probe_flag IS ON)
08524 {
08525 if (IS_EXTERNAL_QUEUE_EMPTY() IS 0)
08526 {
08527 /* rs274ngc_reset(); */
08528 ERR_MACRO(_interpreter_linetext, name, "Queue is not empty after probing");
08529 }
08530 set_probe_data(&_interpreter_settings);
08531 _interpreter_settings.probe_flag SET_TO OFF;
08532 }
08533
08534 if (_interpreter_fp IS NULL)
08535 {
08536 if (_interpreter_status IS RS274NGC_EXIT)
08537 { /* set in call to rs274ngc_execute */
08538 /* rs274ngc_reset(); */
08539 return RS274NGC_EXIT;
08540 }
08541 else
08542 {
08543 /* rs274ngc_reset(); */
08544 ERR_MACRO_PASS(name);
08545 }
08546 }
08547
08548 /* read the line */
08549 _textline++;
08550 status SET_TO read_text (NULL, _interpreter_fp, _interpreter_linetext,
08551 _interpreter_blocktext, &_interpreter_length,
08552 _interpreter_settings.block_delete);
08553 if ((status IS RS274NGC_ENDFILE) AND (_interpreter_block.m_modes[4] IS 1))
08554 return RS274NGC_ENDFILE; /* m1 appeared on the preceding line */
08555 else if (status IS RS274NGC_ENDFILE)
08556 {
08557 fclose(_interpreter_fp);
08558 _interpreter_fp SET_TO NULL;
08559 /* rs274ngc_reset(); */
08560 ERR_MACRO(_interpreter_linetext, name, "File ended with no stopping command given");
08561 }
08562 else if (status IS RS274NGC_ERROR)
08563 {
08564 /* rs274ngc_reset(); */
08565 ERR_MACRO_PASS(name);
08566 }
08567 if (_interpreter_length IS 0)
08568 return RS274NGC_OK;
08569
08570 /* parse the block */
08571 else if (read_line(_interpreter_blocktext, &_interpreter_block,
08572 &_interpreter_settings) IS RS274NGC_ERROR)
08573 {
08574 /* rs274ngc_reset(); */
08575 ERR_MACRO_PASS(name);
08576 }
08577 else
08578 return RS274NGC_OK;
08579 }
|
|
|
Definition at line 8001 of file rs274ngc.cc. Referenced by rs274ngc_close(), rs274ngc_exit(), and rs274ngc_init().
08002 {
08003 _textline SET_TO 0;
08004 _interpreter_filename[0] SET_TO 0;
08005 _interpreter_linetext[0] SET_TO 0;
08006 _interpreter_blocktext[0] SET_TO 0;
08007 _interpreter_fp SET_TO NULL;
08008 _interpreter_status SET_TO 0;
08009 _interpreter_length SET_TO 0;
08010
08011 return 0;
08012 }
|
|
||||||||||||
|
restore interpreter variables from file.
Definition at line 8633 of file rs274ngc.cc. 08634 {
08635 static char name[] SET_TO "rs274ngc_restore_parameters";
08636 FILE *infp = NULL;
08637 char line[256];
08638 int variable;
08639 double value;
08640
08641 // open original for reading
08642 if (NULL == (infp = fopen(filename, "r")))
08643 {
08644 ERR_MACRO(_interpreter_linetext, name, "Cannot open file");
08645 return -1;
08646 }
08647
08648 while (!feof(infp))
08649 {
08650 if (NULL == fgets(line, 256, infp))
08651 {
08652 break;
08653 }
08654
08655 // try for a variable-value match
08656 if (2 == sscanf(line, "%d %lf", &variable, &value))
08657 {
08658 // write it into variable array
08659 if (variable <= 0 || variable >= RS274NGC_MAX_PARAMETERS)
08660 {
08661 ERR_MACRO(_interpreter_linetext, name, "Parameter number out of range");
08662 }
08663 else
08664 {
08665 parameters[variable] = value;
08666 }
08667 }
08668 }
08669
08670 fclose(infp);
08671
08672 return 0;
08673 }
|
|
||||||||||||
|
save interpreter variables to file.
Definition at line 8697 of file rs274ngc.cc. 08698 {
08699 static char name[] SET_TO "rs274ngc_save_parameters";
08700 FILE *infp = NULL;
08701 FILE *outfp = NULL;
08702 char line[256];
08703 int variable;
08704 double value;
08705
08706 // rename as .bak
08707 strcpy(line, filename);
08708 strcat(line, RS274NGC_PARAMETER_FILE_BACKUP_SUFFIX);
08709 if (0 != rename(filename, line))
08710 {
08711 ERR_MACRO(_interpreter_linetext, name, "Cannot create backup file");
08712 return -1;
08713 }
08714
08715 // open backup for reading
08716 if (NULL == (infp = fopen(line, "r")))
08717 {
08718 ERR_MACRO(_interpreter_linetext, name, "Cannot open backup file");
08719 return -1;
08720 }
08721
08722 // open original for writing
08723 if (NULL == (outfp = fopen(filename, "w")))
08724 {
08725 ERR_MACRO(_interpreter_linetext, name, "Cannot open variable file");
08726 return -1;
08727 }
08728
08729 while (!feof(infp))
08730 {
08731 if (NULL == fgets(line, 256, infp))
08732 {
08733 break;
08734 }
08735
08736 // try for a variable-value match
08737 if (2 == sscanf(line, "%d %f", &variable, &value))
08738 {
08739 // overwrite with internal variable
08740 if (variable <= 0 || variable >= RS274NGC_MAX_PARAMETERS)
08741 {
08742 ERR_MACRO(_interpreter_linetext, name, "Parameter number out of range");
08743 }
08744 else
08745 {
08746 sprintf(line, "%d\t%f\n", variable, parameters[variable]);
08747 }
08748 }
08749
08750 // write it out
08751 fputs(line, outfp);
08752 }
08753
08754 fclose(infp);
08755 fclose(outfp);
08756
08757 return 0;
08758 }
|
|
|
Definition at line 8267 of file rs274ngc.cc. Referenced by emcTaskPlanExecute(), emcTaskPlanSynch(), and rs274ngc_init().
08268 {
08269 CANON_POSITION current_point;
08270
08271 _interpreter_settings.current_slot SET_TO GET_EXTERNAL_TOOL();
08272
08273 rs274ngc_load_tool_table();
08274
08275 _interpreter_settings.control_mode SET_TO GET_MOTION_CONTROL_MODE();
08276 current_point SET_TO GET_EXTERNAL_POSITION();
08277 _interpreter_settings.current_x SET_TO current_point.x;
08278 _interpreter_settings.current_y SET_TO current_point.y;
08279 _interpreter_settings.current_z SET_TO current_point.z;
08280
08281 _interpreter_settings.feed_rate SET_TO GET_EXTERNAL_FEED_RATE();
08282
08283 _interpreter_settings.flood SET_TO (GET_EXTERNAL_FLOOD() ISNT 0) ? ON : OFF;
08284
08285 _interpreter_settings.mist SET_TO (GET_EXTERNAL_MIST() ISNT 0) ? ON : OFF;
08286
08287 _interpreter_settings.selected_tool_slot SET_TO GET_EXTERNAL_POCKET();
08288
08289 _interpreter_settings.speed SET_TO GET_EXTERNAL_SPEED();
08290
08291 _interpreter_settings.spindle_turning SET_TO GET_EXTERNAL_SPINDLE();
08292
08293 _interpreter_settings.traverse_rate SET_TO GET_EXTERNAL_TRAVERSE_RATE();
08294
08295 return RS274NGC_OK;
08296 }
|
|
|
Definition at line 7946 of file rs274ngc.cc. 07948 {
07949 static char name[] SET_TO "set_probe_data";
07950 CANON_POSITION position;
07951 CANON_POSITION probe_position;
07952
07953 position SET_TO GET_EXTERNAL_POSITION();
07954 settings->current_x SET_TO position.x;
07955 settings->current_y SET_TO position.y;
07956 settings->current_z SET_TO position.z;
07957 probe_position SET_TO GET_EXTERNAL_PROBE_POSITION();
07958 settings->parameters[5061] SET_TO probe_position.x;
07959 settings->parameters[5062] SET_TO probe_position.y;
07960 settings->parameters[5063] SET_TO probe_position.z;
07961 settings->parameters[5067] SET_TO GET_EXTERNAL_PROBE_VALUE();
07962 return RS274NGC_OK;
07963 }
|
|
||||||||||||
|
Definition at line 7557 of file rs274ngc.cc. 07560 {
07561 static char name[] SET_TO "utility_enhance_block";
07562 if (block->g_modes[1] ISNT -1)
07563 block->motion_to_be SET_TO block->g_modes[1];
07564 else if ((((block->x_flag IS ON) OR (block->y_flag IS ON)) OR
07565 (block->z_flag IS ON)) AND
07566 (block->g_modes[0] IS -1))
07567 block->motion_to_be SET_TO settings->motion_mode;
07568 return RS274NGC_OK;
07569 }
|
|
||||||||||||||||
|
Definition at line 574 of file rs274ngc.cc. 00575 : the message text */
00576 char * error_array[], /* array of error messages */
00577 int index) /* index to start at */
00578 {
00579 for (;error_array[index][0] ISNT 0; index++)
00580 {
00581 if (strcmp(message, error_array[index]) IS 0)
00582 return index;
00583 }
00584 return 0;
00585 }
|
|
||||||||||||||||||||||||||||||||||||||||
|
Definition at line 2111 of file rs274ngc.cc. 02121 {
02122 double radius;
02123 double theta; /* amount of turn of arc */
02124
02125 if (turn IS 0)
02126 return 0.0;
02127 radius SET_TO hypot((center_x - x1), (center_y - y1));
02128 theta SET_TO utility_find_turn(x1, y1, center_x, center_y, turn, x2, y2);
02129 if (z2 IS z1)
02130 return (radius * fabs(theta));
02131 else
02132 return hypot((radius * theta), (z2 - z1));
02133 }
|
|
||||||||||||||||||||||||
|
Definition at line 3396 of file rs274ngc.cc. 03402 {
03403 int mode;
03404 int middle;
03405 int comp;
03406
03407 mode SET_TO settings->distance_mode;
03408 middle SET_TO (settings->program_x ISNT UNKNOWN);
03409 comp SET_TO (settings->cutter_radius_compensation ISNT OFF);
03410
03411 if (block->g_modes[4] IS G_53) /* mode is absolute in this case */
03412 {
03413 #ifdef DEBUG_EMC
03414 COMMENT("interpreter: offsets temporarily suspended");
03415 #endif
03416 *px SET_TO (block->x_flag IS ON) ? (block->x_number -
03417 (settings->origin_offset_x + settings->axis_offset_x)) :
03418 settings->current_x;
03419 *py SET_TO (block->y_flag IS ON) ? (block->y_number -
03420 (settings->origin_offset_y + settings->axis_offset_y)) :
03421 settings->current_y;
03422 *pz SET_TO (block->z_flag IS ON) ? (block->z_number -
03423 (settings->tool_length_offset + settings->origin_offset_z
03424 + settings->axis_offset_z)) : settings->current_z;
03425 }
03426 else if (mode IS MODE_ABSOLUTE)
03427 {
03428 *px SET_TO (block->x_flag IS ON) ? block->x_number :
03429 (comp AND middle) ? settings->program_x :
03430 settings->current_x ;
03431
03432 *py SET_TO (block->y_flag IS ON) ? block->y_number :
03433 (comp AND middle) ? settings->program_y :
03434 settings->current_y ;
03435
03436 *pz SET_TO (block->z_flag IS ON) ? block->z_number :
03437 settings->current_z ;
03438 }
03439 else
03440 {
03441 *px SET_TO (block->x_flag IS ON)
03442 ? ((comp AND middle) ? (block->x_number + settings->program_x)
03443 : (block->x_number + settings->current_x))
03444 : ((comp AND middle) ? settings->program_x
03445 : settings->current_x);
03446
03447 *py SET_TO (block->y_flag IS ON)
03448 ? ((comp AND middle) ? (block->y_number + settings->program_y)
03449 : (block->y_number + settings->current_y))
03450 : ((comp AND middle) ? settings->program_y
03451 : settings->current_y);
03452
03453 *pz SET_TO (block->z_flag IS ON)
03454 ? (settings->current_z + block->z_number)
03455 : settings->current_z;
03456 }
03457
03458 return RS274NGC_OK;
03459 }
|
|
||||||||||||||||||||||||||||
|
Definition at line 2158 of file rs274ngc.cc. 02165 {
02166 return sqrt(pow((x2 - x1),2) + pow((y2 - y1),2) + pow((z2 - z1),2));
02167 }
|
|
||||||||||||||||||||||||||||||||
|
Definition at line 1160 of file rs274ngc.cc. 01168 {
01169 double alpha;
01170 double beta;
01171 double theta; /* amount of turn of arc CCW - negative if CW */
01172
01173 if (turn IS 0)
01174 return 0.0;
01175 alpha SET_TO atan2((y1 - center_y), (x1 - center_x));
01176 beta SET_TO atan2((y2 - center_y), (x2 - center_x));
01177 if (turn > 0)
01178 {
01179 if (beta <= alpha)
01180 beta SET_TO (beta + TWO_PI);
01181 theta SET_TO ((beta - alpha) + ((turn - 1) * TWO_PI));
01182 }
01183 else /* turn < 0 */
01184 {
01185 if (alpha <= beta)
01186 alpha SET_TO (alpha + TWO_PI);
01187 theta SET_TO ((beta - alpha) + ((turn + 1) * TWO_PI));
01188 }
01189 return (theta);
01190 }
|
|
||||||||||||||||||||
|
Definition at line 7596 of file rs274ngc.cc. 07601 {
07602 gez[0] SET_TO line_number; /* 0 line number */
07603 gez[1] SET_TO settings->motion_mode; /* 1 motion mode */
07604 gez[2] SET_TO
07605 (block IS NULL) ? -1 :
07606 (block->g_modes[0] ISNT -1) ? block->g_modes[0] : /* 2 g10,g92 */
07607 block->g_modes[4] ; /* 2 g4, g53 */
07608 gez[3] SET_TO
07609 (settings->plane IS CANON_PLANE_XY) ? G_17 : /* 3 active plane */
07610 (settings->plane IS CANON_PLANE_XZ) ? G_18 : G_19;
07611 gez[4] SET_TO /* 4 cut radius comp */
07612 (settings->cutter_radius_compensation IS RIGHT) ? G_42 :
07613 (settings->cutter_radius_compensation IS LEFT) ? G_41 : G_40;
07614 gez[5] SET_TO /* 5 length units */
07615 (settings->length_units IS CANON_UNITS_INCHES) ? G_20 : G_21;
07616 gez[6] SET_TO /* 6 distance mode */
07617 (settings->distance_mode IS MODE_ABSOLUTE) ? G_90 : G_91;
07618 gez[7] SET_TO /* 7 feed mode */
07619 (settings->feed_mode IS INVERSE_TIME) ? G_93 : G_94;
07620 gez[8] SET_TO /* 8 coord system */
07621 (settings->origin_ngc < 7) ? (530 + (10 * settings->origin_ngc)) :
07622 (584 + settings->origin_ngc);
07623 gez[9] SET_TO /* 9 tool len offset */
07624 (settings->tool_length_offset IS 0.0) ? G_49 : G_43;
07625 gez[10] SET_TO /* 10 retract mode */
07626 (settings->retract_mode IS OLD_Z) ? G_98 : G_99;
07627 gez[11] SET_TO /* 11 control mode */
07628 (settings->control_mode IS CANON_CONTINUOUS) ? G_64 : G_61;
07629
07630 return RS274NGC_OK;
07631 }
|
|
||||||||||||||||||||
|
Definition at line 7651 of file rs274ngc.cc. 07656 {
07657 ems[0] SET_TO line_number; /* 0 line number */
07658 ems[1] SET_TO
07659 (block IS NULL) ? -1 : block->m_modes[4]; /* 1 stopping */
07660 ems[2] SET_TO
07661 (settings->spindle_turning IS CANON_STOPPED) ? 5 : /* 2 spindle */
07662 (settings->spindle_turning IS CANON_CLOCKWISE) ? 3 : 4;
07663 ems[3] SET_TO /* 3 tool change */
07664 (block IS NULL) ? -1 : block->m_modes[6];
07665 ems[4] SET_TO /* 4 mist */
07666 (settings->mist IS ON) ? 7 :
07667 (settings->flood IS ON) ? -1 : 9;
07668 ems[5] SET_TO /* 5 flood */
07669 (settings->flood IS ON) ? 8 : -1;
07670 ems[6] SET_TO /* 6 overrides */
07671 (settings->feed_override IS ON) ? 48 : 49; /* both overrides*/
07672
07673 return RS274NGC_OK;
07674 }
|
|
||||||||||||||||||||
|
Definition at line 7690 of file rs274ngc.cc. |
|
|
Definition at line 533 of file rs274ngc.cc. |
|
|
Initial value: Definition at line 544 of file rs274ngc.cc. |
|
|
Definition at line 538 of file rs274ngc.cc. |
|
|
Definition at line 539 of file rs274ngc.cc. |
|
|
Definition at line 540 of file rs274ngc.cc. |
|
|
Definition at line 541 of file rs274ngc.cc. |
|
|
Definition at line 531 of file rs274ngc.cc. |
|
|
Definition at line 529 of file rs274ngc.cc. |
|
|
Definition at line 530 of file rs274ngc.cc. |
|
|
Definition at line 111 of file rs274ngc.cc. |
|
|
Definition at line 99 of file rs274ngc.cc. |
1.2.11.1 written by Dimitri van Heesch,
© 1997-2001