From: John M. <gi...@gi...> - 2016-10-22 22:34:44
|
statbuffer-g5x-abort test updates Clarify pre-state tags abort bug: after point of abort in program, switch to G56 and throw in queue buster; this shows that the problem is one of interp running ahead of motion, not one of incomplete clean-up by abort functions. Signed-off-by: John Morris <jo...@zu...> http://git.linuxcnc.org/?p=linuxcnc.git;a=commitdiff;h=f4a5fbe --- tests/statbuffer-g5x-abort/.gitignore | 1 + tests/statbuffer-g5x-abort/README | 16 ++++++++++ tests/statbuffer-g5x-abort/preview-strangeness.ngc | 36 ---------------------- tests/statbuffer-g5x-abort/simpockets.tbl | 3 ++ tests/statbuffer-g5x-abort/test-ui.py | 33 ++++++++++++-------- tests/statbuffer-g5x-abort/test.ngc | 16 ++++++++++ 6 files changed, 57 insertions(+), 48 deletions(-) diff --git a/tests/statbuffer-g5x-abort/.gitignore b/tests/statbuffer-g5x-abort/.gitignore new file mode 100644 index 0000000..b568a3e --- /dev/null +++ b/tests/statbuffer-g5x-abort/.gitignore @@ -0,0 +1 @@ +/sim.var* diff --git a/tests/statbuffer-g5x-abort/README b/tests/statbuffer-g5x-abort/README new file mode 100644 index 0000000..c9ec809 --- /dev/null +++ b/tests/statbuffer-g5x-abort/README @@ -0,0 +1,16 @@ +Interp runs ahead of motion. This test checks various state after +aborting a program that switches coordinate systems within the program. + +Interp's state must be synched from the status channel after an abort. +If this breaks, MDI command motion, mode line settings and system +parameters will follow interp's idea of state, which is probably that +where the program had run to a queue buster or to exit, whichever +comes first, whereas preview DROs and origin will match the status +channel's idea of state, which is that of the running program just +prior to the abort. + +This test runs a program that starts in G55 and aborts during a slow +move; were the program to continue, it would switch to G56 before +hitting a queue buster. Before program run, coordinate systems are +given distinct settings so that after aborting, status channel and +interp offsets can be checked in various ways. diff --git a/tests/statbuffer-g5x-abort/preview-strangeness.ngc b/tests/statbuffer-g5x-abort/preview-strangeness.ngc deleted file mode 100644 index 52dad1e..0000000 --- a/tests/statbuffer-g5x-abort/preview-strangeness.ngc +++ /dev/null @@ -1,36 +0,0 @@ - -% - -; If machine is in G54, and a program in G55 is aborted during run, -; preview will display DROs and origin in G55 coords, but mode line -; will say G54, register #5220 will contain 1, and MDI motion -; commands will use G54 coords. - -; To reproduce: -; - A. Load this program -; - B. Set up coordinate systems with MDI commands: -; G10 L2 P1 X0 Y0 Z-4 (Set G54) -; G10 L2 P2 X0 Y0 Z-5 (Set G55) -; G54 (Use G54) -; G0 X0 Y0 Z0 (Move to 0,0,0) -; - C. Run program, stopping during execution at 2. below -; - D. Move tool to origin with MDI command: -; G0 X0 Y0 Z0 (Move to 0,0,0) -; - E. Verify: -; - a. Mode line: G54 -; - b. MDI: G0 X0 Y0 Z0 ; Tool moves to abs X0Y0Z-4 == G54 X0Y0Z0 -; - c. MDI: (debug, G53+#5220; Z#5422) ; Prints "G53+1.0 Z0.0" == G54 -; - d. Preview: DROs say G55 X0Y0Z1; origin position at G55 - -; 1. Set a non-G54 offset and move to origin -G55 -G0 X0 Y0 Z0 - -; 2. Stop program during execution of the following line -G1 X5 Y-5 F1 (Slow move; STOP PROGRAM NOW) - -; (This line will never be reached) -M30 - -% - diff --git a/tests/statbuffer-g5x-abort/simpockets.tbl b/tests/statbuffer-g5x-abort/simpockets.tbl new file mode 100644 index 0000000..4b427da --- /dev/null +++ b/tests/statbuffer-g5x-abort/simpockets.tbl @@ -0,0 +1,3 @@ +T1 P1 D0.125000 Z+1.000000 ; +T10 P3 D0.500000 Z+3.000000 ; +T99999 P50 Z+2.000000 ; diff --git a/tests/statbuffer-g5x-abort/test-ui.py b/tests/statbuffer-g5x-abort/test-ui.py index bce9736..9f87345 100755 --- a/tests/statbuffer-g5x-abort/test-ui.py +++ b/tests/statbuffer-g5x-abort/test-ui.py @@ -24,11 +24,12 @@ c.state(linuxcnc.STATE_ESTOP_RESET) c.state(linuxcnc.STATE_ON) c.mode(linuxcnc.MODE_AUTO) -c.program_open('preview-strangeness.ngc') +c.program_open('test.ngc') c.mode(linuxcnc.MODE_MDI) c.mdi('G10 L2 P1 X0 Y0 Z-4 (Set G54)') c.mdi('G10 L2 P2 X0 Y0 Z-5 (Set G55)') +c.mdi('G10 L2 P3 X0 Y0 Z-6 (Set G56)') c.mdi('G54 (Use G54)') c.mdi('G0 X0 Y0 Z0 (Move to 0,0,0)') c.wait_complete() @@ -47,11 +48,13 @@ c.abort() c.wait_complete() s.poll() -# the program ran in g55, but now we should be back to g54 -if not 540 in s.gcodes: - print "not back in G54!" - print "s.gcodes:", s.gcodes +# The program was aborted in g55; check +if not 550 in s.gcodes: + print "Current coordinate system is G%d, not G55" % \ + ([i/10 for i in s.gcodes if i >= 540 and i < 600] + [None])[0] retval = 1 +else: + print "Current coordinate system is G55" # MDI G0 takes us to the programmed location in G54 c.mode(linuxcnc.MODE_MDI) @@ -67,18 +70,21 @@ if math.fabs(s.position[1]) > 0.000001: print "'G0 X0 Y0 Z0' took us to Y=%.6f, should be 0" % s.position[1] retval = 1 -if math.fabs(s.position[2] + 4) > 0.000001: - print "'G0 X0 Y0 Z0' took us to Z=%.6f, should be -4" % s.position[2] +if math.fabs(s.position[2] + 5) > 0.000001: + print "'G0 X0 Y0 Z0' took us to Z=%.6f, should be -5" % s.position[2] retval = 1 -c.mdi('(debug, G53+#5220; Z#5422) ; Prints "G53+1.0 Z0.0" == G54') +c.mdi('(debug,G53+#5220 ?= G55; Z#5422 ?= Z0.0)') c.wait_complete() err = e.poll() print err -if s.g5x_index != 1: - print "status has wrong g5x index: %d (expected 1)" % s.g5x_index +s.poll() +if s.g5x_index != 2: + print "status has wrong g5x index: %d (expected 2)" % s.g5x_index retval = 1 +else: + print "status has correct g5x index: 2" if math.fabs(s.g5x_offset[0]) > 0.000001: print "g5x_offset.x is %.6f, should be 0" % s.g5x_offset[0] @@ -88,9 +94,12 @@ if math.fabs(s.g5x_offset[1]) > 0.000001: print "g5x_offset.y is %.6f, should be 0" % s.g5x_offset[1] retval = 1 -if math.fabs(s.g5x_offset[2] + 4) > 0.000001: - print "g5x_offset.z is %.6f, should be -4" % s.g5x_offset[2] +if math.fabs(s.g5x_offset[2] + 5) > 0.000001: + print "g5x_offset.z is %.6f, should be -5" % s.g5x_offset[2] retval = 1 +if retval == 0: + print "Everything ok!" + sys.exit(retval) diff --git a/tests/statbuffer-g5x-abort/test.ngc b/tests/statbuffer-g5x-abort/test.ngc new file mode 100644 index 0000000..667abb5 --- /dev/null +++ b/tests/statbuffer-g5x-abort/test.ngc @@ -0,0 +1,16 @@ + +% +; 1. Set G55 offset +G55 + +; 2. Make some moves; execution should be aborted in this section +G0 X0 Y0 Z0 +G1 X5 Y-5 F1 + +; 3. Interp will read ahead: set G56 offset and throw a queue buster; +; execution will never reach this point +G56 +M66 P0 L0 (queue buster) + +% + |