00001 #ifndef RS274NGC_HH
00002 #define RS274NGC_HH
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <stdio.h>
00016 #include "canon.hh"
00017
00018
00019
00020
00021
00022 #define AND &&
00023 #define IS ==
00024 #define ISNT !=
00025 #define MAX(x, y) ((x) > (y) ? (x) : (y))
00026 #define NOT !
00027 #define OR ||
00028 #define SET_TO =
00029
00030 #ifndef TRUE
00031 #define TRUE 1
00032 #endif
00033
00034 #ifndef FALSE
00035 #define FALSE 0
00036 #endif
00037
00038 #define RS274NGC_TEXT_SIZE 256
00039
00040
00041 #define TOLERANCE_INCH 0.0002
00042 #define TOLERANCE_MM 0.002
00043 #define TOLERANCE_CONCAVE_CORNER 0.01
00044
00045 #define TINY 1e-12
00046 #define UNKNOWN 1e-20
00047 #define TWO_PI 6.2831853071795864
00048
00049 #ifndef PI
00050 #define PI 3.1415926535897932
00051 #endif
00052
00053 #ifndef PI2
00054 #define PI2 1.5707963267948966
00055 #endif
00056
00057
00058 #define RS274NGC_ACTIVE_G_CODES 12
00059 #define RS274NGC_ACTIVE_M_CODES 7
00060 #define RS274NGC_ACTIVE_SETTINGS 3
00061
00062
00063 #define RS274NGC_PARAMETER_FILE_NAME_DEFAULT "rs274ngc.var"
00064 #define RS274NGC_PARAMETER_FILE_BACKUP_SUFFIX ".bak"
00065
00066
00067 #define MAX_EMS 4
00068
00069
00070 #define MM_PER_INCH 25.4
00071 #define INCH_PER_MM 0.039370078740157477
00072
00073
00074 #define OFF 0
00075 #define ON 1
00076
00077
00078 #define UNITS_PER_MINUTE 0
00079 #define INVERSE_TIME 1
00080
00081
00082
00083 #define RIGHT 1
00084 #define LEFT 2
00085
00086
00087 #define RS274NGC_MAX_PARAMETERS 5400
00088
00089
00090
00091
00092
00093 #define ABS 1
00094 #define ACOS 2
00095 #define ASIN 3
00096 #define ATAN 4
00097 #define COS 5
00098 #define EXP 6
00099 #define FIX 7
00100 #define FUP 8
00101 #define LN 9
00102 #define ROUND 10
00103 #define SIN 11
00104 #define SQRT 12
00105 #define TAN 13
00106
00107
00108
00109 #define NO_OPERATION 0
00110 #define DIVIDED_BY 1
00111 #define MODULO 2
00112 #define POWER 3
00113 #define TIMES 4
00114 #define AND2 5
00115 #define EXCLUSIVE_OR 6
00116 #define MINUS 7
00117 #define NON_EXCLUSIVE_OR 8
00118 #define PLUS 9
00119 #define RIGHT_BRACKET 10
00120
00121
00122 #define G_0 0
00123 #define G_1 10
00124 #define G_2 20
00125 #define G_3 30
00126 #define G_4 40
00127 #define G_10 100
00128 #define G_17 170
00129 #define G_18 180
00130 #define G_19 190
00131 #define G_20 200
00132 #define G_21 210
00133 #define G_28 280
00134 #define G_30 300
00135 #define G_38_2 382
00136 #define G_40 400
00137 #define G_41 410
00138 #define G_42 420
00139 #define G_43 430
00140 #define G_49 490
00141 #define G_53 530
00142 #define G_54 540
00143 #define G_55 550
00144 #define G_56 560
00145 #define G_57 570
00146 #define G_58 580
00147 #define G_59 590
00148 #define G_59_1 591
00149 #define G_59_2 592
00150 #define G_59_3 593
00151 #define G_61 610
00152 #define G_61_1 611
00153 #define G_64 640
00154 #define G_80 800
00155 #define G_81 810
00156 #define G_82 820
00157 #define G_83 830
00158 #define G_84 840
00159 #define G_85 850
00160 #define G_86 860
00161 #define G_87 870
00162 #define G_88 880
00163 #define G_89 890
00164 #define G_90 900
00165 #define G_91 910
00166 #define G_92 920
00167 #define G_92_1 921
00168 #define G_92_2 922
00169 #define G_92_3 923
00170 #define G_93 930
00171 #define G_94 940
00172 #define G_98 980
00173 #define G_99 990
00174
00175
00176
00177
00178
00179
00180 typedef enum {MODE_ABSOLUTE, MODE_INCREMENTAL} DISTANCE_MODE;
00181
00182
00183 typedef enum {R_PLANE, OLD_Z} RETRACT_MODE;
00184
00185 typedef int ON_OFF;
00186
00187 typedef struct block_struct {
00188 #ifdef AA
00189 ON_OFF a_flag;
00190 double a_number;
00191 #endif
00192 #ifdef BB
00193 ON_OFF b_flag;
00194 double b_number;
00195 #endif
00196 #ifdef CC
00197 ON_OFF c_flag;
00198 double c_number;
00199 #endif
00200 char comment[256];
00201 int d_number;
00202 double f_number;
00203 int g_modes[14];
00204 int h_number;
00205 ON_OFF i_flag;
00206 double i_number;
00207 ON_OFF j_flag;
00208 double j_number;
00209 ON_OFF k_flag;
00210 double k_number;
00211 int l_number;
00212 int line_number;
00213 int motion_to_be;
00214 int m_count;
00215 int m_modes[10];
00216 double p_number;
00217 double q_number;
00218 ON_OFF r_flag;
00219 double r_number;
00220 double s_number;
00221 int t_number;
00222 ON_OFF x_flag;
00223 double x_number;
00224 ON_OFF y_flag;
00225 double y_number;
00226 ON_OFF z_flag;
00227 double z_number;
00228 } block;
00229
00230 typedef block * block_pointer;
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247 typedef struct setup_struct {
00248 #ifdef AA
00249 double AA_axis_offset;
00250 double AA_current;
00251 double AA_origin_offset;
00252 #endif
00253 #ifdef BB
00254 double BB_axis_offset;
00255 double BB_current;
00256 double BB_origin_offset;
00257 #endif
00258 #ifdef CC
00259 double CC_axis_offset;
00260 double CC_current;
00261 double CC_origin_offset;
00262 #endif
00263 int active_g_codes
00264 [RS274NGC_ACTIVE_G_CODES];
00265 int active_m_codes
00266 [RS274NGC_ACTIVE_M_CODES];
00267 double active_settings
00268 [RS274NGC_ACTIVE_SETTINGS];
00269 double axis_offset_x;
00270 double axis_offset_y;
00271 double axis_offset_z;
00272 block block1;
00273 char blocktext[RS274NGC_TEXT_SIZE];
00274 CANON_MOTION_MODE control_mode;
00275 int current_slot;
00276 double current_x;
00277 double current_y;
00278 double current_z;
00279 double cutter_comp_radius;
00280 int cutter_comp_side;
00281 double cycle_cc;
00282 double cycle_i;
00283 double cycle_j;
00284 double cycle_k;
00285 int cycle_l;
00286 double cycle_p;
00287 double cycle_q;
00288 double cycle_r;
00289 DISTANCE_MODE distance_mode;
00290 int feed_mode;
00291 ON_OFF feed_override;
00292 double feed_rate;
00293 char filename[RS274NGC_TEXT_SIZE];
00294 FILE * file_pointer;
00295 ON_OFF flood;
00296 int length_offset_index;
00297 CANON_UNITS length_units;
00298 int line_length;
00299 char linetext[RS274NGC_TEXT_SIZE];
00300 ON_OFF mist;
00301 int motion_mode;
00302 int origin_index;
00303 double origin_offset_x;
00304 double origin_offset_y;
00305 double origin_offset_z;
00306 double parameters
00307 [RS274NGC_MAX_PARAMETERS];
00308 int parameter_occurrence;
00309 int parameter_numbers[50];
00310 double parameter_values[50];
00311 ON_OFF percent_flag;
00312 CANON_PLANE plane;
00313 ON_OFF probe_flag;
00314 double program_x;
00315 double program_y;
00316 RETRACT_MODE retract_mode;
00317 int selected_tool_slot;
00318 int sequence_number;
00319 double speed;
00320 CANON_SPEED_FEED_MODE speed_feed_mode;
00321 ON_OFF speed_override;
00322 CANON_DIRECTION spindle_turning;
00323 char stack[50][80];
00324 int stack_index;
00325 double tool_length_offset;
00326 int tool_max;
00327 CANON_TOOL_TABLE tool_table
00328 [CANON_TOOL_MAX + 1];
00329 int tool_table_index;
00330 double traverse_rate;
00331 } setup;
00332
00333 typedef setup * setup_pointer;
00334
00335
00336 typedef int (*read_function_pointer) (char *, int *, block_pointer, double *);
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349 extern int rs274ngc_close();
00350
00351
00352 #ifndef NOT_OLD_EMC_INTERP_COMPATIBLE
00353 extern int rs274ngc_execute(const char *command=0);
00354 #else
00355 extern int rs274ngc_execute();
00356 #endif
00357
00358
00359 extern int rs274ngc_exit();
00360
00361
00362 extern int rs274ngc_init();
00363
00364
00365 extern int rs274ngc_load_tool_table();
00366
00367
00368 extern int rs274ngc_open(const char *filename);
00369
00370
00371 extern int rs274ngc_read(const char * mdi = 0);
00372
00373
00374 extern int rs274ngc_reset();
00375
00376
00377 extern int rs274ngc_restore_parameters(const char * filename);
00378
00379
00380 extern int rs274ngc_save_parameters(const char * filename,
00381 const double parameters[]);
00382
00383
00384 extern int rs274ngc_synch();
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399 extern void rs274ngc_active_g_codes(int * codes);
00400
00401
00402 extern void rs274ngc_active_m_codes(int * codes);
00403
00404
00405 extern void rs274ngc_active_settings(double * settings);
00406
00407
00408
00409 extern void rs274ngc_error_text(int error_code, char * error_text,
00410 int max_size);
00411
00412
00413
00414 extern void rs274ngc_file_name(char * file_name, int max_size);
00415
00416
00417 extern int rs274ngc_line_length();
00418
00419
00420
00421 extern void rs274ngc_line_text(char * line_text, int max_size);
00422
00423
00424 extern int rs274ngc_sequence_number();
00425
00426
00427
00428
00429 extern void rs274ngc_stack_name(int stack_index, char * function_name,
00430 int max_size);
00431
00432
00433 #ifndef NOT_OLD_EMC_INTERP_COMPATABLE
00434
00435 extern int rs274ngc_ini_load(const char *filename);
00436 static inline int rs274ngc_line() {return rs274ngc_sequence_number();}
00437 static inline const char *rs274ngc_command() { static char buf[100]; rs274ngc_line_text(buf,100); return buf;}
00438 static inline const char *rs274ngc_file() { static char buf[100]; rs274ngc_file_name(buf,100); return buf;}
00439
00440 #endif
00441
00442
00443
00444 #endif