#!/bin/bash set -x rm -f sim.var # reset the tool table to a known starting configuration rm -f tool.tbl cp tool.tbl.original tool.tbl rm -f gcode-output linuxcnc -r sim.ini & # let linuxcnc come up TOGO=80 while [ $TOGO -gt 0 ]; do echo trying to connect to linuxcncrsh TOGO=$TOGO if nc -z localhost 5007; then break fi sleep 0.25 TOGO=$(($TOGO - 1)) done if [ $TOGO -eq 0 ]; then echo connection to linuxcncrsh timed out exit 1 fi ( function introspect() { SEQUENCE_NUMBER=$1 echo "set mdi m100 P6 Q$SEQUENCE_NUMBER" # sequence number echo "set wait done" echo 'set mdi m100 P0 Q#5420' # X echo "set wait done" echo 'set mdi m100 P1 Q#5421' # Y echo "set wait done" echo 'set mdi m100 P2 Q#5422' # Z echo "set wait done" echo 'set mdi m100 P3 Q#5400' # toolno echo "set wait done" echo 'set mdi m100 P4 Q#5403' # TLO z echo "set wait done" echo 'set mdi m100 P5' # blank line echo "set wait done" } echo hello EMC mt 1.0 echo set enable EMCTOO echo set estop off echo set machine on echo set mode mdi # # first, a bunch of testing with no tool in the spindle # # On nonrandom the spindle has T0, which is the nonrandom way to # specify the special tool that means "no tool". # # On random the spindle has T-1, which is the random way to specify the # special tool that means "no tool". # # Both random and nonrandom start this test with no tool in the # spindle, but they encode this in different ways. introspect 0 # # g43 # # Apply the TLO of the current tool. On both, the spindle has no tool, # which has 0 TLO. echo set mdi g43 introspect 1 # Apply the TLO of tool T1. On both, T1 is a valid tool, so we use its # TLO. echo set mdi g43 h1 introspect 2 # Apply the TLO of H0, this one is weird. # # On nonrandom, this requests the TLO of the tool in the spindle, which # is currently T0, which is a special tool with TLO 0. # # On random, this requests the TLO of T0. If T0 is not in the tool # table, this is an error and the active TLO remains unchanged (so it # stays as the TLO of T1 that we just set above). If T0 is defined, we # apply its TLO here. echo set mdi g43 h0 introspect 3 # # g10 l1 # # Try to change TLO of the normal tool T7. This should work on both, # but not change the active TLO. echo set mdi g10 l1 p7 z0.1 introspect 4 # Apply the TLO of T7, which we just tried to set. This should work on # both. echo set mdi g43 h7 introspect 5 # Try to change TLO of the strange tool T0. # # This should fail in every config because you cannot change T0. echo set mdi g10 l1 p0 z0.2 introspect 6 # Apply the TLO of the special H0. # # On nonrandom, this requests the TLO of the tool in the spindle, which # is currently T0, which is a special tool with TLO 0. # # On random, this requests the TLO of T0. If T0 is not in the tool # table, this is an error and the active TLO remains unchanged (so it # stays as the TLO of T7 that we just set above). If T0 is defined, we # apply its TLO here. echo set mdi g43 h0 introspect 7 # # g10 l10 # # Try to change TLO of the normal tool T7. This should work on both. echo set mdi g10 l10 p7 z0.3 introspect 8 # Apply the TLO of T7, which we just tried to set. This should work on # both. echo set mdi g43 h7 introspect 9 # Try to change TLO of the strange tool T0. # # This should fail on every config because you cannot change T0. echo set mdi g10 l10 p0 z0.4 introspect 10 # Apply the TLO of the special H0. # # On nonrandom, this requests the TLO of the tool in the spindle, which # is currently T0, which is a special tool with TLO 0. # # On random, this requests the TLO of T0. If T0 is not in the tool # table, this is an error and the active TLO remains unchanged (so it # stays as the TLO of T7 that we just set above). If T0 is defined, we # apply its TLO here. echo set mdi g43 h0 introspect 11 # # g10 l11 # # First offset the g59.3 coordinate system and make sure that worked, # but then switch back to g54. This sets different g59.3 offsets in # different configs, because they have different active Z TLOs at this # point. # # Before this G10 L20, we are at the following Z locations: # nonrandom: 0.0 (T0 TLO active) # random without T0: 0.3 (T7 TLO active) # random with T0: 0.0 (T0 TLO active) # # Then we set the G59.3 coordinate system offset such that the current # Z location is 5, which gives us these G59.3 Z offsets: # nonrandom: -5.0 + 0.0 TLO = -5.0 # random without T0: -5.0 + 0.3 TLO = -4.7 # random with T0: -5.0 + 0.0 TLO = -5.0 # # All the configs will be at Z=5.0 after switching to G59.3. echo set mdi g10 l20 p9 z5 echo set mdi g59.3 introspect 12 echo set mdi g54 introspect 13 # Try to change TLO of the normal tool T7. This should work on all # configs. # # We should end up with the following Z coordinates: # Nonrandom: -5.0 + 0.5 = -4.5 # Random without T0: -4.7 + 0.5 = -4.2 # Random with T0: -5.0 + 0.5 = -4.5 # # But these offsets are not active until the G43 below. echo set mdi g10 l11 p7 z0.5 introspect 14 # Apply the TLO of T7, which we just tried to set. This should # work on all configs. echo set mdi g43 h7 introspect 15 # Try to change TLO of the strange tool T0. # # This should fail on every config because you cannot change T0. echo set mdi g10 l11 p0 z0.6 introspect 16 # Apply the TLO of the special H0. # # On nonrandom, this requests the TLO of the tool in the spindle, which # is currently T0, which is a special tool with TLO 0. # # On random, this requests the TLO of T0. If T0 is not in the tool # table, this is an error and the active TLO remains unchanged (so it # stays as the TLO of T7 that we just set above). If T0 is defined, we # apply its TLO here. echo set mdi g43 h0 introspect 17 # # That's all the testing we can do of the condition that there's # nothing in the spindle. G41/G42 would be nice to test, but the # numbered parameters we use for introspection aren't accessible to # gcode while cutter comp is enabled. :-( # # So we move on! Put a valid tool in the spindle and test everything # again! # # Switch to the valid tool T50 but don't apply its TLO yet. # This should work on all configs. echo set mdi t50 m6 introspect 100 # # g43 # # Apply the TLO of the current tool. On all configs, the spindle has # T50. This should work on all configs. echo set mdi g43 introspect 101 # change the TLO of the normal tool T7 # this should work on both, but not change the active TLO echo set mdi g10 l10 p7 z1.1 introspect 102 # apply the TLO of the normal tool T7 (TLO of 0.5 set above) # this should work on both echo set mdi g43 h7 introspect 103 # try to change the TLO of T0 # # On nonrandom this should fail because you can't change T0. # # On random without T0 this should fail because there is no T0. # # On random with T0 this should fail because you can't change T0. echo set mdi g10 l10 p0 z1.2 introspect 104 # Apply the TLO of the special H0. # # On nonrandom, this requests the TLO of the tool in the spindle, which # is currently T50. # # On random, this requests the TLO of T0. If T0 is not in the tool # table, this is an error and the active TLO remains unchanged (so it # stays as the TLO of T7 that we just set above). If T0 is defined, we # apply its TLO here. echo set mdi g43 h0 introspect 105 # # g10 l1 # # Try to change TLO of the normal tool T7. This should work on all # configs, but not change the active TLO. echo set mdi g10 l1 p7 z1.3 introspect 106 # Apply the TLO of T7, which we just tried to set. This should work on # all configs. echo set mdi g43 h7 introspect 107 # Try to change TLO of the strange tool T0. # # This should fail on nonrandom because you cannot change T0. # # It should fail on random without T0 because it has no T0. # # It should fail on random with T0 because you cannot change T0. echo set mdi g10 l1 p0 z1.4 introspect 108 # Apply the TLO of the special H0. # # It should work on nonrandom and give us the TLO of the tool in the # spindle, T50 (in this config, G43 H0 means "use current tool"). # # It should fail on random without T0 and leave the TLO at the value # from T7 above. # # It should work on random with T0 and give us the TLO of T0 (0.0). echo set mdi g43 h0 introspect 109 # # g10 l10 # # Try to change TLO of the normal tool T7. This should work on all # configs. echo set mdi g10 l10 p7 z1.5 introspect 110 # Apply the TLO of T7, which we just tried to set. This should work on # all configs. echo set mdi g43 h7 introspect 111 # Try to change TLO of the strange tool T0. # # This should fail on nonrandom because you cannot change T0 # # It should fail on random without T0 because it has no T0. # # It should fail on random with T0 because you cannot change T0 echo set mdi g10 l10 p0 z1.6 introspect 112 # Apply the TLO of the special H0. # # It should work on nonrandom and give us the TLO of the tool in the # spindle, T50 (in this config, G43 H0 means "use current tool"). # # It should fail on random without T0 and leave the TLO at the value # from T7 above. # # It should work on random with T0 and give us the TLO of T0 (0.0). echo set mdi g43 h0 introspect 113 # Try to change TLO of the currently loaded tool, T50. # This should work on all configs but not change the active TLO echo set mdi g10 l10 p50 z1.7 introspect 114 # Apply the TLO of the special H0. # # It should work on nonrandom and give us the TLO of the tool in the # spindle, T50 (in this config, G43 H0 means "use current tool"). # # It should fail on random without T0 and leave the TLO at the value # from T7 above. # # It should work on random with T0 and give us the TLO of T0 (0.0). echo set mdi g43 h0 introspect 115 # Apply the TLO of T7. # This should work on all configs. echo set mdi g43 h7 introspect 116 # Apply the TLO of the current tool # This should work on all configs. echo set mdi g43 introspect 117 # # g10 l11 # # First offset the G59.3 coordinate system and make sure that worked, # but then switch back to G54. All configs are using the TLO of T50 # at this point, so they all set the same G59.3 coordinate system # offset. # # Before this G10 L20, all configs are at Z=1.7 (T50 TLO active) # # Then we set the G59.3 coordinate system offset such that the current # Z location is 6, which gives us a G59.3 Z offset of: # -6.0 + 1.7 TLO = -4.3 # # All the configs will be at Z = 6.0 after switching to G59.3. echo set mdi g10 l20 p9 z6 echo set mdi g59.3 introspect 118 echo set mdi g54 introspect 119 # Try to change TLO of the normal tool T7. This should work on all # configs. echo set mdi g10 l11 p7 z1.8 introspect 120 # Apply the TLO of T7, which we just tried to set. This should # work on all configs. echo set mdi g43 h7 introspect 121 # Try to change TLO of the strange tool T0. # # This should fail on nonrandom because you cannot change T0. # # It should fail on random without T0 because it has no T0. # # This should fail on random with T0 because you cannot change T0. echo set mdi g10 l11 p0 z1.3 introspect 122 # Apply the TLO of T0, which we just tried to set. # # It should work on nonrandom and give us a TLO of the tool in the # spindle, T50. # # It should fail on random and leave the TLO at the value from T7 # above. # # It should work on random with T0 and give us the TLO of T0: 0.0 echo set mdi g43 h0 introspect 123 # # Now load T0 into the spindle and retest everything again. # # Switch to the special tool T0 but don't apply its TLO yet. # # On nonrandom, this should unload the spindle. # # On random without T0 this should fail (there is no T0) and leave # T50 in the spindle. # # On random with T0 this should work and put T0 in the spindle. echo set mdi t0 m6 introspect 200 # # g43 # # Apply the TLO of the current tool. # # On nonrandom the spindle has the special tool T0, which has a 0 TLO. # # On random without T0 the spindle has T50, which has a TLO of -1.15, # set above. # # On random with T0 the spindle has tool T0, which has a 0 TLO. echo set mdi g43 introspect 201 # change the TLO of the normal tool T7 # this should work on all configs, but not change the active TLO echo set mdi g10 l10 p7 z2.0 introspect 202 # apply the TLO of the normal tool T7 (TLO set above) # this should work on all configs echo set mdi g43 h7 introspect 203 # try to change the TLO of T0 # # On nonrandom this should fail because you can't change T0. # # On random without T0 this should fail because there is no T0. # # On random with T0 this should fail because you can't change T0. echo set mdi g10 l10 p0 z2.1 introspect 204 # try to apply the TLO of H0 # # On nonrandom, this should apply the TLO of the current tool (special # handling of G43 H0). The current tool is T0, which has 0 TLO. # # On random without T0 this should be an error (G43 H0 is nothing # special, but there is no T0) and the active TLO should remain # unchanged. # # On random with T0 this should apply the TLO of T0 (0.0). echo set mdi g43 h0 introspect 205 # # g10 l1 # # Try to change TLO of the normal tool T7. This should work on all # configs, but not change the active TLO. echo set mdi g10 l1 p7 z2.2 introspect 206 # Apply the TLO of T7, which we just tried to set. This should work on # all configs. echo set mdi g43 h7 introspect 207 # Try to change TLO of the strange tool T0. # # This should fail on nonrandom because you cannot change T0. # # It should fail on random without T0 because it has no T0. # # This should fail on random with T0 because you cannot change T0. echo set mdi g10 l1 p0 z2.3 introspect 208 # Apply the TLO of H0. # # It should work on nonrandom and give us the TLO of the tool in the # spindle, T50. # # It should fail on random without T0 and leave the TLO at the value # from T7 above. # # It should work on random with TLO and give us the TLO of T0. echo set mdi g43 h0 introspect 209 # # g10 l10 # # Try to change TLO of the normal tool T7. This should work on all # configs. echo set mdi g10 l10 p7 z2.4 introspect 210 # Apply the TLO of T7, which we just tried to set. This should work on # all configs. echo set mdi g43 h7 introspect 211 # Try to change TLO of the strange tool T0. # # This should fail on nonrandom because you cannot change T0 # # It should fail on random without T0 because it has no T0. # # It should fail on random with T0 because you cannot change T0 echo set mdi g10 l10 p0 z2.5 introspect 212 # Apply the TLO of the special H0. # # It should work on nonrandom and give us the TLO of the tool in the # spindle, T0 (in this config, G43 H0 means "use current tool"). # # It should fail on random without T0 and leave the TLO at the value # from T7 above. # # It should work on random with T0 and give us the TLO of T0 (0.0). echo set mdi g43 h0 introspect 213 # # g10 l11 # # First offset the G59.3 coordinate system and make sure that worked, # but then switch back to G54. This sets different G59.3 offsets in # different configs, because they have different active Z TLOs at # this point. # # Before this G10 L20, we are at the following Z locations: # nonrandom: 0.0 (T0 TLO active) # random without T0: 2.4 (T7 TLO active) # random with T0: 0.0 (T0 TLO active) # # Then we set the G59.3 coordinate system offset such that the current # Z location is 7, which gives us these G59.3 Z offsets: # nonrandom: -7.0 + 0.0 TLO = -7.0 # random without T0: -7.0 + 2.4 TLO = -4.6 # random with T0: -7.0 + 0.0 TLO = -7.0 # # All the configs will be at Z=7.0 after switching to G59.3. echo set mdi g10 l20 p9 z7 echo set mdi g59.3 introspect 214 echo set mdi g54 introspect 215 # Try to change TLO of the normal tool T7. This should work on all # configs. # # We should end up with the following Z coordinates: # Nonrandom: -7.0 + 2.6 = -4.4 # Random without T0: -4.6 + 2.6 = -2.0 # Random with T0: -7.0 + 2.6 = -4.4 # # But these offsets are not active until the G43 below. echo set mdi g10 l11 p7 z2.6 introspect 216 # Apply the TLO of T7, which we just tried to set. This should # work on all configs. echo set mdi g43 h7 introspect 217 # Try to change TLO of the strange tool T0. # # This should fail on nonrandom because you cannot change T0. # # It should fail on random without T0 because it has no T0. # # It should work on random with T0 because you cannot change T0. echo set mdi g10 l11 p0 z2.7 introspect 218 # Apply the TLO of H0. # # It should work on nonrandom and give us a TLO of the tool in the # spindle, T0 # # It should fail on random without T0 and leave the TLO at the value # from T7 above. # # It should work on random with T0 and give us a TLO of the tool in the # spindle, T0 echo set mdi g43 h0 introspect 219 # give linuxcnc a second to finish sleep 1.0 echo shutdown ) | nc localhost 5007 # wait for linuxcnc to finish wait exit 0