Import LinuxCNC source tree

This commit is contained in:
Wang Dequan
2026-08-20 06:17:39 +08:00
commit 2c814634c3
9429 changed files with 10556013 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("A simple O sub example ")
N..... SET_FEED_RATE(40.0000)
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(1.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(2.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(3.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
N..... ON_RESET()

View File

@@ -0,0 +1,13 @@
%
( A simple O sub example )
F40
G90 G0 X0 Y0 Z0.25
M98 P1 L3
M30
O1
G91 G0 X1 ; Jog 1" along X (relative)
G90 G99 G81 Z-1.0 R0.25 ; Drill to Z-1.0
M99
%

View File

@@ -0,0 +1,3 @@
#!/bin/bash
rs274 -g test.ngc | awk '{$1=""; print}'
exit "${PIPESTATUS[0]}"

View File

@@ -0,0 +1,25 @@
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("Fanuc params have global scope; rs274ngc params #1..#30 have local scope ")
MAIN/FANUC: PRE-M98: 1=42.010000; 30=42.300000; 31=42.310000
O1: START: 1=42.010000; 30=42.300000; 31=42.310000
O1: END: 1=13.010000; 30=13.300000; 31=13.310000
MAIN/FANUC: POST-M98: 1=13.010000; 30=13.300000; 31=13.310000
MAIN/RS274NGC: PRE-O-CALL: 1=42.010000; 30=42.300000; 31=42.310000
O2: START: 1=0.000000; 30=0.000000; 31=42.310000
O2: END: 1=13.010000; 30=13.300000; 31=13.310000
MAIN/RS274NGC: POST-O-CALL: 1=42.010000; 30=42.300000; 31=13.310000
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
N..... ON_RESET()

View File

@@ -0,0 +1,37 @@
%
( Fanuc params have global scope; rs274ngc params #1..#30 have local scope )
; Fanuc-style: Test that all params are globally changed
#1 = 42.01
#30 = 42.30
#31 = 42.31
(PRINT,Q MAIN/FANUC: PRE-M98: 1=#1; 30=#30; 31=#31)
M98 P1
(PRINT,Q MAIN/FANUC: POST-M98: 1=#1; 30=#30; 31=#31)
; RS274NGC-style: Test that params #1..#30 are not globally changed
#1 = 42.01
#30 = 42.30
#31 = 42.31
(PRINT,Q MAIN/RS274NGC: PRE-O-CALL: 1=#1; 30=#30; 31=#31)
O2 call
(PRINT,Q MAIN/RS274NGC: POST-O-CALL: 1=#1; 30=#30; 31=#31)
M30
O1 ; Fanuc-style
(PRINT,Q O1: START: 1=#1; 30=#30; 31=#31)
#1 = 13.01
#30 = 13.30
#31 = 13.31
(PRINT,Q O1: END: 1=#1; 30=#30; 31=#31)
M99
O2 sub ; rs274ngc-style
(PRINT,Q O2: START: 1=#1; 30=#30; 31=#31)
#1 = 13.01
#30 = 13.30
#31 = 13.31
(PRINT,Q O2: END: 1=#1; 30=#30; 31=#31)
O2 endsub
%

View File

@@ -0,0 +1,3 @@
#!/bin/bash
rs274 -g test.ngc | awk '{$1=""; print}'
exit "${PIPESTATUS[0]}"

View File

@@ -0,0 +1,12 @@
executing
1 N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
2 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
3 N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
4 N..... SET_XY_ROTATION(0.0000)
5 N..... SET_FEED_REFERENCE(CANON_XYZ)
6 N..... ON_RESET()
7 N..... COMMENT("Fanuc M98 requires P-word ")
Found 'm98' code with no P-word
M98
8 N..... ON_RESET()
9 N..... ON_RESET()

View File

@@ -0,0 +1,9 @@
%
( Fanuc M98 requires P-word )
M98
O1
#1 = 13
M99
%

View File

@@ -0,0 +1,7 @@
#!/bin/bash
if ! rs274 -g test.ngc 2>&1; then
# expected to fail
exit 0
fi
exit 1

View File

@@ -0,0 +1,10 @@
1 N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
2 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
3 N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
4 N..... SET_XY_ROTATION(0.0000)
5 N..... SET_FEED_REFERENCE(CANON_XYZ)
6 N..... ON_RESET()
7 N..... COMMENT("M98 call non-existant sub ")
8 N..... FINISH()
9 N..... ON_RESET()
10 N..... ON_RESET()

View File

@@ -0,0 +1,6 @@
%
( M98 call non-existant sub )
M98 P1
M30
%

View File

@@ -0,0 +1,2 @@
#!/bin/bash -e
! rs274 -g test.ngc

View File

@@ -0,0 +1,135 @@
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("A simple O sub example ")
N..... SET_FEED_RATE(40.0000)
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(1.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 1.000000
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(2.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 2.000000
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(3.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 3.000000
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(4.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(4.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(4.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 4.000000
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(4.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(5.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(5.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(5.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 5.000000
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(5.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(6.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(6.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(6.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 6.000000
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(6.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(7.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(7.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(7.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 7.000000
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(7.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(8.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(8.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(8.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 8.000000
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(8.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(9.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(9.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(9.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 9.000000
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(9.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(10.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(10.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(10.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 10.000000
MAIN 10LOOP PARAM1 = 10.000000
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
MAIN 0LOOP PARAM1 = 0.000000
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(1.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 1.000000
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(2.0000, 0.0000, -0.5000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.5000, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
SUB O1 PARAM1 = 2.000000
MAIN 2LOOP PARAM1 = 2.000000
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
N..... ON_RESET()

View File

@@ -0,0 +1,27 @@
%
( A simple O sub example )
F40
; Test with 10 loops
#1 = 0
G90 G0 X0 Y0 Z0.25
M98 P1 L10
(PRINT,X MAIN 10LOOP PARAM1 = #1)
; Test with 0 loops
#1 = 0
G90 G0 X0 Y0 Z0.25
M98 P1 L0
(PRINT,X MAIN 0LOOP PARAM1 = #1)
; Test with 2 loops
#1 = 0
G90 G0 X0 Y0 Z0.25
M98 P1 L2
(PRINT,X MAIN 2LOOP PARAM1 = #1)
M30
O1
G91 G99 G81 X1 Z-1.0 R0.25 ; Drill to Z-1.0
#1 = [#1 + 1]
(PRINT,X SUB O1 PARAM1 = #1)
M99
%

View File

@@ -0,0 +1,3 @@
#!/bin/bash
rs274 -g test.ngc | awk '{$1=""; print}'
exit "${PIPESTATUS[0]}"

View File

@@ -0,0 +1,9 @@
%
( Fanuc 'O...' sub must be called with M98 )
O1 call
O1
(PRINT,X FANUC)
M99
%

View File

@@ -0,0 +1,9 @@
%
( Fanuc 'O...' sub must end with M99 )
M98 P1
O1
(PRINT,X FANUC)
O1 endsub
%

View File

@@ -0,0 +1,9 @@
%
( RS274NGC 'O...' sub must not be called with M98 )
M98 P1
O1 sub
(PRINT,X FANUC)
O1 endsub
%

View File

@@ -0,0 +1,9 @@
%
( RS274NGC 'O... sub' sub must not end with M99 )
O1 call
O1 sub
(PRINT,X FANUC)
M99
%

View File

@@ -0,0 +1,50 @@
executing
1 N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
2 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
3 N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
4 N..... SET_XY_ROTATION(0.0000)
5 N..... SET_FEED_REFERENCE(CANON_XYZ)
6 N..... ON_RESET()
7 N..... COMMENT("Fanuc 'O...' sub must be called with M98 ")
Fanuc 'O....' subroutine must be called with 'M98'
O1
8 N..... ON_RESET()
9 N..... ON_RESET()
executing
1 N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
2 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
3 N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
4 N..... SET_XY_ROTATION(0.0000)
5 N..... SET_FEED_REFERENCE(CANON_XYZ)
6 N..... ON_RESET()
7 N..... COMMENT("Fanuc 'O...' sub must end with M99 ")
X FANUC
Fanuc 'O....' subroutine definition must end with 'M99'
O1 endsub
8 N..... ON_RESET()
9 N..... ON_RESET()
executing
1 N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
2 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
3 N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
4 N..... SET_XY_ROTATION(0.0000)
5 N..... SET_FEED_REFERENCE(CANON_XYZ)
6 N..... ON_RESET()
7 N..... COMMENT("RS274NGC 'O...' sub must not be called with M98 ")
'O.... sub' subroutine must be called with 'O.... call'
O1 sub
8 N..... ON_RESET()
9 N..... ON_RESET()
executing
1 N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
2 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
3 N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
4 N..... SET_XY_ROTATION(0.0000)
5 N..... SET_FEED_REFERENCE(CANON_XYZ)
6 N..... ON_RESET()
7 N..... COMMENT("RS274NGC 'O... sub' sub must not end with M99 ")
X FANUC
'O.... endsub' or 'O.... return' must follow 'O.... sub' subroutine definition
M99
8 N..... ON_RESET()
9 N..... ON_RESET()

View File

@@ -0,0 +1,10 @@
#!/bin/bash
# All expected to fail
# Fanuc 'O...' sub definition mixed with RS274NGC 'O... endsub'/'O... call'
! rs274 -g O...-called-with-O..._call.ngc 2>&1 || exit 1
! rs274 -g O...-ended-with-O..._endsub.ngc 2>&1 || exit 1
# RS274 'O... sub' sub definition mixed with Fanuc 'M99'/'M98'
! rs274 -g O...-sub-called-with-M98.ngc 2>&1 || exit 1
! rs274 -g O...-sub-ended-with-M99.ngc 2>&1 || exit 1

View File

@@ -0,0 +1,49 @@
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("A nested Fanuc subroutine example ")
MAIN BEGIN: 1=0.000000
>>>> LOOP [O2.O1]: 0.100000
>>>> LOOP [O2.O1]: 0.200000
>>>> LOOP [O2.O1]: 0.300000
>>>> LOOP [O2.O1]: 0.400000
>>>> LOOP [O2.O1]: 0.500000
O2 END: 1=1.000000
>>>> LOOP [O2.O1]: 1.100000
>>>> LOOP [O2.O1]: 1.200000
>>>> LOOP [O2.O1]: 1.300000
>>>> LOOP [O2.O1]: 1.400000
>>>> LOOP [O2.O1]: 1.500000
O2 END: 1=2.000000
>>>> LOOP [O2.O1]: 2.100000
>>>> LOOP [O2.O1]: 2.200000
>>>> LOOP [O2.O1]: 2.300000
>>>> LOOP [O2.O1]: 2.400000
>>>> LOOP [O2.O1]: 2.500000
O2 END: 1=3.000000
>>>> LOOP [O2.O1]: 3.100000
>>>> LOOP [O2.O1]: 3.200000
>>>> LOOP [O2.O1]: 3.300000
>>>> LOOP [O2.O1]: 3.400000
>>>> LOOP [O2.O1]: 3.500000
O2 END: 1=4.000000
>>>> LOOP [O2.O1]: 4.100000
>>>> LOOP [O2.O1]: 4.200000
>>>> LOOP [O2.O1]: 4.300000
>>>> LOOP [O2.O1]: 4.400000
>>>> LOOP [O2.O1]: 4.500000
O2 END: 1=5.000000
MAIN END: 1=5.000000
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
N..... ON_RESET()

View File

@@ -0,0 +1,20 @@
%
( A nested Fanuc subroutine example )
#1 = 0
(PRINT,X MAIN BEGIN: 1=#1)
M98 P2 L5
(PRINT,X MAIN END: 1=#1)
M30
O2
M98 P1 L5
#1 = [FIX[#1] + 1]
(PRINT,X O2 END: 1=#1)
M99
O1
#1 = [#1 + 0.1]
(PRINT,X >>>> LOOP [O2.O1]: #1)
M99
%

View File

@@ -0,0 +1,3 @@
#!/bin/bash
rs274 -g test.ngc | awk '{$1=""; print}'
exit "${PIPESTATUS[0]}"

View File

@@ -0,0 +1,18 @@
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("Fanuc-style subs may follow main program ")
IN O1
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
N..... ON_RESET()

View File

@@ -0,0 +1,10 @@
%
( Fanuc-style subs may follow main program )
M98 P1
M30
O1
(PRINT,X IN O1)
M99
%

View File

@@ -0,0 +1,3 @@
#!/bin/bash
rs274 -g test.ngc | awk '{$1=""; print}'
exit "${PIPESTATUS[0]}"

View File

@@ -0,0 +1,206 @@
program: fanuc; INI: fanuc
executing
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("A simple O sub example ")
N..... SET_FEED_RATE(40.0000)
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(1.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(2.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(3.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
program: rs274ngc; INI: fanuc
executing
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("A simple O sub example ")
N..... SET_FEED_RATE(40.0000)
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(1.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
program: fanuc; INI: NO fanuc
executing
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("A simple O sub example ")
N..... SET_FEED_RATE(40.0000)
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
DISABLE_FANUC_STYLE_SUB set in INI file, but found m98
M98 P1 L3
N..... ON_RESET()
program: rs274ngc; INI: NO fanuc
executing
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("A simple O sub example ")
N..... SET_FEED_RATE(40.0000)
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(1.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
program: fanuc; INI: (none)
executing
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("A simple O sub example ")
N..... SET_FEED_RATE(40.0000)
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(1.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(2.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(2.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(3.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(3.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
N..... ON_RESET()
program: rs274ngc; INI: (none)
executing
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("A simple O sub example ")
N..... SET_FEED_RATE(40.0000)
N..... STRAIGHT_TRAVERSE(0.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to incremental")
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... COMMENT("interpreter: distance mode changed to absolute")
N..... COMMENT("interpreter: retract mode set to r_plane")
N..... SET_MOTION_CONTROL_MODE(CANON_EXACT_PATH)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_FEED(1.0000, 0.0000, -1.0000, 0.0000, 0.0000, 0.0000)
N..... STRAIGHT_TRAVERSE(1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000)
N..... SET_MOTION_CONTROL_MODE(CANON_CONTINUOUS, 0.000000)
N..... SET_NAIVECAM_TOLERANCE(0.0000)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
N..... ON_RESET()

View File

@@ -0,0 +1,2 @@
[RS274NGC]
DISABLE_FANUC_STYLE_SUB = 0

View File

@@ -0,0 +1,13 @@
%
( A simple O sub example )
F40
G90 G0 X0 Y0 Z0.25
M98 P1 L3
M30
O1
G91 G0 X1 ; Jog 1" along X (relative)
G90 G99 G81 Z-1.0 R0.25 ; Drill to Z-1.0
M99
%

View File

@@ -0,0 +1,4 @@
[RS274NGC]
DISABLE_FANUC_STYLE_SUB = 1
[EMC]
DEBUG = 2147483647

View File

@@ -0,0 +1,13 @@
%
( A simple O sub example )
O1 sub
G91 G0 X1 ; Jog 1" along X (relative)
G90 G99 G81 Z-1.0 R0.25 ; Drill to Z-1.0
O1 endsub
F40
G90 G0 X0 Y0 Z0.25
O1 call
M30
%

View File

@@ -0,0 +1,27 @@
#!/bin/bash
trim() { sed 's/^ *[0-9][0-9]* //'; }
# Fanuc enabled:
# - with Fanuc sub: pass
echo "program: fanuc; INI: fanuc"
rs274 -g -i test-fanuc.ini test-fanuc.ngc 2>&1 | trim
# - with rs274ngc sub: pass (rs274ngc subs not disabled)
echo "program: rs274ngc; INI: fanuc"
rs274 -g -i test-fanuc.ini test-rs274ngc.ngc 2>&1 | trim
# Fanuc disabled:
# - with Fanuc sub: fail
echo "program: fanuc; INI: NO fanuc"
{ ! rs274 -g -i test-no-fanuc.ini test-fanuc.ngc 2>&1; } | trim || exit 1
# - with rs274ngc sub: pass
echo "program: rs274ngc; INI: NO fanuc"
rs274 -g -i test-no-fanuc.ini test-rs274ngc.ngc 2>&1 | trim
# Default (Fanuc enabled):
# - with Fanuc sub: pass
echo "program: fanuc; INI: (none)"
rs274 -g test-fanuc.ngc 2>&1 | trim
# - with rs274ngc sub: pass (rs274ngc subs not disabled)
echo "program: rs274ngc; INI: (none)"
rs274 -g test-rs274ngc.ngc 2>&1 | trim

View File

@@ -0,0 +1,19 @@
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("main program")
got here
N..... COMMENT("end")
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
N..... ON_RESET()

View File

@@ -0,0 +1,14 @@
%
(main program)
M98 P0002
M30 (end)
O0002 (O-word begins with '0')
(PRINT,x got here)
M99
O2 (O-word does not begin with '0')
(PRINT,x ERROR: should not get here)
M99
%

View File

@@ -0,0 +1,3 @@
#!/bin/bash
rs274 -g test.ngc | awk '{$1=""; print}'
exit "${PIPESTATUS[0]}"

View File

@@ -0,0 +1,145 @@
Legal test end-main-with-m2:
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("legal example")
N..... COMMENT("Main program defined with numeric O-word title, terminated by M2")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("calling sub 2")
N..... COMMENT("in sub 2")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 3.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("returning from sub 2")
N..... COMMENT("returned from sub 2")
N..... COMMENT("end of main")
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PROGRAM_END()
N..... ON_RESET()
N..... ON_RESET()
Legal test end-main-with-m02:
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("legal example")
N..... COMMENT("Main program defined with numeric O-word title, terminated by M02")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("calling sub 2")
N..... COMMENT("in sub 2")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 3.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("returning from sub 2")
N..... COMMENT("returned from sub 2")
N..... COMMENT("end of main")
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PROGRAM_END()
N..... ON_RESET()
N..... ON_RESET()
Legal test end-main-with-m30:
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("legal example")
N..... COMMENT("Main program defined with numeric O-word title, terminated by M30")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("calling sub 2")
N..... COMMENT("in sub 2")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 3.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("returning from sub 2")
N..... COMMENT("returned from sub 2")
N..... COMMENT("end of main")
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PALLET_SHUTTLE()
N..... PROGRAM_END()
N..... ON_RESET()
N..... ON_RESET()
Legal test end-main-with-percent:
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("legal example")
N..... COMMENT("Main program defined with numeric O-word title, terminated by percent")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("calling sub 2")
N..... COMMENT("in sub 2")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 3.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("returning from sub 2")
N..... COMMENT("returned from sub 2")
N..... COMMENT("end of main signaled by percent")
N..... FINISH()
N..... ON_RESET()
N..... ON_RESET()
Illegal test end-main-with-eof:
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("legal example")
N..... COMMENT("Main program defined with numeric O-word title, terminated by EOF")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("calling sub 2")
N..... COMMENT("in sub 2")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 3.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("returning from sub 2")
N..... COMMENT("returned from sub 2")
N..... COMMENT("end of main signaled by EOF")
N..... ON_RESET()
N..... ON_RESET()
Illegal test no-m30-before-osub:
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("illegal example")
N..... COMMENT("Define rs274-style sub before numeric O-word main program end")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("calling sub 2")
N..... COMMENT("in sub 2")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 3.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("returning from sub 2")
N..... COMMENT("returned from sub 2")
N..... COMMENT("Illegal: O-sub with no M02 or M30 terminating main")
N..... ON_RESET()
N..... ON_RESET()
Illegal test sub-after-percent:
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... ON_RESET()
N..... COMMENT("illegal example")
N..... COMMENT("Define sub after percent [= after EOF]")
N..... STRAIGHT_TRAVERSE(1.0000, 2.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("calling sub 2")
N..... FINISH()
N..... ON_RESET()
N..... ON_RESET()

View File

@@ -0,0 +1,15 @@
(legal example)
(Main program defined with numeric O-word title, terminated by EOF)
O2 sub (subprogram begin) (program end signaled by O2 sub)
(in sub 2)
G0 Z3
(returning from sub 2)
O2 endsub
O1 (main program begin)
G0 X1Y2
(calling sub 2)
O2 call
(returned from sub 2)
(end of main signaled by EOF)

View File

@@ -0,0 +1,14 @@
(illegal example)
(Define rs274-style sub before numeric O-word main program end)
O1 (main program begin)
G0 X1Y2
(calling sub 2)
O2 call
(returned from sub 2)
(Illegal: O-sub with no M02 or M30 terminating main)
O2 sub (subprogram begin)
(in sub 2)
G0 Z3
(returning from sub 2)
O2 endsub

View File

@@ -0,0 +1,25 @@
%
(illegal example)
(Define sub after percent [= after EOF])
O1 (main program begin)
G0 X1Y2
(calling sub 2)
O2 call
(returned from sub 2)
%
(Nothing should follow % sign)
(From http://linuxcnc.org/docs/html/gcode/overview.html#_overview )
( The useful contents of a file demarcated by percents stop after )
( the second percent line. Anything after that is ignored. )
(From Smid 3rd Ed. p. 62)
( The percent sign (%) after M30 is a special _stop_code_. This )
( symbol terminates the loading of a program from an external )
( device. It is also called the _end-of-file_marker_. )
O2 sub (subprogram begin) (program end signaled by O2 sub)
(in sub 2)
G0 Z3
(returning from sub 2)
O2 endsub

View File

@@ -0,0 +1,15 @@
(legal example)
(Main program defined with numeric O-word title, terminated by M02)
O1 (main program begin)
G0 X1Y2
(calling sub 2)
O2 call
(returned from sub 2)
M02 (end of main)
(should never get here)
O2 sub (subprogram begin) (program end signaled by O2 sub)
(in sub 2)
G0 Z3
(returning from sub 2)
O2 endsub

View File

@@ -0,0 +1,15 @@
(legal example)
(Main program defined with numeric O-word title, terminated by M2)
O1 (main program begin)
G0 X1Y2
(calling sub 2)
O2 call
(returned from sub 2)
M2 (end of main)
(should never get here)
O2 sub (subprogram begin) (program end signaled by O2 sub)
(in sub 2)
G0 Z3
(returning from sub 2)
O2 endsub

View File

@@ -0,0 +1,15 @@
(legal example)
(Main program defined with numeric O-word title, terminated by M30)
O1 (main program begin)
G0 X1Y2
(calling sub 2)
O2 call
(returned from sub 2)
M30 (end of main)
(should never get here)
O2 sub (subprogram begin) (program end signaled by O2 sub)
(in sub 2)
G0 Z3
(returning from sub 2)
O2 endsub

View File

@@ -0,0 +1,17 @@
%
(legal example)
(Main program defined with numeric O-word title, terminated by percent)
O2 sub (subprogram begin) (program end signaled by O2 sub)
(in sub 2)
G0 Z3
(returning from sub 2)
O2 endsub
O1 (main program begin)
G0 X1Y2
(calling sub 2)
O2 call
(returned from sub 2)
(end of main signaled by percent)
%

View File

@@ -0,0 +1,44 @@
#!/bin/bash -e
LEGAL_TESTS="
end-main-with-m2
end-main-with-m02
end-main-with-m30
end-main-with-percent
"
ILLEGAL_TESTS="
end-main-with-eof
no-m30-before-osub
sub-after-percent
"
#
# Run legal tests
#
for t in $LEGAL_TESTS; do
echo "Legal test ${t}:"
rs274 -g "test-legal-${t}.ngc" | awk '{$1=""; print}'
res=${PIPESTATUS[0]}
if test "$res" = 0; then
echo "Success: Test '${t}' exited ${res}" >&2
else
echo "Error: Test '${t}' exited ${res}" >&2
exit "$res"
fi
done
# Run illegal tests
#
for t in $ILLEGAL_TESTS; do
echo "Illegal test ${t}:"
res=-1
rs274 -g "test-illegal-${t}.ngc" | awk '{$1=""; print}'
res=${PIPESTATUS[0]}
if test "$res" = 0; then
echo "Error: Illegal test '${t}' exited ${res}" >&2
exit "$res"
else
echo "Success: Illegal test '${t}' exited ${res} (non-zero=success)" >&2
fi
done

View File

@@ -0,0 +1,3 @@
out.motion-logger
rs274ngc.var
rs274ngc.var.bak

View File

@@ -0,0 +1,3 @@
#!/bin/sh
cd "$(dirname "$1")" || { echo "E: Could not change directory to '$(dirname "$1")'"; exit 1; }
diff -u expected.motion-logger out.motion-logger

View File

@@ -0,0 +1,30 @@
N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_REFERENCE(CANON_XYZ)
N..... COMMENT("Endless program")
N..... COMMENT("In a standalone interpreter, this should probably exit")
N..... COMMENT("at the main program M99. In task, the main program M99")
N..... COMMENT("should cause an endless loop, terminated by a counter.")
N..... COMMENT("*****************************************************")
N..... COMMENT("Don't *actually* run this program infinitely!")
N..... COMMENT("loops in case of failure")
N..... COMMENT("Counter; assume it starts at 0")
N..... COMMENT("*****************************************************")
Loop number 1.000000
N..... COMMENT("Junk move...")
N..... SET_FEED_RATE(40.0000)
N..... STRAIGHT_FEED(1.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("Subprogram junk move...")
N..... STRAIGHT_FEED(1.0000, -4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("Another junk move...")
N..... STRAIGHT_FEED(5.0000, -4.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... COMMENT("Main program endless loop")
N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
N..... SET_XY_ROTATION(0.0000)
N..... SET_FEED_MODE(0, 0)
N..... SET_FEED_RATE(0.0000)
N..... STOP_SPINDLE_TURNING(0)
N..... SET_SPINDLE_MODE(0 0.0000)
N..... PROGRAM_END()

View File

@@ -0,0 +1,227 @@
SET_NUM_JOINTS 9
SET_NUM_SPINDLES 1
SET_VEL vel=0, ini_maxvel=1.2
SET_VEL_LIMIT vel=4
SET_ACC acc=1e+99
SET_JERK jerk=1e+09
SET_PLANNER_TYPE planner_type=0
SET_SCURVE_PEAK_SCALE scale=1
SETUP_ARC_BLENDS
SET_MAX_FEED_OVERRIDE 1
SETUP_SET_PROBE_ERR_INHIBIT 0 0
SET_WORLD_HOME x=0, y=0, z=0, a=0, b=0, c=0, u=0, v=0, w=0
SET_JOINT_BACKLASH joint=0, backlash=0
SET_JOINT_POSITION_LIMITS joint=0, min=-40, max=0
SET_JOINT_POSITION_LIMITS joint=0, min=-40, max=40
SET_JOINT_MAX_FERROR joint=0, maxFerror=0.05
SET_JOINT_MIN_FERROR joint=0, minFerror=0.01
SET_JOINT_HOMING_PARAMS joint=0, offset=0 home=0, final_vel=-1, search_vel=0, latch_vel=0, flags=0x00000000, sequence=999, volatile=0
SET_JOINT_VEL_LIMIT joint=0, vel=4
SET_JOINT_ACC_LIMIT joint=0, acc=1000
SET_JOINT_JERK_LIMIT joint=0, jerk=0
JOINT_ACTIVATE joint=0
SET_JOINT_BACKLASH joint=1, backlash=0
SET_JOINT_POSITION_LIMITS joint=1, min=-40, max=0
SET_JOINT_POSITION_LIMITS joint=1, min=-40, max=40
SET_JOINT_MAX_FERROR joint=1, maxFerror=0.05
SET_JOINT_MIN_FERROR joint=1, minFerror=0.01
SET_JOINT_HOMING_PARAMS joint=1, offset=0 home=0, final_vel=-1, search_vel=0, latch_vel=0, flags=0x00000000, sequence=999, volatile=0
SET_JOINT_VEL_LIMIT joint=1, vel=4
SET_JOINT_ACC_LIMIT joint=1, acc=1000
SET_JOINT_JERK_LIMIT joint=1, jerk=0
JOINT_ACTIVATE joint=1
SET_JOINT_BACKLASH joint=2, backlash=0
SET_JOINT_POSITION_LIMITS joint=2, min=-4, max=0
SET_JOINT_POSITION_LIMITS joint=2, min=-4, max=4
SET_JOINT_MAX_FERROR joint=2, maxFerror=0.05
SET_JOINT_MIN_FERROR joint=2, minFerror=0.01
SET_JOINT_HOMING_PARAMS joint=2, offset=0 home=0, final_vel=-1, search_vel=0, latch_vel=0, flags=0x00000000, sequence=999, volatile=0
SET_JOINT_VEL_LIMIT joint=2, vel=4
SET_JOINT_ACC_LIMIT joint=2, acc=1000
SET_JOINT_JERK_LIMIT joint=2, jerk=0
JOINT_ACTIVATE joint=2
SET_JOINT_BACKLASH joint=3, backlash=0
SET_JOINT_POSITION_LIMITS joint=3, min=-40, max=0
SET_JOINT_POSITION_LIMITS joint=3, min=-40, max=40
SET_JOINT_MAX_FERROR joint=3, maxFerror=0.05
SET_JOINT_MIN_FERROR joint=3, minFerror=0.01
SET_JOINT_HOMING_PARAMS joint=3, offset=0 home=0, final_vel=-1, search_vel=0, latch_vel=0, flags=0x00000000, sequence=999, volatile=0
SET_JOINT_VEL_LIMIT joint=3, vel=4
SET_JOINT_ACC_LIMIT joint=3, acc=1000
SET_JOINT_JERK_LIMIT joint=3, jerk=0
JOINT_ACTIVATE joint=3
SET_JOINT_BACKLASH joint=4, backlash=0
SET_JOINT_POSITION_LIMITS joint=4, min=-40, max=0
SET_JOINT_POSITION_LIMITS joint=4, min=-40, max=40
SET_JOINT_MAX_FERROR joint=4, maxFerror=0.05
SET_JOINT_MIN_FERROR joint=4, minFerror=0.01
SET_JOINT_HOMING_PARAMS joint=4, offset=0 home=0, final_vel=-1, search_vel=0, latch_vel=0, flags=0x00000000, sequence=999, volatile=0
SET_JOINT_VEL_LIMIT joint=4, vel=4
SET_JOINT_ACC_LIMIT joint=4, acc=1000
SET_JOINT_JERK_LIMIT joint=4, jerk=0
JOINT_ACTIVATE joint=4
SET_JOINT_BACKLASH joint=5, backlash=0
SET_JOINT_POSITION_LIMITS joint=5, min=-4, max=0
SET_JOINT_POSITION_LIMITS joint=5, min=-4, max=4
SET_JOINT_MAX_FERROR joint=5, maxFerror=0.05
SET_JOINT_MIN_FERROR joint=5, minFerror=0.01
SET_JOINT_HOMING_PARAMS joint=5, offset=0 home=0, final_vel=-1, search_vel=0, latch_vel=0, flags=0x00000000, sequence=999, volatile=0
SET_JOINT_VEL_LIMIT joint=5, vel=4
SET_JOINT_ACC_LIMIT joint=5, acc=1000
SET_JOINT_JERK_LIMIT joint=5, jerk=0
JOINT_ACTIVATE joint=5
SET_JOINT_BACKLASH joint=6, backlash=0
SET_JOINT_POSITION_LIMITS joint=6, min=-40, max=0
SET_JOINT_POSITION_LIMITS joint=6, min=-40, max=40
SET_JOINT_MAX_FERROR joint=6, maxFerror=0.05
SET_JOINT_MIN_FERROR joint=6, minFerror=0.01
SET_JOINT_HOMING_PARAMS joint=6, offset=0 home=0, final_vel=-1, search_vel=0, latch_vel=0, flags=0x00000000, sequence=999, volatile=0
SET_JOINT_VEL_LIMIT joint=6, vel=4
SET_JOINT_ACC_LIMIT joint=6, acc=1000
SET_JOINT_JERK_LIMIT joint=6, jerk=0
JOINT_ACTIVATE joint=6
SET_JOINT_BACKLASH joint=7, backlash=0
SET_JOINT_POSITION_LIMITS joint=7, min=-40, max=0
SET_JOINT_POSITION_LIMITS joint=7, min=-40, max=40
SET_JOINT_MAX_FERROR joint=7, maxFerror=0.05
SET_JOINT_MIN_FERROR joint=7, minFerror=0.01
SET_JOINT_HOMING_PARAMS joint=7, offset=0 home=0, final_vel=-1, search_vel=0, latch_vel=0, flags=0x00000000, sequence=999, volatile=0
SET_JOINT_VEL_LIMIT joint=7, vel=4
SET_JOINT_ACC_LIMIT joint=7, acc=1000
SET_JOINT_JERK_LIMIT joint=7, jerk=0
JOINT_ACTIVATE joint=7
SET_JOINT_BACKLASH joint=8, backlash=0
SET_JOINT_POSITION_LIMITS joint=8, min=-4, max=0
SET_JOINT_POSITION_LIMITS joint=8, min=-4, max=4
SET_JOINT_MAX_FERROR joint=8, maxFerror=0.05
SET_JOINT_MIN_FERROR joint=8, minFerror=0.01
SET_JOINT_HOMING_PARAMS joint=8, offset=0 home=0, final_vel=-1, search_vel=0, latch_vel=0, flags=0x00000000, sequence=999, volatile=0
SET_JOINT_VEL_LIMIT joint=8, vel=4
SET_JOINT_ACC_LIMIT joint=8, acc=1000
SET_JOINT_JERK_LIMIT joint=8, jerk=0
JOINT_ACTIVATE joint=8
SET_AXIS_POSITION_LIMITS axis=0, min=-40, max=0
SET_AXIS_POSITION_LIMITS axis=0, min=-40, max=40
SET_AXIS_VEL_LIMIT axis=0 vel=4
SET_AXIS_ACC_LIMIT axis=0, acc=1000
SET_AXIS_LOCKING_JOINT axis=0, locking_joint=-1
SET_AXIS_JERK_LIMIT axis=0, jerk=0
SET_AXIS_POSITION_LIMITS axis=1, min=-40, max=0
SET_AXIS_POSITION_LIMITS axis=1, min=-40, max=40
SET_AXIS_VEL_LIMIT axis=1 vel=4
SET_AXIS_ACC_LIMIT axis=1, acc=1000
SET_AXIS_LOCKING_JOINT axis=1, locking_joint=-1
SET_AXIS_JERK_LIMIT axis=1, jerk=0
SET_AXIS_POSITION_LIMITS axis=2, min=-4, max=0
SET_AXIS_POSITION_LIMITS axis=2, min=-4, max=4
SET_AXIS_VEL_LIMIT axis=2 vel=4
SET_AXIS_ACC_LIMIT axis=2, acc=1000
SET_AXIS_LOCKING_JOINT axis=2, locking_joint=-1
SET_AXIS_JERK_LIMIT axis=2, jerk=0
SET_AXIS_POSITION_LIMITS axis=3, min=-40, max=0
SET_AXIS_POSITION_LIMITS axis=3, min=-40, max=40
SET_AXIS_VEL_LIMIT axis=3 vel=4
SET_AXIS_ACC_LIMIT axis=3, acc=1000
SET_AXIS_LOCKING_JOINT axis=3, locking_joint=-1
SET_AXIS_JERK_LIMIT axis=3, jerk=0
SET_AXIS_POSITION_LIMITS axis=4, min=-40, max=0
SET_AXIS_POSITION_LIMITS axis=4, min=-40, max=40
SET_AXIS_VEL_LIMIT axis=4 vel=4
SET_AXIS_ACC_LIMIT axis=4, acc=1000
SET_AXIS_LOCKING_JOINT axis=4, locking_joint=-1
SET_AXIS_JERK_LIMIT axis=4, jerk=0
SET_AXIS_POSITION_LIMITS axis=5, min=-4, max=0
SET_AXIS_POSITION_LIMITS axis=5, min=-4, max=4
SET_AXIS_VEL_LIMIT axis=5 vel=4
SET_AXIS_ACC_LIMIT axis=5, acc=1000
SET_AXIS_LOCKING_JOINT axis=5, locking_joint=-1
SET_AXIS_JERK_LIMIT axis=5, jerk=0
SET_AXIS_POSITION_LIMITS axis=6, min=-40, max=0
SET_AXIS_POSITION_LIMITS axis=6, min=-40, max=40
SET_AXIS_VEL_LIMIT axis=6 vel=4
SET_AXIS_ACC_LIMIT axis=6, acc=1000
SET_AXIS_LOCKING_JOINT axis=6, locking_joint=-1
SET_AXIS_JERK_LIMIT axis=6, jerk=0
SET_AXIS_POSITION_LIMITS axis=7, min=-40, max=0
SET_AXIS_POSITION_LIMITS axis=7, min=-40, max=40
SET_AXIS_VEL_LIMIT axis=7 vel=4
SET_AXIS_ACC_LIMIT axis=7, acc=1000
SET_AXIS_LOCKING_JOINT axis=7, locking_joint=-1
SET_AXIS_JERK_LIMIT axis=7, jerk=0
SET_AXIS_POSITION_LIMITS axis=8, min=-4, max=0
SET_AXIS_POSITION_LIMITS axis=8, min=-4, max=4
SET_AXIS_VEL_LIMIT axis=8 vel=4
SET_AXIS_ACC_LIMIT axis=8, acc=1000
SET_AXIS_LOCKING_JOINT axis=8, locking_joint=-1
SET_AXIS_JERK_LIMIT axis=8, jerk=0
SET_SPINDLE_PARAMS, 1.00e+99, 0.00e+00, -1.00e+99, 0.00e+00
JOG_ABORT joint=0
JOG_ABORT joint=1
JOG_ABORT joint=2
JOG_ABORT joint=3
JOG_ABORT joint=4
JOG_ABORT joint=5
JOG_ABORT joint=6
JOG_ABORT joint=7
JOG_ABORT joint=8
JOG_ABORT joint=9
JOG_ABORT joint=10
JOG_ABORT joint=11
JOG_ABORT joint=12
JOG_ABORT joint=13
JOG_ABORT joint=14
JOG_ABORT joint=15
ABORT
SPINDLE_OFF
DISABLE
JOINT_UNHOME joint=-2
FREE
JOG_ABORT joint=0
JOG_ABORT joint=1
JOG_ABORT joint=2
JOG_ABORT joint=3
JOG_ABORT joint=4
JOG_ABORT joint=5
JOG_ABORT joint=6
JOG_ABORT joint=7
JOG_ABORT joint=8
JOG_ABORT joint=9
JOG_ABORT joint=10
JOG_ABORT joint=11
JOG_ABORT joint=12
JOG_ABORT joint=13
JOG_ABORT joint=14
JOG_ABORT joint=15
ABORT
SPINDLE_OFF
ENABLE
COORD
JOG_ABORT joint=0
JOG_ABORT joint=1
JOG_ABORT joint=2
JOG_ABORT joint=3
JOG_ABORT joint=4
JOG_ABORT joint=5
JOG_ABORT joint=6
JOG_ABORT joint=7
JOG_ABORT joint=8
JOG_ABORT joint=9
JOG_ABORT joint=10
JOG_ABORT joint=11
JOG_ABORT joint=12
JOG_ABORT joint=13
JOG_ABORT joint=14
JOG_ABORT joint=15
ABORT
SET_LINE x=1, y=0, z=0, a=0, b=0, c=0, u=0, v=0, w=0, id=19, motion_type=2, vel=0.666667, ini_maxvel=4, acc=1000, turn=-1
SET_LINE x=1, y=-4, z=0, a=0, b=0, c=0, u=0, v=0, w=0, id=26, motion_type=2, vel=0.666667, ini_maxvel=4, acc=1000, turn=-1
SET_LINE x=5, y=-4, z=0, a=0, b=0, c=0, u=0, v=0, w=0, id=21, motion_type=2, vel=0.666667, ini_maxvel=4, acc=1000, turn=-1
SET_LINE x=1, y=0, z=0, a=0, b=0, c=0, u=0, v=0, w=0, id=19, motion_type=2, vel=0.666667, ini_maxvel=4, acc=1000, turn=-1
SET_LINE x=1, y=-4, z=0, a=0, b=0, c=0, u=0, v=0, w=0, id=26, motion_type=2, vel=0.666667, ini_maxvel=4, acc=1000, turn=-1
SET_LINE x=5, y=-4, z=0, a=0, b=0, c=0, u=0, v=0, w=0, id=21, motion_type=2, vel=0.666667, ini_maxvel=4, acc=1000, turn=-1
SET_LINE x=1, y=0, z=0, a=0, b=0, c=0, u=0, v=0, w=0, id=19, motion_type=2, vel=0.666667, ini_maxvel=4, acc=1000, turn=-1
SET_LINE x=1, y=-4, z=0, a=0, b=0, c=0, u=0, v=0, w=0, id=26, motion_type=2, vel=0.666667, ini_maxvel=4, acc=1000, turn=-1
SET_LINE x=5, y=-4, z=0, a=0, b=0, c=0, u=0, v=0, w=0, id=21, motion_type=2, vel=0.666667, ini_maxvel=4, acc=1000, turn=-1
SET_SPINDLESYNC sync=0.000000, flags=0x00000000
SPINDLE_OFF
DISABLE

View File

@@ -0,0 +1,3 @@
loadusr -W motion-logger out.motion-logger
setp iocontrol.0.emc-enable-in 1

View File

@@ -0,0 +1,215 @@
[EMC]
VERSION = 1.1
DEBUG = 0x0
[DISPLAY]
DISPLAY = ./test-ui.py
[TASK]
TASK = milltask
CYCLE_TIME = 0.001
[RS274NGC]
PARAMETER_FILE = sim.var
[EMCMOT]
#EMCMOT = motmod
COMM_TIMEOUT = 10.0
COMM_WAIT = 0.010
BASE_PERIOD = 0
SERVO_PERIOD = 1000000
[EMCIO]
TOOL_TABLE = simpockets.tbl
TOOL_CHANGE_QUILL_UP = 1
RANDOM_TOOLCHANGER = 0
[HAL]
HALFILE = mock-motion.hal
#POSTGUI_HALFILE = postgui.hal
[TRAJ]
NO_FORCE_HOMING = 1
COORDINATES = X Y Z A B C U V W
HOME = 0 0 0 0 0 0 0 0 0
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_LINEAR_VELOCITY = 1.2
MAX_LINEAR_VELOCITY = 4
[KINS]
KINEMATICS = trivkins
JOINTS = 9
[AXIS_X]
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
[JOINT_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
FERROR = 0.050
MIN_FERROR = 0.010
[AXIS_Y]
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
[JOINT_1]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
FERROR = 0.050
MIN_FERROR = 0.010
[AXIS_Z]
MIN_LIMIT = -4.0
MAX_LIMIT = 4.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
[JOINT_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -4.0
MAX_LIMIT = 4.0
FERROR = 0.050
MIN_FERROR = 0.010
[AXIS_A]
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
[JOINT_3]
TYPE = ANGULAR
HOME = 0.000
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
FERROR = 0.050
MIN_FERROR = 0.010
[AXIS_B]
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
[JOINT_4]
TYPE = ANGULAR
HOME = 0.000
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
FERROR = 0.050
MIN_FERROR = 0.010
[AXIS_C]
MIN_LIMIT = -4.0
MAX_LIMIT = 4.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
[JOINT_5]
TYPE = ANGULAR
HOME = 0.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -4.0
MAX_LIMIT = 4.0
FERROR = 0.050
MIN_FERROR = 0.010
[AXIS_U]
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
[JOINT_6]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
FERROR = 0.050
MIN_FERROR = 0.010
[AXIS_V]
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
[JOINT_7]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
FERROR = 0.050
MIN_FERROR = 0.010
[AXIS_W]
MIN_LIMIT = -4.0
MAX_LIMIT = 4.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
[JOINT_8]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 1000.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -4.0
MAX_LIMIT = 4.0
FERROR = 0.050
MIN_FERROR = 0.010

View File

@@ -0,0 +1,36 @@
#!/usr/bin/env python3
import linuxcnc
import hal
import time
import sys
#
# connect to LinuxCNC
#
c = linuxcnc.command()
s = linuxcnc.stat()
e = linuxcnc.error_channel()
#
# Come out of E-stop, turn the machine on, home, and switch to Auto mode.
#
c.state(linuxcnc.STATE_ESTOP_RESET)
c.state(linuxcnc.STATE_ON)
c.mode(linuxcnc.MODE_AUTO)
#
# run the .ngc test file, starting from the special line
#
c.program_open('test.ngc')
c.auto(linuxcnc.AUTO_RUN, 4)
c.wait_complete()
sys.exit(0)

View File

@@ -0,0 +1,29 @@
(Endless program)
(In a standalone interpreter, this should probably exit)
(at the main program M99. In task, the main program M99)
(should cause an endless loop, terminated by a counter.)
(*****************************************************)
(Don't *actually* run this program infinitely!)
(Stop after)#101 = 3(loops in case of failure)
#100 = [#100 + 1] (Counter; assume it starts at 0)
O1000 if [#100 GT #101]
(PRINT, "Stopping program after #101 loops")
#100 = 0 (Reset counter)
M30 (End program)
O1000 endif
(*****************************************************)
O1 (Main program begin)
(PRINT, X Loop number #100)
G1 X1 F40 (Junk move...)
M98 P100 (Call junk subprogram)
G1 X5 (Another junk move...)
M99 (Main program endless loop)
(*****************************************************)
O100 (Junk subprogram begin)
G1 Y-4 (Subprogram junk move...)
M99 (Return to main program)
%

View File

@@ -0,0 +1,10 @@
#!/bin/bash -e
rm -f out.motion-logger
# Run test file in task: should loop through program three times
linuxcnc -r motion-logger.ini
# Run test file in stand-alone interpreter: should run program once
rs274 -g test.ngc | awk '{$1=""; print}'
exit "${PIPESTATUS[0]}"

View File

@@ -0,0 +1,36 @@
1 N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
2 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
3 N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
4 N..... SET_XY_ROTATION(0.0000)
5 N..... SET_FEED_REFERENCE(CANON_XYZ)
6 N..... ON_RESET()
7 N..... COMMENT("test-named.ngc: Test named programs")
8 N..... COMMENT("...program body")
9 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
10 N..... SET_XY_ROTATION(0.0000)
11 N..... SET_FEED_MODE(0, 0)
12 N..... SET_FEED_RATE(0.0000)
13 N..... STOP_SPINDLE_TURNING(0)
14 N..... SET_SPINDLE_MODE(0 0.0000)
15 N..... PALLET_SHUTTLE()
16 N..... PROGRAM_END()
17 N..... ON_RESET()
18 N..... ON_RESET()
1 N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
2 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
3 N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
4 N..... SET_XY_ROTATION(0.0000)
5 N..... SET_FEED_REFERENCE(CANON_XYZ)
6 N..... ON_RESET()
7 N..... COMMENT("test-numbered.ngc: Test numbered programs")
8 N..... COMMENT("...program body")
9 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
10 N..... SET_XY_ROTATION(0.0000)
11 N..... SET_FEED_MODE(0, 0)
12 N..... SET_FEED_RATE(0.0000)
13 N..... STOP_SPINDLE_TURNING(0)
14 N..... SET_SPINDLE_MODE(0 0.0000)
15 N..... PALLET_SHUTTLE()
16 N..... PROGRAM_END()
17 N..... ON_RESET()
18 N..... ON_RESET()

View File

@@ -0,0 +1,6 @@
%
(test-named.ngc: Test named programs)
O<MyProgram>
(...program body)
M30
%

View File

@@ -0,0 +1,6 @@
%
(test-numbered.ngc: Test numbered programs)
O42
(...program body)
M30
%

View File

@@ -0,0 +1,3 @@
#!/bin/bash -e
rs274 -g test-named.ngc
rs274 -g test-numbered.ngc

View File

@@ -0,0 +1,18 @@
1 N..... USE_LENGTH_UNITS(CANON_UNITS_MM)
2 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
3 N..... SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
4 N..... SET_XY_ROTATION(0.0000)
5 N..... SET_FEED_REFERENCE(CANON_XYZ)
6 N..... ON_RESET()
In sub 100
In sub 200
7 N..... SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)
8 N..... SET_XY_ROTATION(0.0000)
9 N..... SET_FEED_MODE(0, 0)
10 N..... SET_FEED_RATE(0.0000)
11 N..... STOP_SPINDLE_TURNING(0)
12 N..... SET_SPINDLE_MODE(0 0.0000)
13 N..... PALLET_SHUTTLE()
14 N..... PROGRAM_END()
15 N..... ON_RESET()
16 N..... ON_RESET()

View File

@@ -0,0 +1,21 @@
%
; test calling subprograms with expressions
; call sub O100: use variable in expression with rs274ngc O-sub
#2 = 10
O[#2 * 10] call
; call sub O200: use expression in M98 P-word
M98 P[5 * 5 * 2 * 2 + 100]
M30
O100 sub ; rs274ngc subroutine
(print,In sub 100)
O100 endsub
O200 ; numbered subprogram
(print,In sub 200)
M99
%

View File

@@ -0,0 +1,2 @@
#!/bin/bash -e
rs274 -g test.ngc