📄 rs274ngc.hh
字号:
#ifndef RS274NGC_HH#define RS274NGC_HH/* rs274ngc.hh Declarations for the rs274abc translator.*//**********************//* INCLUDE DIRECTIVES *//**********************/#include <stdio.h>#include "canon.hh"#ifdef LATHE_FLAG#include "agl.hh"#include <string.h>#endif/**********************//* COMPILER MACROS *//**********************/#define AND &&#define IS ==#define ISNT !=#define MAX(x, y) ((x) > (y) ? (x) : (y))#define NOT !#define OR ||#define SET_TO =#ifndef TRUE#define TRUE 1#endif#ifndef FALSE#define FALSE 0#endif#define RS274NGC_TEXT_SIZE 256/* numerical constants */#define TOLERANCE_INCH 0.0005#define TOLERANCE_MM 0.005#define TOLERANCE_CONCAVE_CORNER 0.01 /* angle threshold for concavity for cutter compensation, in radians */#define TINY 1e-12 /* for arc_data_r */#define UNKNOWN 1e-20#define TWO_PI 6.2831853071795864#ifndef PI#define PI 3.1415926535897932#endif#ifndef PI2#define PI2 1.5707963267948966#endif#define CYCLE_RETURN_DISTANCE 3// array sizes#define RS274NGC_ACTIVE_G_CODES 15#define RS274NGC_ACTIVE_M_CODES 11#define RS274NGC_ACTIVE_SETTINGS 3// name of parameter file for saving/restoring interpreter variables#define RS274NGC_PARAMETER_FILE_NAME_DEFAULT "ini/GJMill.var"#define RS274NGC_TOOL_FILE_NAME_DEFAULT "ini/GJMill.tbl"#define RS274NGC_PARAMETER_FILE_BACKUP_SUFFIX ".bak"#define RS274NGC_MCDOE_FILE_NAME "ini/GJMill.mc"#define RS274NGC_REF_FILE_NAME "ini/GJMill.ref"// max number of m codes on one line#define MAX_EMS 4// English - Metric conversion (long number keeps error buildup down)#define MM_PER_INCH 25.4#define INCH_PER_MM 0.039370078740157477// on-off switch settings#define OFF 0#define ON 1// feed_mode#define UNITS_PER_MINUTE 0#define INVERSE_TIME 1#define UNITS_PER_REV 2// cutter radius compensation mode, OFF already defined to 0// not using CANON_SIDE since interpreter handles cutter radius comp#define RIGHT 1#define LEFT 2// number of parameters in parameter table#define RS274NGC_MAX_PARAMETERS 5400// unary operations// These are not enums because the "&" operator is used in// reading the operation names and is illegal with an enum#define ABS 1#define ACOS 2#define ASIN 3#define ATAN 4#define COS 5#define EXP 6#define FIX 7#define FUP 8#define LN 9#define ROUND 10#define SIN 11#define SQRT 12#define TAN 13// binary operations#define NO_OPERATION 0#define DIVIDED_BY 1#define MODULO 2#define POWER 3#define TIMES 4#define AND2 5#define EXCLUSIVE_OR 6#define MINUS 7#define NON_EXCLUSIVE_OR 8#define PLUS 9#define RIGHT_BRACKET 10/* relational operators (are binary operators)*/#define LT 11#define EQ 12#define NE 13#define LE 14#define GE 15#define GT 16#define RELATIONAL_OP_FIRST 11#define RELATIONAL_OP_LAST 16// O code#define O_none 0#define O_sub 1#define O_endsub 2#define O_call 3#define O_do 4#define O_while 5#define O_if 6#define O_elseif 7#define O_else 8#define O_endif 9#define O_break 10#define O_continue 11#define O_endwhile 12#define O_return 13// G Codes are symbolic to be dialect-independent in source code#define G_0 0#define G_1 10#define G_2 20#define G_3 30#define G_4 40#define G_9 90#define G_10 100#define G_17 170#define G_18 180#define G_19 190#define G_20 200#define G_21 210#define G_28 280#define G_30 300#define G_33 330 /*add by wp for threading*/#define G_38_2 382#define G_40 400#define G_41 410#define G_42 420#define G_43 430#define G_49 490#define G_50 500#define G_51 510#define G_53 530#define G_54 540#define G_55 550#define G_56 560#define G_57 570#define G_58 580#define G_59 590#define G_59_1 591#define G_59_2 592#define G_59_3 593#define G_61 610#define G_61_1 611#define G_64 640#define G_68 680#define G_69 690#define G_70 700#define G_71 710#define G_72 720#define G_73 730#define G_74 740#define G_76 760#define G_80 800#define G_81 810#define G_82 820#define G_83 830#define G_84 840#define G_85 850#define G_86 860#define G_87 870#define G_88 880#define G_89 890#define G_90 900#define G_91 910#define G_92 920#define G_92_1 921#define G_92_2 922#define G_92_3 923#define G_93 930#define G_94 940#define G_95 950#define G_96 960#define G_97 970#define G_98 980#define G_99 990//added by wpin#define G_11 110#define G_12 120#define G_13 130#define G_14 140//added by wp#define G_22 220 //call sub#define G_24 240 //sub end#define G_23 230 /**/#define G_25 250 /**/#define G_26 260 /**/#define DEFAULT_PATH "programs/"#define ERM(error_code) if (1) { \ _setup.stack_index SET_TO 0; \ strcpy(_setup.stack[_setup.stack_index++], name); \ _setup.stack[_setup.stack_index][0] SET_TO 0; \ return error_code; \ } else#define ERP(error_code) if (_setup.stack_index < 49) { \ strcpy(_setup.stack[_setup.stack_index++], name); \ _setup.stack[_setup.stack_index][0] SET_TO 0; \ return error_code; \ } else return error_code#define CHK(bad, error_code) if (bad) { \ _setup.stack_index SET_TO 0; \ strcpy(_setup.stack[_setup.stack_index++], name); \ _setup.stack[_setup.stack_index][0] SET_TO 0; \ return error_code; \ } else#define CHP(try_this) \ if ((status SET_TO (try_this)) ISNT RS274NGC_OK) { \ if (_setup.stack_index < 49) \ {strcpy(_setup.stack[_setup.stack_index++], name); \ _setup.stack[_setup.stack_index][0] SET_TO 0; \ return status;} \ else {return status;} \ } else//added by wpin#define GET_MCODE_SORT(params) \ (((int)(params))&0x3) #define GET_MCODE_GROUP(params) \ (((int)(params))&0x3C)/4 #define GET_MCODE_RESET_FLAG(params) \ (((int)(params)&0x40)? 1:0) #define GET_MCODE_HOLD_FLAG(params) \ (((int)(params)&0x80)? 1: 0)#define GET_MCODE_DISP_FLAG(params) \ (((int)(params)&0x100)? 1: 0)#define GET_MCODE_MODE_FLAG(params) \ (((int)(params)&0x200)? 1: 0)#define GET_MCODE_STOP_FLAG(params) \ (((int)(params)&0x400)? 1:0) #define MIN_USERVAR_INT 1#define MAX_USERVAR_INT 100#define NUMS_USERVAR_INT 100#define MIN_USERVAR_DOUBLE 101#define MAX_USERVAR_DOUBLE 200#define NUMS_USERVAR_DOUBLE 100#define MIN_MCODE 1000#define MAX_MCODE 1099#define NUMS_MCODE 100#define MIN_REF_G28 1001#define MAX_REF_G28 1006#define MIN_REF_G30 1011#define MAX_REF_G30 1016#define MIN_REF_G92 1021#define MAX_REF_G92 1026#define MIN_PROBE_DATA 201#define MAX_PROBE_DATA 206#define DEFAULT_ORIGIN 1100#define MIN_ORIGIN 1101#define NUMS_USER_COORD 9#define SYSVAR_UAS 1201#define SYSVAR_RAP 1202#define SYSVAR_USO 1203#define SYSVAR_USB 1204#define SYSVAR_JOG_INC 1205#define SYSVAR_SHAPE_ERROR 1206#define PARAM_TYPE_NO_DEFINE 0#define PARAM_TYPE_USER_INT 1#define PARAM_TYPE_USER_DOUBLE 2//#define PARAM_TYPE_MCODE_DEFINE 3#define PARAM_TYPE_REF_G28 3#define PARAM_TYPE_REF_G30 4#define PARAM_TYPE_REF_G92 5#define PARAM_TYPE_PROBE_DATA 6#define PARAM_TYPE_DEF_ORG 7#define PARAM_TYPE_ORG_POS 8//#define PARAM_TYPE_COMP 10#define PARAM_TYPE_SYSVAR 9// Subroutine parameters#define RS274NGC_SUB_PARAMS 30#define RS274NGC_OWORD_LABELS 1000#define RS274NGC_SUB_ROUTINE_LEVELS 10#define RS274NGC_FIRST_SUBROUTINE_PARAM 1/* INI file defaults */#define AXIS_COUNT_DEFAULT 6 /* Default active axes. Normally from the inifile [TRAJ][AXES]*/ // RS274NGC file delimiter requirements ON/OFF// ON(1) File must start and end with '%' marks, or end with M02/M30// OFF(0) File not required to start or end with anything in particular#define RS274NGC_FILE_DELIMITERS_DEFAULT 0// Read full text of comments ON/OFF// ON(1) Comments will be parsed into the comment[]// OFF(0) Comments will not be parsed#define READ_FULL_COMMENT_DEFAULT 1// Keep current coordinate system in effect after M02/M30// ON(1) Retains current coordinate system // OFF(0) Reverts to default coordinate system#define KEEP_CURRENT_COORDINATE_SYSTEM_AFTER_M02_DEFAULT 0// Default coordinate sytem after M02/M30 program stop.// Valid values are 1-9, with 1 being G54, 9 being G59.3#define M02_COORDINATE_SYSTEM_DEFAULT 1// Keep G92 axis offsets in effect after M02/M30// ON(1) Retains G92 axis offsets in effect// OFF(0) Turns off G92 axis offsets, as in G92_2#define KEEP_G92_OFFSETS_AFTER_M02_DEFAULT 0// Keep G92 axis offsets in effect after Work Coordinate System change// (G54-G59.3). // ON(1) Retains G92 axis offsets in effect // OFF(0) Turns off G92 axis offsets, as in G92_2#define KEEP_G92_OFFSETS_AFTER_WCS_CHANGE_DEFAULT 0// G83 cycle, how far above hole bottom for rapid return, (inch units).#define G83_RAPID_DELTA_DEFAULT 0.010// G83.1 cycle, incremental retract distance, (inch units).#define G83_1_DELTA_DEFAULT 0.200// Tolerance setting for logical equality #define TOLERANCE_EQUAL 0.0001 // Tolerance setting (inch) for G02/G03 arc endpoints #define TOLERANCE_INCH_DEFAULT 0.0005// Tolerance setting (mm) for G02/G03 arc endpoints#define TOLERANCE_MM_DEFAULT 0.005// Angle threshold for concavity for cutter compensation,// in radians. ('inside' corners)#define TOLERANCE_CONCAVE_CORNER_DEFAULT 0.05 /**********************//* TYPEDEFS *//**********************//* distance_mode */typedef enum {MODE_ABSOLUTE, MODE_INCREMENTAL} DISTANCE_MODE;/* retract_mode for cycles */typedef enum {R_PLANE, OLD_Z} RETRACT_MODE;typedef unsigned char BYTE;typedef int ON_OFF;typedef struct block_struct {#ifdef AA ON_OFF a_flag; double a_number;#endif#ifdef BB ON_OFF b_flag; double b_number;#endif#ifdef CC ON_OFF c_flag; double c_number;#endif char comment[256]; int comment_len; // length of comment string, used for ';' comment type int d_number; int e_number; double f_number; int g_modes[20]; int h_number; ON_OFF i_flag; double i_number; ON_OFF j_flag; double j_number; ON_OFF k_flag; double k_number; int l_number; int line_number; int motion_to_be; int m_count; int m_modes[10]; ON_OFF p_flag; double p_number; double q_number; ON_OFF r_flag; double r_number; double s_number; int t_number; ON_OFF x_flag; double x_number; ON_OFF y_flag; double y_number; ON_OFF z_flag; double z_number; ON_OFF u_flag; double u_number; ON_OFF v_flag; double v_number; ON_OFF w_flag; double w_number; //add by wp char e_string[256]; DISTANCE_MODE block_distance_mode; //!!!KL control (o-word) stuff long offset; // start of line in file int o_type; int o_number; double params[RS274NGC_SUB_PARAMS]; //end} block;typedef block * block_pointer;typedef struct context_struct { long position; // location (ftell) in file int sequence_number; // location (line number) in file double saved_params[RS274NGC_SUB_PARAMS];}context;typedef struct offset_struct { int o_word; int type; long offset; int sequence_number;}offset;/*The current_x, current_y, and current_z are the location of the toolin the current coordinate system. current_x and current_y differ fromprogram_x and program_y when cutter radius compensation is on.current_z is the position of the tool tip in program coordinates whentool length compensation is using the actual tool length; it is theposition of the spindle when tool length is zero.In a setup, the axis_offset values are set by g92 and the origin_offsetvalues are set by g54 - g59.3. The net origin offset uses both valuesand is not represented here*/typedef struct{ double Feedback; double Measure;} CompPoint;typedef struct{ long file_position; long sequence_number;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -