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

4
tests/linuxcncrsh/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
telnet-output
gcode-output
sim.var
sim.var.bak

14
tests/linuxcncrsh/checkresult Executable file
View File

@@ -0,0 +1,14 @@
#!/bin/bash
TEST_DIR=$(dirname "$1")
cd "$TEST_DIR" || { echo "E: Could not change directory to '$TEST_DIR'"; exit 1; }
# show deviation from expected output
diff -uwB expected-gcode-output gcode-output || exit 1
diff -uwB expected-telnet-output telnet-output || exit 1
# search all output for possible errors
grep 'error_type' result && exit 1
grep 'CMS_ERROR' result && exit 1
grep 'Recent errors repeated' result && exit 1
exit 0

View File

@@ -0,0 +1,406 @@
P is -1.000000
Q is -2.000000
P is 0.000000
Q is 0.000000
P is 1.000000
Q is 0.000000
P is 2.000000
Q is 0.000000
P is 3.000000
Q is 0.000000
P is 4.000000
Q is 0.000000
P is 5.000000
Q is 0.000000
P is 6.000000
Q is 0.000000
P is 7.000000
Q is 0.000000
P is 8.000000
Q is 0.000000
P is 9.000000
Q is 0.000000
P is 10.000000
Q is 0.000000
P is 11.000000
Q is 0.000000
P is 12.000000
Q is 0.000000
P is 13.000000
Q is 0.000000
P is 14.000000
Q is 0.000000
P is 15.000000
Q is 0.000000
P is 16.000000
Q is 0.000000
P is 17.000000
Q is 0.000000
P is 18.000000
Q is 0.000000
P is 19.000000
Q is 0.000000
P is 20.000000
Q is 0.000000
P is 21.000000
Q is 0.000000
P is 22.000000
Q is 0.000000
P is 23.000000
Q is 0.000000
P is 24.000000
Q is 0.000000
P is 25.000000
Q is 0.000000
P is 26.000000
Q is 0.000000
P is 27.000000
Q is 0.000000
P is 28.000000
Q is 0.000000
P is 29.000000
Q is 0.000000
P is 30.000000
Q is 0.000000
P is 31.000000
Q is 0.000000
P is 32.000000
Q is 0.000000
P is 33.000000
Q is 0.000000
P is 34.000000
Q is 0.000000
P is 35.000000
Q is 0.000000
P is 36.000000
Q is 0.000000
P is 37.000000
Q is 0.000000
P is 38.000000
Q is 0.000000
P is 39.000000
Q is 0.000000
P is 40.000000
Q is 0.000000
P is 41.000000
Q is 0.000000
P is 42.000000
Q is 0.000000
P is 43.000000
Q is 0.000000
P is 44.000000
Q is 0.000000
P is 45.000000
Q is 0.000000
P is 46.000000
Q is 0.000000
P is 47.000000
Q is 0.000000
P is 48.000000
Q is 0.000000
P is 49.000000
Q is 0.000000
P is 50.000000
Q is 0.000000
P is 51.000000
Q is 0.000000
P is 52.000000
Q is 0.000000
P is 53.000000
Q is 0.000000
P is 54.000000
Q is 0.000000
P is 55.000000
Q is 0.000000
P is 56.000000
Q is 0.000000
P is 57.000000
Q is 0.000000
P is 58.000000
Q is 0.000000
P is 59.000000
Q is 0.000000
P is 60.000000
Q is 0.000000
P is 61.000000
Q is 0.000000
P is 62.000000
Q is 0.000000
P is 63.000000
Q is 0.000000
P is 64.000000
Q is 0.000000
P is 65.000000
Q is 0.000000
P is 66.000000
Q is 0.000000
P is 67.000000
Q is 0.000000
P is 68.000000
Q is 0.000000
P is 69.000000
Q is 0.000000
P is 70.000000
Q is 0.000000
P is 71.000000
Q is 0.000000
P is 72.000000
Q is 0.000000
P is 73.000000
Q is 0.000000
P is 74.000000
Q is 0.000000
P is 75.000000
Q is 0.000000
P is 76.000000
Q is 0.000000
P is 77.000000
Q is 0.000000
P is 78.000000
Q is 0.000000
P is 79.000000
Q is 0.000000
P is 80.000000
Q is 0.000000
P is 81.000000
Q is 0.000000
P is 82.000000
Q is 0.000000
P is 83.000000
Q is 0.000000
P is 84.000000
Q is 0.000000
P is 85.000000
Q is 0.000000
P is 86.000000
Q is 0.000000
P is 87.000000
Q is 0.000000
P is 88.000000
Q is 0.000000
P is 89.000000
Q is 0.000000
P is 90.000000
Q is 0.000000
P is 91.000000
Q is 0.000000
P is 92.000000
Q is 0.000000
P is 93.000000
Q is 0.000000
P is 94.000000
Q is 0.000000
P is 95.000000
Q is 0.000000
P is 96.000000
Q is 0.000000
P is 97.000000
Q is 0.000000
P is 98.000000
Q is 0.000000
P is 99.000000
Q is 0.000000
P is 100.000000
Q is 0.000000
P is 101.000000
Q is 0.000000
P is 102.000000
Q is 0.000000
P is 103.000000
Q is 0.000000
P is 104.000000
Q is 0.000000
P is 105.000000
Q is 0.000000
P is 106.000000
Q is 0.000000
P is 107.000000
Q is 0.000000
P is 108.000000
Q is 0.000000
P is 109.000000
Q is 0.000000
P is 110.000000
Q is 0.000000
P is 111.000000
Q is 0.000000
P is 112.000000
Q is 0.000000
P is 113.000000
Q is 0.000000
P is 114.000000
Q is 0.000000
P is 115.000000
Q is 0.000000
P is 116.000000
Q is 0.000000
P is 117.000000
Q is 0.000000
P is 118.000000
Q is 0.000000
P is 119.000000
Q is 0.000000
P is 120.000000
Q is 0.000000
P is 121.000000
Q is 0.000000
P is 122.000000
Q is 0.000000
P is 123.000000
Q is 0.000000
P is 124.000000
Q is 0.000000
P is 125.000000
Q is 0.000000
P is 126.000000
Q is 0.000000
P is 127.000000
Q is 0.000000
P is 128.000000
Q is 0.000000
P is 129.000000
Q is 0.000000
P is 130.000000
Q is 0.000000
P is 131.000000
Q is 0.000000
P is 132.000000
Q is 0.000000
P is 133.000000
Q is 0.000000
P is 134.000000
Q is 0.000000
P is 135.000000
Q is 0.000000
P is 136.000000
Q is 0.000000
P is 137.000000
Q is 0.000000
P is 138.000000
Q is 0.000000
P is 139.000000
Q is 0.000000
P is 140.000000
Q is 0.000000
P is 141.000000
Q is 0.000000
P is 142.000000
Q is 0.000000
P is 143.000000
Q is 0.000000
P is 144.000000
Q is 0.000000
P is 145.000000
Q is 0.000000
P is 146.000000
Q is 0.000000
P is 147.000000
Q is 0.000000
P is 148.000000
Q is 0.000000
P is 149.000000
Q is 0.000000
P is 150.000000
Q is 0.000000
P is 151.000000
Q is 0.000000
P is 152.000000
Q is 0.000000
P is 153.000000
Q is 0.000000
P is 154.000000
Q is 0.000000
P is 155.000000
Q is 0.000000
P is 156.000000
Q is 0.000000
P is 157.000000
Q is 0.000000
P is 158.000000
Q is 0.000000
P is 159.000000
Q is 0.000000
P is 160.000000
Q is 0.000000
P is 161.000000
Q is 0.000000
P is 162.000000
Q is 0.000000
P is 163.000000
Q is 0.000000
P is 164.000000
Q is 0.000000
P is 165.000000
Q is 0.000000
P is 166.000000
Q is 0.000000
P is 167.000000
Q is 0.000000
P is 168.000000
Q is 0.000000
P is 169.000000
Q is 0.000000
P is 170.000000
Q is 0.000000
P is 171.000000
Q is 0.000000
P is 172.000000
Q is 0.000000
P is 173.000000
Q is 0.000000
P is 174.000000
Q is 0.000000
P is 175.000000
Q is 0.000000
P is 176.000000
Q is 0.000000
P is 177.000000
Q is 0.000000
P is 178.000000
Q is 0.000000
P is 179.000000
Q is 0.000000
P is 180.000000
Q is 0.000000
P is 181.000000
Q is 0.000000
P is 182.000000
Q is 0.000000
P is 183.000000
Q is 0.000000
P is 184.000000
Q is 0.000000
P is 185.000000
Q is 0.000000
P is 186.000000
Q is 0.000000
P is 187.000000
Q is 0.000000
P is 188.000000
Q is 0.000000
P is 189.000000
Q is 0.000000
P is 190.000000
Q is 0.000000
P is 191.000000
Q is 0.000000
P is 192.000000
Q is 0.000000
P is 193.000000
Q is 0.000000
P is 194.000000
Q is 0.000000
P is 195.000000
Q is 0.000000
P is 196.000000
Q is 0.000000
P is 197.000000
Q is 0.000000
P is 198.000000
Q is 0.000000
P is 199.000000
Q is 0.000000
P is 200.000000
Q is 0.000000
P is -3.000000
Q is -4.000000

