286 lines
8.0 KiB
Bash
Executable File
286 lines
8.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
rm -f gcode-output
|
|
|
|
if nc -z localhost 5007; then
|
|
echo "Process already listening on port 5007. Exiting"
|
|
exit 1
|
|
fi
|
|
|
|
linuxcnc -r linuxcncrsh-test.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
|
|
|
|
# test set command by
|
|
# - getting the key's old value before setting
|
|
# - setting the new value
|
|
# - getting the new value
|
|
# - collect possible error from linuxcncsvr
|
|
function testSet() {
|
|
# get before value
|
|
echo "get $1"
|
|
# set cmd
|
|
echo "set $*"
|
|
# get after value
|
|
echo "get $1"
|
|
# get error from server (or OK)
|
|
echo "get error"
|
|
}
|
|
|
|
function testSetOnly() {
|
|
# set cmd
|
|
echo "set $*"
|
|
# get error from server (or OK)
|
|
echo "get error"
|
|
}
|
|
|
|
(
|
|
# initialize
|
|
echo set timestamp off
|
|
#echo set timestamp on
|
|
# We don't really care about versioning this API
|
|
echo hello EMC mt 1.1
|
|
# Providing a bad password will disable and unlink
|
|
echo hello BADPASSWORD mt 1.1
|
|
echo get debug
|
|
# relink
|
|
echo hello EMC mt
|
|
# Don't echo enable password
|
|
echo set echo off
|
|
testSet enable EMCTOO
|
|
echo set echo on
|
|
echo get debug
|
|
testSet verbose on
|
|
testSet echo off
|
|
# ask linuxcncrsh to not read the next command until it's done running
|
|
# the current one
|
|
testSet wait_mode "done"
|
|
|
|
# Get some INI file entries
|
|
echo get ini DISPLAY DISPLAY
|
|
echo get ini SPINDLES TRAJ
|
|
echo get ini AVAILABLE NOT
|
|
# Can't use 'get inifile' because it returns an absolute path that varies
|
|
# with the test environment.
|
|
# echo get inifile
|
|
|
|
# check default global settings
|
|
echo get plat
|
|
echo get update
|
|
|
|
# test commands that fail when machine not running
|
|
testSet mode mdi
|
|
|
|
# prepare machine
|
|
testSet estop off
|
|
testSet machine on
|
|
|
|
# test if probing in manual mode fails
|
|
testSet mode manual
|
|
echo get pos_offset
|
|
echo get probe_tripped
|
|
echo get probe_value
|
|
testSetOnly probe_clear
|
|
testSetOnly probe 0 0 0 # <x> <y> <z>
|
|
testSetOnly probe_clear
|
|
|
|
# test if probing before homing fails (not)
|
|
testSet mode mdi
|
|
# probe with zero feed fails
|
|
testSetOnly probe 0 0 0 # <x> <y> <z>
|
|
echo set mdi f10
|
|
# probe with no movement fails
|
|
testSetOnly probe 0 0 0 # <x> <y> <z>
|
|
testSetOnly probe 0 0 0.01 # <x> <y> <z>
|
|
echo get probe_tripped
|
|
testSetOnly probe_clear
|
|
|
|
# do homing
|
|
testSet mode manual
|
|
echo get joint_homed # Current home status
|
|
testSetOnly joint_home 0 # Home joint
|
|
echo set joint_wait_homed 0 # Homing takes time
|
|
echo get joint_homed # New home status
|
|
|
|
testSetOnly joint_home 1
|
|
echo set joint_wait_homed 1
|
|
echo get joint_homed
|
|
|
|
testSetOnly joint_home 2
|
|
echo set joint_wait_homed 2
|
|
echo get joint_homed
|
|
|
|
# These should fail, there are only three joints
|
|
# (also tests alias of joint_home)
|
|
testSetOnly home 3
|
|
testSetOnly home 4
|
|
testSetOnly home 5
|
|
|
|
echo set wait_heartbeat 10000 # must fail: would be 10 seconds
|
|
|
|
echo set echo on
|
|
echo set wait_heartbeat
|
|
testSet teleop_enable off # Or we can't unhome
|
|
echo get joint_homed
|
|
testSetOnly joint_unhome 1
|
|
echo get joint_homed
|
|
testSetOnly joint_home 1
|
|
echo set joint_wait_homed 1
|
|
echo get joint_homed
|
|
# There is a race on get teleop_enable. After we homed, it may take a while
|
|
# for teleop mode to become active again.
|
|
# The SET JOINT_WAIT_HOMED already waited a heartbeat for us
|
|
# echo set wait_heartbeat
|
|
echo get teleop_enable
|
|
echo set echo off
|
|
|
|
# test probing
|
|
testSet mode mdi
|
|
testSetOnly probe 0 0 0.02 # <x> <y> <z>
|
|
echo get probe_tripped
|
|
testSetOnly probe_clear
|
|
|
|
testSet mode manual
|
|
testSet teleop_enable on
|
|
testSet mode mdi
|
|
testSetOnly probe 0 0 0 # <x> <y> <z>
|
|
echo get probe_tripped
|
|
testSetOnly probe_clear
|
|
|
|
# test spindle command
|
|
testSet mode manual
|
|
testSet spindle forward # turn on all w/o param
|
|
testSet spindle off -1 # turn off all w/param
|
|
echo get spindle -1 # check all w/param
|
|
testSet spindle forward 99 # turn on illegal spindle
|
|
|
|
# test brake command
|
|
testSet brake on # turn on all w/o param
|
|
testSet brake off -1 # turn off all w/param
|
|
echo get brake -1 # check all w/param
|
|
testSet brake forward 99 # turn on illegal spindle
|
|
|
|
# test pause
|
|
testSet wait_mode received # otherwise pause will stall
|
|
testSetOnly pause
|
|
testSet wait_mode "done"
|
|
testSetOnly resume
|
|
|
|
# test g-code
|
|
echo set mode mdi
|
|
echo set mdi f10
|
|
|
|
echo get abs_act_pos
|
|
echo set mdi g1 x0.3 y0.2 z-0.1 # Feed move
|
|
echo set wait_heartbeat 5 # End of move may take some time
|
|
echo get abs_act_pos
|
|
|
|
echo set mdi g0x0y0z0 # Rapid back to home
|
|
echo set mdi m100 p-1 q-2
|
|
|
|
# here comes a big blob
|
|
dd bs=4096 if=lots-of-gcode
|
|
echo set mdi m100 p-3 q-4
|
|
|
|
# test misc. get commands
|
|
echo get error
|
|
echo get abs_act_pos
|
|
echo get abs_cmd_pos
|
|
echo get angular_unit_conversion
|
|
echo get display_angular_units
|
|
echo get display_linear_units
|
|
echo get error
|
|
echo get feed_override
|
|
echo get flood
|
|
echo get joint_fault
|
|
echo get joint_homed
|
|
echo get joint_limit
|
|
echo get joint_pos
|
|
echo get joint_type
|
|
echo get joint_units
|
|
echo get kinematics_type
|
|
echo get linear_unit_conversion
|
|
echo get mist
|
|
echo get operator_display
|
|
echo get operator_text
|
|
echo get optional_stop
|
|
echo get override_limits
|
|
echo get program
|
|
echo get program_angular_units
|
|
echo get program_codes
|
|
echo get program_line
|
|
echo get program_linear_units
|
|
echo get program_status
|
|
echo get program_units
|
|
echo get rel_act_pos
|
|
echo get rel_cmd_pos
|
|
echo get wait_mode
|
|
echo get teleop_enable
|
|
echo get timeout
|
|
echo get tool
|
|
echo get tool_offset
|
|
echo get update
|
|
echo get user_angular_units
|
|
echo get user_linear_units
|
|
|
|
# test misc. set commands
|
|
testSetOnly abort
|
|
testSet angular_unit_conversion deg # <Deg | Rad | Grad | Auto | Custom>
|
|
testSet feed_override 100 # <Percent>
|
|
testSet flood on # <On | Off>
|
|
testSetOnly jog 0 1 # <Axis No, Speed>
|
|
testSetOnly jog_incr 0 1 1 # <Axis No, Speed, Distance>
|
|
testSetOnly jog_stop 0 # <Joint No|Axis letter>
|
|
testSet linear_unit_conversion mm # <Inch | CM | MM | Auto | Custom>
|
|
testSet mist on # <On | Off>
|
|
testSet optional_stop 1 # <none | 0 | 1>
|
|
|
|
# These are a bit awkward to test
|
|
#testSet load_tool_table <Table name>
|
|
#testSet Open <File path / name>
|
|
#testSet run <Line No>
|
|
|
|
# Testing set override_limits results in command line message:
|
|
# can't do that (EMC_JOINT_OVERRIDE_LIMITS:129) in MDI mode
|
|
testSet override_limits off # <On | Off>
|
|
|
|
# Testing step results in a command line message:
|
|
# can't do that (EMC_TASK_PLAN_STEP:511) in MDI mode
|
|
testSetOnly step
|
|
|
|
testSetOnly task_plan_init
|
|
testSet teleop_enable off
|
|
testSet timeout 10
|
|
#testSet tool_offset 1 0.5 0.25
|
|
testSet update auto # <None | Auto>
|
|
testSet wait "done" # Wait for last command to be processed
|
|
|
|
echo set estop on
|
|
echo get estop
|
|
|
|
# Shutdown will terminate linuxcncrsh and thus terminates everything
|
|
# because it is set as our DISPLAY program.
|
|
echo shutdown
|
|
) | nc -v localhost 5007 > telnet-output
|
|
|
|
# wait for linuxcnc to finish
|
|
wait
|
|
|
|
exit 0
|