View File

@@ -0,0 +1,511 @@
HELLO ACK RuntimeTestMachine 1.1
HELLO NAK
DEBUG 0x00000000
HELLO ACK RuntimeTestMachine 1.1
set echo off
ENABLE OFF
ENABLE ON
ERROR OK
get debug
DEBUG 0x00000000
get verbose
VERBOSE OFF
set verbose on
SET VERBOSE ACK
get verbose
VERBOSE ON
get error
ERROR OK
get echo
ECHO ON
set echo off
SET ECHO ACK
ECHO OFF
ERROR OK
WAIT_MODE DONE
SET WAIT_MODE ACK
WAIT_MODE DONE
ERROR OK
INI [DISPLAY]DISPLAY=linuxcncrsh -n RuntimeTestMachine
INI [TRAJ]SPINDLES=2
error: INI file entry '[NOT]AVAILABLE' not found
GET INI NAK
PLAT Linux
UPDATE AUTO
MODE MANUAL
error: Machine must be 'ON' for SET MODE
SET MODE NAK
MODE MANUAL
ERROR OK
ESTOP ON
SET ESTOP ACK
ESTOP OFF
ERROR OK
MACHINE OFF
SET MACHINE ACK
MACHINE ON
ERROR OK
MODE MANUAL
SET MODE ACK
MODE MANUAL
ERROR OK
POS_OFFSET 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
PROBE_TRIPPED NO
PROBE_VALUE 0
SET PROBE_CLEAR ACK
ERROR OK
SET PROBE NAK
ERROR Must be in MDI mode to issue MDI command
SET PROBE_CLEAR ACK
ERROR OK
MODE MANUAL
SET MODE ACK
MODE MDI
ERROR OK
SET PROBE NAK
ERROR Cannot probe with zero feed rate
SET MDI ACK
SET PROBE NAK
ERROR Start point too close to probe point
SET PROBE ACK
ERROR G38.2 move finished without making contact.
PROBE_TRIPPED NO
SET PROBE_CLEAR ACK
ERROR OK
MODE MDI
SET MODE ACK
MODE MANUAL
ERROR OK
JOINT_HOMED NO NO NO
SET JOINT_HOME ACK
ERROR OK
SET JOINT_WAIT_HOMED ACK
JOINT_HOMED YES NO NO
SET JOINT_HOME ACK
ERROR OK
SET JOINT_WAIT_HOMED ACK
JOINT_HOMED YES YES NO
SET JOINT_HOME ACK
ERROR OK
SET JOINT_WAIT_HOMED ACK
JOINT_HOMED YES YES YES
error: Invalid joint '3', valid range [-1,2]
SET HOME NAK
ERROR OK
error: Invalid joint '4', valid range [-1,2]
SET HOME NAK
ERROR OK
error: Invalid joint '5', valid range [-1,2]
SET HOME NAK
ERROR OK
error: Invalid periods '10000', waiting time of 10.000 seconds would exceed timeout of 1.000 seconds
SET WAIT_HEARTBEAT NAK
SET ECHO ACK
set wait_heartbeat
SET WAIT_HEARTBEAT ACK
get teleop_enable
TELEOP_ENABLE ON
set teleop_enable off
SET TELEOP_ENABLE ACK
get teleop_enable
TELEOP_ENABLE OFF
get error
ERROR OK
get joint_homed
JOINT_HOMED YES YES YES
set joint_unhome 1
SET JOINT_UNHOME ACK
get error
ERROR OK
get joint_homed
JOINT_HOMED YES NO YES
set joint_home 1
SET JOINT_HOME ACK
get error
ERROR OK
set joint_wait_homed 1
SET JOINT_WAIT_HOMED ACK
get joint_homed
JOINT_HOMED YES YES YES
get teleop_enable
TELEOP_ENABLE ON
set echo off
SET ECHO ACK
MODE MANUAL
SET MODE ACK
MODE MDI
ERROR OK
SET PROBE ACK
ERROR G38.2 move finished without making contact.
PROBE_TRIPPED NO
SET PROBE_CLEAR ACK
ERROR OK
MODE MDI
SET MODE ACK
MODE MANUAL
ERROR OK
TELEOP_ENABLE ON
SET TELEOP_ENABLE ACK
TELEOP_ENABLE ON
ERROR OK
MODE MANUAL
SET MODE ACK
MODE MDI
ERROR OK
SET PROBE ACK
ERROR G38.2 move finished without making contact.
PROBE_TRIPPED NO
SET PROBE_CLEAR ACK
ERROR OK
MODE MDI
SET MODE ACK
MODE MANUAL
ERROR OK
SPINDLE 0 OFF
SET SPINDLE ACK
SPINDLE 0 FORWARD
ERROR OK
SPINDLE 0 FORWARD
SET SPINDLE ACK
SPINDLE 0 OFF
ERROR OK
SPINDLE 0 OFF
SPINDLE 1 OFF
SPINDLE 0 OFF
error: Invalid spindle '99', valid range [-1,1]
SET SPINDLE NAK
SPINDLE 0 OFF
ERROR OK
BRAKE 0 ON
SET BRAKE ACK
BRAKE 0 ON
ERROR OK
BRAKE 0 ON
SET BRAKE ACK
BRAKE 0 OFF
ERROR OK
BRAKE 0 OFF
BRAKE 1 OFF
BRAKE 0 OFF
error: Invalid spindle '99', valid range [-1,1]
SET BRAKE NAK
BRAKE 0 OFF
ERROR OK
WAIT_MODE DONE
SET WAIT_MODE ACK
WAIT_MODE RECEIVED
ERROR OK
SET PAUSE ACK
ERROR OK
WAIT_MODE RECEIVED
SET WAIT_MODE ACK
WAIT_MODE DONE
ERROR OK
SET RESUME ACK
ERROR OK
SET MODE ACK
SET MDI ACK
ABS_ACT_POS 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
SET MDI ACK
SET WAIT_HEARTBEAT ACK
ABS_ACT_POS 0.300000 0.200000 -0.100000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
SET MDI ACK
ERROR OK
ABS_ACT_POS 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
ABS_CMD_POS 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
ANGULAR_UNIT_CONVERSION AUTO
DISPLAY_ANGULAR_UNITS DEG
DISPLAY_LINEAR_UNITS INCH
ERROR OK
FEED_OVERRIDE 100.000000
FLOOD OFF
JOINT_FAULT OK OK OK
JOINT_HOMED YES YES YES
JOINT_LIMIT OK OK OK
JOINT_POS 0.000000 0.000000 0.000000
JOINT_TYPE LINEAR LINEAR LINEAR
JOINT_UNITS INCH INCH INCH
KINEMATICS_TYPE 1
LINEAR_UNIT_CONVERSION AUTO
MIST OFF
OPERATOR_DISPLAY OK
OPERATOR_TEXT OK
OPTIONAL_STOP ON
OVERRIDE_LIMITS OFF
PROGRAM NONE
PROGRAM_ANGULAR_UNITS DEG
PROGRAM_CODES G0 G17 G40 G20 G90 G94 G54 G49 G99 G64 G97 G91.1 G8 F10 S0
PROGRAM_LINE 0
PROGRAM_UNITS INCH
PROGRAM_STATUS IDLE
PROGRAM_UNITS INCH
REL_ACT_POS 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
REL_CMD_POS 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
WAIT_MODE DONE
TELEOP_ENABLE OFF
TIMEOUT 0.000000
TOOL 0
TOOL_OFFSET 0.000000
UPDATE AUTO
USER_ANGULAR_UNITS DEG
USER_LINEAR_UNITS INCH
SET ABORT ACK
ERROR OK
ANGULAR_UNIT_CONVERSION AUTO
SET ANGULAR_UNIT_CONVERSION ACK
ANGULAR_UNIT_CONVERSION DEG
ERROR OK
FEED_OVERRIDE 100.000000
SET FEED_OVERRIDE ACK
FEED_OVERRIDE 100.000000
ERROR OK
FLOOD OFF
SET FLOOD ACK
FLOOD ON
ERROR OK
SET JOG ACK
ERROR OK
SET JOG_INCR ACK
ERROR OK
SET JOG_STOP ACK
ERROR OK
LINEAR_UNIT_CONVERSION AUTO
SET LINEAR_UNIT_CONVERSION ACK
LINEAR_UNIT_CONVERSION MM
ERROR OK
MIST OFF
SET MIST ACK
MIST ON
ERROR OK
OPTIONAL_STOP ON
SET OPTIONAL_STOP ACK
OPTIONAL_STOP ON
ERROR OK
OVERRIDE_LIMITS OFF
SET OVERRIDE_LIMITS NAK
OVERRIDE_LIMITS OFF
ERROR can't do that (EMC_JOINT_OVERRIDE_LIMITS:129) in MDI mode
SET STEP NAK
ERROR can't do that (EMC_TASK_PLAN_STEP:511) in MDI mode
SET TASK_PLAN_INIT ACK
ERROR OK
TELEOP_ENABLE OFF
SET TELEOP_ENABLE ACK
TELEOP_ENABLE OFF
ERROR OK
TIMEOUT 0.000000
SET TIMEOUT ACK
TIMEOUT 10.000000
ERROR OK
UPDATE AUTO
SET UPDATE ACK
UPDATE AUTO
ERROR OK
SET WAIT ACK
ERROR OK
SET ESTOP ACK
ESTOP ON
SHUTDOWN ACK

View File

@@ -0,0 +1,51 @@
# core HAL config file for simulation
# first load all the RT modules that will be needed
# kinematics
loadrt [KINS]KINEMATICS
# motion controller, get name and thread periods from INI file
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS num_spindles=[TRAJ]SPINDLES
# load 6 differentiators (for velocity and accel signals
loadrt ddt names=ddt_x,ddt_xv,ddt_y,ddt_yv,ddt_z,ddt_zv
# load additional blocks
loadrt hypot names=vel_xy,vel_xyz
# add motion controller functions to servo thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
# link the differentiator functions into the code
addf ddt_x servo-thread
addf ddt_xv servo-thread
addf ddt_y servo-thread
addf ddt_yv servo-thread
addf ddt_z servo-thread
addf ddt_zv servo-thread
addf vel_xy servo-thread
addf vel_xyz servo-thread
# create HAL signals for position commands from motion module
# loop position commands back to motion module feedback
net Xpos joint.0.motor-pos-cmd => joint.0.motor-pos-fb ddt_x.in
net Ypos joint.1.motor-pos-cmd => joint.1.motor-pos-fb ddt_y.in
net Zpos joint.2.motor-pos-cmd => joint.2.motor-pos-fb ddt_z.in
# send the position commands thru differentiators to
# generate velocity and accel signals
net Xvel ddt_x.out => ddt_xv.in vel_xy.in0
net Xacc <= ddt_xv.out
net Yvel ddt_y.out => ddt_yv.in vel_xy.in1
net Yacc <= ddt_yv.out
net Zvel ddt_z.out => ddt_zv.in vel_xyz.in0
net Zacc <= ddt_zv.out
# Cartesian 2- and 3-axis velocities
net XYvel vel_xy.out => vel_xyz.in1
net XYZvel <= vel_xyz.out
# estop loopback
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in
# create signals for tool loading loopback
net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed

View File

@@ -0,0 +1,107 @@
[EMC]
MACHINE = linuxcncrsh-test
VERSION = 1.1
DEBUG = 0
#RCS_DEBUG = 0xF763FF01
[DISPLAY]
DISPLAY = linuxcncrsh -n RuntimeTestMachine
[TASK]
TASK = milltask
CYCLE_TIME = 0.001
[RS274NGC]
PARAMETER_FILE = sim.var
USER_M_PATH = ./subs
[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 4.0
BASE_PERIOD = 0
SERVO_PERIOD = 1000000
[EMCIO]
TOOL_TABLE = tool.tbl
[HAL]
HALFILE = lcncrsh_sim.hal
[TRAJ]
SPINDLES = 2
AXES = 3
COORDINATES = X Y Z
HOME = 0 0 0
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 1.2
MAX_LINEAR_VELOCITY = 4
NO_FORCE_HOMING = 1
[AXIS_X]
HOME = 0.000
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
[AXIS_Y]
HOME = 0.000
MIN_LIMIT = -40.0
MAX_LIMIT = 40.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
[AXIS_Z]
HOME = 0.0
MIN_LIMIT = -4.0
MAX_LIMIT = 4.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
[KINS]
KINEMATICS = trivkins
JOINTS = 3
[JOINT_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.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
HOME_SEQUENCE = 0
[JOINT_1]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.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
HOME_SEQUENCE = 1
[JOINT_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.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
HOME_SEQUENCE = 2

View File

@@ -0,0 +1,201 @@
set mdi m100 p0 q0
set mdi m100 p1 q0
set mdi m100 p2 q0
set mdi m100 p3 q0
set mdi m100 p4 q0
set mdi m100 p5 q0
set mdi m100 p6 q0
set mdi m100 p7 q0
set mdi m100 p8 q0
set mdi m100 p9 q0
set mdi m100 p10 q0
set mdi m100 p11 q0
set mdi m100 p12 q0
set mdi m100 p13 q0
set mdi m100 p14 q0
set mdi m100 p15 q0
set mdi m100 p16 q0
set mdi m100 p17 q0
set mdi m100 p18 q0
set mdi m100 p19 q0
set mdi m100 p20 q0
set mdi m100 p21 q0
set mdi m100 p22 q0
set mdi m100 p23 q0
set mdi m100 p24 q0
set mdi m100 p25 q0
set mdi m100 p26 q0
set mdi m100 p27 q0
set mdi m100 p28 q0
set mdi m100 p29 q0
set mdi m100 p30 q0
set mdi m100 p31 q0
set mdi m100 p32 q0
set mdi m100 p33 q0
set mdi m100 p34 q0
set mdi m100 p35 q0
set mdi m100 p36 q0
set mdi m100 p37 q0
set mdi m100 p38 q0
set mdi m100 p39 q0
set mdi m100 p40 q0
set mdi m100 p41 q0
set mdi m100 p42 q0
set mdi m100 p43 q0
set mdi m100 p44 q0
set mdi m100 p45 q0
set mdi m100 p46 q0
set mdi m100 p47 q0
set mdi m100 p48 q0
set mdi m100 p49 q0
set mdi m100 p50 q0
set mdi m100 p51 q0
set mdi m100 p52 q0
set mdi m100 p53 q0
set mdi m100 p54 q0
set mdi m100 p55 q0
set mdi m100 p56 q0
set mdi m100 p57 q0
set mdi m100 p58 q0
set mdi m100 p59 q0
set mdi m100 p60 q0
set mdi m100 p61 q0
set mdi m100 p62 q0
set mdi m100 p63 q0
set mdi m100 p64 q0
set mdi m100 p65 q0
set mdi m100 p66 q0
set mdi m100 p67 q0
set mdi m100 p68 q0
set mdi m100 p69 q0
set mdi m100 p70 q0
set mdi m100 p71 q0
set mdi m100 p72 q0
set mdi m100 p73 q0
set mdi m100 p74 q0
set mdi m100 p75 q0
set mdi m100 p76 q0
set mdi m100 p77 q0
set mdi m100 p78 q0
set mdi m100 p79 q0
set mdi m100 p80 q0
set mdi m100 p81 q0
set mdi m100 p82 q0
set mdi m100 p83 q0
set mdi m100 p84 q0
set mdi m100 p85 q0
set mdi m100 p86 q0
set mdi m100 p87 q0
set mdi m100 p88 q0
set mdi m100 p89 q0
set mdi m100 p90 q0
set mdi m100 p91 q0
set mdi m100 p92 q0
set mdi m100 p93 q0
set mdi m100 p94 q0
set mdi m100 p95 q0
set mdi m100 p96 q0
set mdi m100 p97 q0
set mdi m100 p98 q0
set mdi m100 p99 q0
set mdi m100 p100 q0
set mdi m100 p101 q0
set mdi m100 p102 q0
set mdi m100 p103 q0
set mdi m100 p104 q0
set mdi m100 p105 q0
set mdi m100 p106 q0
set mdi m100 p107 q0
set mdi m100 p108 q0
set mdi m100 p109 q0
set mdi m100 p110 q0
set mdi m100 p111 q0
set mdi m100 p112 q0
set mdi m100 p113 q0
set mdi m100 p114 q0
set mdi m100 p115 q0
set mdi m100 p116 q0
set mdi m100 p117 q0
set mdi m100 p118 q0
set mdi m100 p119 q0
set mdi m100 p120 q0
set mdi m100 p121 q0
set mdi m100 p122 q0
set mdi m100 p123 q0
set mdi m100 p124 q0
set mdi m100 p125 q0
set mdi m100 p126 q0
set mdi m100 p127 q0
set mdi m100 p128 q0
set mdi m100 p129 q0
set mdi m100 p130 q0
set mdi m100 p131 q0
set mdi m100 p132 q0
set mdi m100 p133 q0
set mdi m100 p134 q0
set mdi m100 p135 q0
set mdi m100 p136 q0
set mdi m100 p137 q0
set mdi m100 p138 q0
set mdi m100 p139 q0
set mdi m100 p140 q0
set mdi m100 p141 q0
set mdi m100 p142 q0
set mdi m100 p143 q0
set mdi m100 p144 q0
set mdi m100 p145 q0
set mdi m100 p146 q0
set mdi m100 p147 q0
set mdi m100 p148 q0
set mdi m100 p149 q0
set mdi m100 p150 q0
set mdi m100 p151 q0
set mdi m100 p152 q0
set mdi m100 p153 q0
set mdi m100 p154 q0
set mdi m100 p155 q0
set mdi m100 p156 q0
set mdi m100 p157 q0
set mdi m100 p158 q0
set mdi m100 p159 q0
set mdi m100 p160 q0
set mdi m100 p161 q0
set mdi m100 p162 q0
set mdi m100 p163 q0
set mdi m100 p164 q0
set mdi m100 p165 q0
set mdi m100 p166 q0
set mdi m100 p167 q0
set mdi m100 p168 q0
set mdi m100 p169 q0
set mdi m100 p170 q0
set mdi m100 p171 q0
set mdi m100 p172 q0
set mdi m100 p173 q0
set mdi m100 p174 q0
set mdi m100 p175 q0
set mdi m100 p176 q0
set mdi m100 p177 q0
set mdi m100 p178 q0
set mdi m100 p179 q0
set mdi m100 p180 q0
set mdi m100 p181 q0
set mdi m100 p182 q0
set mdi m100 p183 q0
set mdi m100 p184 q0
set mdi m100 p185 q0
set mdi m100 p186 q0
set mdi m100 p187 q0
set mdi m100 p188 q0
set mdi m100 p189 q0
set mdi m100 p190 q0
set mdi m100 p191 q0
set mdi m100 p192 q0
set mdi m100 p193 q0
set mdi m100 p194 q0
set mdi m100 p195 q0
set mdi m100 p196 q0
set mdi m100 p197 q0
set mdi m100 p198 q0
set mdi m100 p199 q0
set mdi m100 p200 q0

20
tests/linuxcncrsh/subs/M100 Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/bash
#
# This script (M100) is called to log the current coordinates and the
# current tool number and Tool Length Offset information to a log file,
# for testing purposes
#
# Put this in your INI to use:
#
# [RS274NGC]USER_M_PATH = ./subs
#
TEST_DIR=$(dirname INI_FILE_NAME)
OUT_FILE=$TEST_DIR/gcode-output
P=$1
Q=$2
echo "P is $P" >> "$OUT_FILE"
echo "Q is $Q" >> "$OUT_FILE"

285
tests/linuxcncrsh/test.sh Executable file
View File

@@ -0,0 +1,285 @@
#!/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

View File

@@ -0,0 +1,5 @@
T0 P0 Z+10.000000
T1 P1 Z+20.000000
T2 P2 Z+30.000000
T3 P3 Z+40.000000
T4 P4 Z+50.000000