diff options
author | Jeff Epler <jepler@unpythonic.net> | 2013-03-03 17:45:46 -0600 |
---|---|---|
committer | Jeff Epler <jepler@unpythonic.net> | 2013-03-03 17:59:26 -0600 |
commit | 659a377bd711dbd3def39fb36ca3554d89ad4b8c (patch) | |
tree | b3e4969c61d9a3edd2ab7748323c727cbce421ed | |
parent | 780f8bdc8edb1abf889fd10c3b58b60c70e62ead (diff) | |
parent | cbe6de772a58d1ad669eb6f38b7bd1d8a4e4d5ef (diff) | |
download | linuxcnc-659a377bd711dbd3def39fb36ca3554d89ad4b8c.tar.gz linuxcnc-659a377bd711dbd3def39fb36ca3554d89ad4b8c.zip |
Merge branch 'v2.5_branch'
Conflicts:
VERSION
src/emc/nml_intf/canon.hh
src/emc/rs274ngc/interp_convert.cc
src/po/de.po
src/po/hu.po
41 files changed, 2324 insertions, 157 deletions
diff --git a/configs/USC_encod/README b/configs/USC_encod/README new file mode 100644 index 000000000..f1bd1c87f --- /dev/null +++ b/configs/USC_encod/README @@ -0,0 +1,6 @@ +A configuration for the Universal Stepper card from Pico +systems. This configuration includes motion connections +and an IO set for handling estop within HAL. ini file +parameters INPUT_SCALE are for the encoder counts/user +unit, OUTPUT_SCALE is the scaling for the drive steps +per user unit (which can be different). diff --git a/configs/USC_encod/univstep.ini b/configs/USC_encod/univstep.ini new file mode 100644 index 000000000..0c1a2cb46 --- /dev/null +++ b/configs/USC_encod/univstep.ini @@ -0,0 +1,241 @@ +# ini file for Universal Stepper Controller with encoders + +# General section ------------------------------------------------------------- +[EMC] + +# Version of this INI file +VERSION = $Revision$ + +# Name of machine, for use with display, etc. +MACHINE = UNIVSTEP_Encoder + +# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others +DEBUG = 0 +# DEBUG = 0x00000007 +# DEBUG = 0x7FFFFFFF + +# Sections for display options ------------------------------------------------ +[DISPLAY] + +# Name of display program, e.g., xemc +DISPLAY = axis +# DISPLAY = usrmot +# DISPLAY = tkemc +# Cycle time, in seconds, that display will sleep between polls +CYCLE_TIME = 0.100 + +# Path to help file +HELP_FILE = tkemc.txt + +# Initial display setting for position, RELATIVE or MACHINE +POSITION_OFFSET = RELATIVE + +# Initial display setting for position, COMMANDED or ACTUAL +POSITION_FEEDBACK = ACTUAL + +# Highest value that will be allowed for feed override, 1.0 = 100% +MAX_FEED_OVERRIDE = 1.2 + +# Prefix to be used +PROGRAM_PREFIX = ../../nc_files/ + +# Introductory graphic +INTRO_GRAPHIC = emc2.gif +INTRO_TIME = 2 + +# Enable popup balloon help +BALLOON_HELP = 1 + +# Task controller section ----------------------------------------------------- +[TASK] + +# Name of task controller program, e.g., milltask +TASK = milltask + +# Cycle time, in seconds, that task controller will sleep between polls +CYCLE_TIME = 0.010 + +# Part program interpreter section -------------------------------------------- +[RS274NGC] + +# File containing interpreter variables +PARAMETER_FILE = univstep.var + +# Motion control section ------------------------------------------------------ +[EMCMOT] + +EMCMOT = motmod + +# Timeout for comm to emcmot, in seconds +COMM_TIMEOUT = 1.0 + +# Interval between tries to emcmot, in seconds +COMM_WAIT = 0.010 + +# Servo task period, in nanoseconds +SERVO_PERIOD = 1000000 + +# Hardware Abstraction Layer section -------------------------------------------------- +[HAL] + +# The run script first uses halcmd to execute any HALFILE +# files, and then to execute any individual HALCMD commands. +# + +# list of hal config files to run through halcmd +# files are executed in the order in which they appear +HALFILE = univstep_load.hal +HALFILE = univstep_servo.hal +HALFILE = univstep_motion.hal +HALFILE = univstep_io.hal + +# list of halcmd commands to execute +# commands are executed in the order in which they appear +#HALCMD = save neta + +# Trajectory planner section -------------------------------------------------- +[TRAJ] + +AXES = 4 +# COORDINATES = X Y Z R P W +COORDINATES = X Y Z A +HOME = 0 0 0 0 +LINEAR_UNITS = inch +ANGULAR_UNITS = degree +CYCLE_TIME = 0.010 +DEFAULT_VELOCITY = 0.0167 +MAX_VELOCITY = 1.20 +DEFAULT_ACCELERATION = 15.0 +MAX_ACCELERATION = 20.0 + +# Axes sections --------------------------------------------------------------- + +# First axis +[AXIS_0] + +TYPE = LINEAR +HOME = 0.000 +MAX_VELOCITY = 1.20 +MAX_ACCELERATION = 20.0 +PID_MAX_VEL = 1.25 +BACKLASH = 0.000 +INPUT_SCALE = 10000 +OUTPUT_SCALE = 1.000 +MIN_LIMIT = -10.0 +MAX_LIMIT = 30.0 +FERROR = 0.0100 +MIN_FERROR = 0.1 +HOME_OFFSET = 0.0 +HOME_SEARCH_VEL = 0.0 +HOME_LATCH_VEL = 0.0 +HOME_USE_INDEX = NO +HOME_IGNORE_LIMITS = NO +DEADBAND = 0.000126 +P = 150 +I = 100 +D = 0.1 +BIAS = 0.0 +FF0 = 0 +FF1 = 1 +FF2 = 0.0 + + +# Second axis +[AXIS_1] + +TYPE = LINEAR +HOME = 0.000 +MAX_VELOCITY = 1.20 +MAX_ACCELERATION = 20.0 +PID_MAX_VEL = 1.25 +BACKLASH = 0.000 +INPUT_SCALE = 4000 +OUTPUT_SCALE = 1.000 +MIN_LIMIT = -10.0 +MAX_LIMIT = 30.0 +FERROR = 0.010 +MIN_FERROR = 0.001 +HOME_OFFSET = 0.0 +HOME_SEARCH_VEL = 0.0 +HOME_LATCH_VEL = 0.0 +HOME_USE_INDEX = NO +HOME_IGNORE_LIMITS = NO +DEADBAND = 0.000126 +P = 150 +I = 100 +D = 0.1 +BIAS = 0.0 +FF0 = 0 +FF1 = 1 +FF2 = 0.0 + +# Third axis +[AXIS_2] + +TYPE = LINEAR +HOME = 0.0 +MAX_VELOCITY = 1.20 +MAX_ACCELERATION = 20.0 +PID_MAX_VEL = 1.25 +BACKLASH = 0.000 +INPUT_SCALE = 4000 +OUTPUT_SCALE = 1.000 +MIN_LIMIT = -10.0 +MAX_LIMIT = 30.0 +FERROR = 0.010 +MIN_FERROR = 0.001 +HOME_OFFSET = 0.0 +HOME_SEARCH_VEL = 0.0 +HOME_LATCH_VEL = 0.0 +HOME_USE_INDEX = NO +HOME_IGNORE_LIMITS = NO +DEADBAND = 0.000126 +P = 150 +I = 100 +D = 0.1 +BIAS = 0.0 +FF0 = 0 +FF1 = 1 +FF2 = 0.0 + +# Fourth axis +[AXIS_3] + +TYPE = ANGULAR +HOME = 0.0 +MAX_VELOCITY = 65 +MAX_ACCELERATION = 20.0 +PID_MAX_VEL = 66 +BACKLASH = 0.000 +INPUT_SCALE = 11.11111111 +OUTPUT_SCALE = 1.000 +MIN_LIMIT = -3600.0 +MAX_LIMIT = 3600.0 +FERROR = 0.1 +MIN_FERROR = 0.2 +HOME_OFFSET = 0.0 +HOME_SEARCH_VEL = 0.0 +HOME_LATCH_VEL = 0.0 +HOME_USE_INDEX = NO +HOME_IGNORE_LIMITS = NO +DEADBAND = 0.046 +P = 150 +I = 100 +D = 0.1 +BIAS = 0.0 +FF0 = 0 +FF1 = 1 +FF2 = 0.0 + + +# section for main IO controller parameters ----------------------------------- +[EMCIO] + +# Name of IO controller program, e.g., io +EMCIO = io + +# cycle time, in seconds +CYCLE_TIME = 0.100 + +# tool table file +TOOL_TABLE = univstep.tbl diff --git a/configs/USC_encod/univstep.tbl b/configs/USC_encod/univstep.tbl new file mode 100644 index 000000000..c0b72de06 --- /dev/null +++ b/configs/USC_encod/univstep.tbl @@ -0,0 +1,4 @@ +T1 P1 D0.125000 Z+0.511000 ;1/8 end mill +T2 P2 D0.062500 Z+0.100000 ;1/16 end mill +T3 P3 D0.201000 Z+1.273000 ;#7 tap drill +T99999 P99999 Z+0.100000 ;big tool number diff --git a/configs/USC_encod/univstep_io.hal b/configs/USC_encod/univstep_io.hal new file mode 100644 index 000000000..8e69d0214 --- /dev/null +++ b/configs/USC_encod/univstep_io.hal @@ -0,0 +1,82 @@ +# HAL config file for Pico Systems USC board +# +# Connect motion controller I/Os +# + +# connect limit/home switch outputs to motion controller +net Xminlim <= ppmc.0.din.01.in +net Xminlim => axis.0.neg-lim-sw-in +net Xmaxlim <= ppmc.0.din.02.in +net Xmaxlim => axis.0.pos-lim-sw-in +net Xhome <= ppmc.0.din.00.in +net Xhome => axis.0.home-sw-in + +net Yminlim <= ppmc.0.din.05.in +net Yminlim => axis.1.neg-lim-sw-in +net Ymaxlim <= ppmc.0.din.06.in +net Ymaxlim => axis.1.pos-lim-sw-in +net Yhome <= ppmc.0.din.04.in +net Yhome => axis.1.home-sw-in + +net Zminlim <= ppmc.0.din.09.in +net Zminlim => axis.2.neg-lim-sw-in +net Zmaxlim <= ppmc.0.din.10.in +net Zmaxlim => axis.2.pos-lim-sw-in +net Zhome <= ppmc.0.din.08.in +net Zhome => axis.2.home-sw-in + +net Aminlim <= ppmc.0.din.12.in +net Aminlim => axis.3.neg-lim-sw-in +net Amaxlim <= ppmc.0.din.13.in +net Amaxlim => axis.3.pos-lim-sw-in +net Ahome <= ppmc.0.din.11.in +net Ahome => axis.3.home-sw-in + + +# connect index pulses to motion controller +# uncomment these lines only if you have a Rev 2 USC board +#newsig Xindex bit +#newsig Yindex bit +#newsig Zindex bit +#linksp Xindex <= ppmc.0.encoder.00.index-enable +#linksp Xindex => axis.0.index-enable +#linksp Yindex <= ppmc.0.encoder.01.index-enable +#linksp Yindex => axis.1.index-enable +#linksp Zindex <= ppmc.0.encoder.02.index-enable +#linksp Zindex => axis.2.index-enable + +# +# Connect I/O controller I/Os +# + +# connect e-stop write/sense to I/O controller +# and univstep's fault with estop's output, so estop FF is reset, but +# prevent continued estop signal from univstep from holding FF cleared +net ppmcEstop ppmc.0.din.15.in-not +net ppmcEstop and2.0.in0 +net EstopOkIn estop-latch.0.fault-in +net EstopOkIn and2.0.out +net EstopOkOut <= ppmc.0.dout.07.out +net EstopOkOut iocontrol.0.emc-enable-in +net EstopOkOut estop-latch.0.ok-out +net EstopOkOut and2.0.in1 +net emc-estop-out iocontrol.0.user-enable-out +net emc-estop-out estop-latch.0.ok-in +net emc-estop-reset iocontrol.0.user-request-enable +net emc-estop-reset estop-latch.0.reset + +# connect spindle fwd/rev to I/O controller +net SpindleFwd <= ppmc.0.dout.00.out +net SpindleFwd => motion.spindle-forward +net SpindleRev <= ppmc.0.dout.01.out +net SpindleRev => motion.spindle-reverse + +# connect spindle brake to I/O controller +net SpindleBrakeOn <= ppmc.0.dout.02.out +net SpindleBrakeOn => motion.spindle-brake + +# connect mist/flood coolant to I/O controller +net MistOn <= ppmc.0.dout.03.out +net MistOn => iocontrol.0.coolant-mist +net FloodOn <= ppmc.0.dout.04.out +net FloodOn => iocontrol.0.coolant-flood diff --git a/configs/USC_encod/univstep_load.hal b/configs/USC_encod/univstep_load.hal new file mode 100644 index 000000000..3093810bc --- /dev/null +++ b/configs/USC_encod/univstep_load.hal @@ -0,0 +1,35 @@ +# sample file pulls all load commands into a single file +# when emc2 starts it loads iocontrol + +# kinematics +loadrt trivkins +# motion controller, get name and thread periods from ini file +loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES + +# next load the PID module, for four PID loops +loadrt pid num_chan=4 + +# install driver +loadrt hal_ppmc + +# make some signals for the scope for tuning. +loadrt ddt count=4 +# add components for E-stop logic +loadrt estop_latch count=1 +loadrt and2 count=1 + +# set up the realtime thread +# read inputs first +addf ppmc.0.read servo-thread +# then run the motion controller +addf motion-command-handler servo-thread +addf and2.0 servo-thread +addf estop-latch.0 servo-thread +addf motion-controller servo-thread +# then the PID loops +addf pid.0.do-pid-calcs servo-thread +addf pid.1.do-pid-calcs servo-thread +addf pid.2.do-pid-calcs servo-thread +addf pid.3.do-pid-calcs servo-thread +# write outputs last +addf ppmc.0.write servo-thread diff --git a/configs/USC_encod/univstep_motion.hal b/configs/USC_encod/univstep_motion.hal new file mode 100644 index 000000000..dd0e64f4e --- /dev/null +++ b/configs/USC_encod/univstep_motion.hal @@ -0,0 +1,47 @@ +# HAL config file for Pico Systems USC board with encoders + +# set sane pulse timing - these are basically Gecko numbers +# both pulse width and space are set to 3.5 uS, to prevent +# problems if the outputs are inverted externally +setp ppmc.0.stepgen.00-03.pulse-width-ns 3500 +setp ppmc.0.stepgen.00-03.pulse-space-min-ns 3500 +# setup time is set to 1 uS +setp ppmc.0.stepgen.00-03.setup-time-ns 1000 + +# connect position feedback signals to encoders +net Xpos-fb <= ppmc.0.encoder.00.position +net Ypos-fb <= ppmc.0.encoder.01.position +net Zpos-fb <= ppmc.0.encoder.02.position +net Apos-fb <= ppmc.0.encoder.03.position + +# get feedback scaling from ini file +setp ppmc.0.encoder.00.scale [AXIS_0]INPUT_SCALE +setp ppmc.0.encoder.01.scale [AXIS_1]INPUT_SCALE +setp ppmc.0.encoder.02.scale [AXIS_2]INPUT_SCALE +setp ppmc.0.encoder.03.scale [AXIS_3]INPUT_SCALE + +# connect PID output signals to step generators +net Xoutput => ppmc.0.stepgen.00.velocity +net Youtput => ppmc.0.stepgen.01.velocity +net Zoutput => ppmc.0.stepgen.02.velocity +net Aoutput => ppmc.0.stepgen.03.velocity + +# connect axis enables to step generators +net Xenable => ppmc.0.stepgen.00.enable +net Yenable => ppmc.0.stepgen.01.enable +net Zenable => ppmc.0.stepgen.02.enable +net Aenable => ppmc.0.stepgen.03.enable + +# set output scaling from ini file +# input and output scales should (normally) be the same for a USC +setp ppmc.0.stepgen.00.scale [AXIS_0]OUTPUT_SCALE +setp ppmc.0.stepgen.01.scale [AXIS_1]OUTPUT_SCALE +setp ppmc.0.stepgen.02.scale [AXIS_2]OUTPUT_SCALE +setp ppmc.0.stepgen.03.scale [AXIS_3]OUTPUT_SCALE + +# add a couple of tuning test links +# if these are useful will want to add them to the other axes as well +# or make these setup with the tuning script +net Xoutput ddt.0.in +net Xpos-fb ddt.1.in + diff --git a/configs/USC_encod/univstep_servo.hal b/configs/USC_encod/univstep_servo.hal new file mode 100644 index 000000000..4dfe8c605 --- /dev/null +++ b/configs/USC_encod/univstep_servo.hal @@ -0,0 +1,95 @@ +# HAL config file for servos -- expanded from core_servo.hal +# for a full four axis setup + +# create four position feedback signals + +# connect position feedback to PID loop +net Xpos-fb => pid.0.feedback +net Ypos-fb => pid.1.feedback +net Zpos-fb => pid.2.feedback +net Apos-fb => pid.3.feedback + +# connect position feedback to motion module +net Xpos-fb => axis.0.motor-pos-fb +net Ypos-fb => axis.1.motor-pos-fb +net Zpos-fb => axis.2.motor-pos-fb +net Apos-fb => axis.3.motor-pos-fb + +# create PID to DAC output signals + +# connect output signals to output of PID loops +net Xoutput <= pid.0.output +net Youtput <= pid.1.output +net Zoutput <= pid.2.output +net Aoutput <= pid.3.output + +# set PID loop output limits to +/-1.00 +setp pid.0.maxoutput [AXIS_0]PID_MAX_VEL +setp pid.1.maxoutput [AXIS_1]PID_MAX_VEL +setp pid.2.maxoutput [AXIS_2]PID_MAX_VEL +setp pid.3.maxoutput [AXIS_3]PID_MAX_VEL + +# set PID loop gains +setp pid.0.Pgain [AXIS_0]P +setp pid.0.Igain [AXIS_0]I +setp pid.0.Dgain [AXIS_0]D +setp pid.0.bias [AXIS_0]BIAS +setp pid.0.FF0 [AXIS_0]FF0 +setp pid.0.FF1 [AXIS_0]FF1 +setp pid.0.FF2 [AXIS_0]FF2 +setp pid.0.deadband [AXIS_0]DEADBAND + +setp pid.1.Pgain [AXIS_1]P +setp pid.1.Igain [AXIS_1]I +setp pid.1.Dgain [AXIS_1]D +setp pid.1.bias [AXIS_1]BIAS +setp pid.1.FF0 [AXIS_1]FF0 +setp pid.1.FF1 [AXIS_1]FF1 +setp pid.1.FF2 [AXIS_1]FF2 +setp pid.1.deadband [AXIS_1]DEADBAND + +setp pid.2.Pgain [AXIS_2]P +setp pid.2.Igain [AXIS_2]I +setp pid.2.Dgain [AXIS_2]D +setp pid.2.bias [AXIS_2]BIAS +setp pid.2.FF0 [AXIS_2]FF0 +setp pid.2.FF1 [AXIS_2]FF1 +setp pid.2.FF2 [AXIS_2]FF2 +setp pid.2.deadband [AXIS_2]DEADBAND + +setp pid.3.Pgain [AXIS_3]P +setp pid.3.Igain [AXIS_3]I +setp pid.3.Dgain [AXIS_3]D +setp pid.3.bias [AXIS_3]BIAS +setp pid.3.FF0 [AXIS_3]FF0 +setp pid.3.FF1 [AXIS_3]FF1 +setp pid.3.FF2 [AXIS_3]FF2 +setp pid.3.deadband [AXIS_3]DEADBAND + +# create four position command signals + +# connect position commands to motion controller +net Xpos-cmd <= axis.0.motor-pos-cmd +net Ypos-cmd <= axis.1.motor-pos-cmd +net Zpos-cmd <= axis.2.motor-pos-cmd +net Apos-cmd <= axis.3.motor-pos-cmd + +# connect position commands to PID input +net Xpos-cmd => pid.0.command +net Ypos-cmd => pid.1.command +net Zpos-cmd => pid.2.command +net Apos-cmd => pid.3.command + +# create bit signals to enable/disable the PID loops + +# connect the signals to the motion controller +net Xenable <= axis.0.amp-enable-out +net Yenable <= axis.1.amp-enable-out +net Zenable <= axis.2.amp-enable-out +net Aenable <= axis.3.amp-enable-out + +# connect the signals to the PID blocks +net Xenable => pid.0.enable +net Yenable => pid.1.enable +net Zenable => pid.2.enable +net Aenable => pid.3.enable diff --git a/debian/changelog b/debian/changelog index 1b83ded57..41e629185 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,33 @@ +linuxcnc (1:2.5.2) lucid; urgency=low + + * AXIS: Allow the setting of the top end of the Max Velocity slider + according to [DISPLAY]MAX_LINEAR_VELOCITY as the docs say + * Components: Fix mux16's debounce function + * Components: LCD character display driver + * Components: New multiclick component detects single, double, triple clicks + * Docs: Many improvements + * Gremlin: Better error reporting for gcode errors + * Gremlin: Fix rotated axes display + * Halui: Include tool length offsets in relative position outputs + * Hostmot2: Fixes to sserial + * Kins: Fix teleop jogging of ABC axes in the negative direction + * Modbus: Fix TCP communication time out error + * New config: Gecko G540 + * New config: Smithy 1240combined_mm + * PID: Optional new error-previous-target mode to reduce ferrors detected + by motion. This is especially useful for torque-mode loops and those + tunings that use large I gains + * pncconf: Many fixes + * PPMC: Better error checking for hardware problems causing miscommunication + * Tool Table: Many fixes to tool table handling, making tool tables on + nonrandom setups using mismatched tool and pocket numbers work correctly + * Translations: German for tooledit + * Translations: Many improvements to French + * Utilities: new latencyhistogram program that shows details about latency + * Utilities: sim_pin, a script that simulates writing to hal pins + + -- Chris Radek <chris@timeguy.com> Sun, 03 Mar 2013 17:07:57 -0600 + linuxcnc (1:2.5.1) lucid; urgency=low * Motion: fix incorrect spindle direction after G43 in CSS+M4 mode diff --git a/docs/src/code/Code_Notes.txt b/docs/src/code/Code_Notes.txt index 607c24f77..ac3c8bbee 100644 --- a/docs/src/code/Code_Notes.txt +++ b/docs/src/code/Code_Notes.txt @@ -1012,3 +1012,424 @@ Recompile, and the new message should be there. The next part is to send such messages from somewhere, and receive them in another place, and do some stuff with it. + +== The Tool Table and Toolchanger + +LinuxCNC interfaces with toolchanger hardware, and has an internal +toolchanger abstraction. LinuxCNC manages tool information in a tool +table file. + + +=== Toolchanger abstraction in LinuxCNC + +LinuxCNC supports two kinds of toolchanger hardware, +called _nonrandom_ and _random_. The ini setting +<<sub:[EMCIO]-Section,[EMCIO]RANDOM_TOOLCHANGER>> controls which of +these kinds of hardware LinuxCNC thinks it's connected to. + + +==== Nonrandom Toolchangers + +Nonrandom toolchanger hardware puts each tool back in the pocket it was +originally loaded from. + +Examples of nonrandom toolchanger hardware are the "manual" toolchanger, +lathe tool turrents, and rack toolchangers. + +When configured for a nonrandom toolchanger, LinuxCNC does not change the +pocket number in the tool table file as tools are loaded and unloaded. +Internal to LinuxCNC, on tool change the tool information is *copied* +from the tool table's source pocket to pocket 0 (which represents the +spindle), replacing whatever tool information was previously there. + +NOTE: In LinuxCNC configured for nonrandom toolchanger, tool 0 (T0) has +special meaning: "no tool". T0 may not appear in the tool table file, and +changing to T0 will result in LinuxCNC thinking it's got an empty spindle. + + +==== Random Toolchangers + +Random toolchanger hardware swaps the tool in the spindle (if any) with +the requested tool on tool change. Thus the pocket that a tool resides +in changes as it is swapped in and out of the spindle. + +An example of random toolchanger hardware is a carousel toolchanger. + +When configured for a random toolchanger, LinuxCNC swaps the pocket number +of the old and the new tool in the tool table file when tools are loaded. +Internal to LinuxCNC, on tool change, the tool information is *swapped* +between the tool table's source pocket and pocket 0 (which represents +the spindle). So after a tool change, pocket 0 in the tool table has +the tool information for the new tool, and the pocket that the new tool +came from has the tool information for the old tool (the tool that was +in the spindle before the tool change), if any. + +NOTE: In LinuxCNC configured for random toolchanger, tool 0 (T0) has *no* +special meaning. It is treated exactly like any other tool in the tool +table. It is customary to use T0 to represent "no tool" (ie, a tool with +zero TLO), so that the spindle can be conveniently emptied when needed. + + +=== The Tool Table + +LinuxCNC keeps track of tools in a file called the _tool table_. +The tool table records the following information for each tool: + +tool number:: + + An integer that uniquely identifies this tool. Tool numbers are + handled differently by LinuxCNC when configured for random and + nonrandom toolchangers: + + * When LinuxCNC is configured for a nonrandom toolchanger this + number must be positive. T0 gets special handling and is not + allowed to appear in the tool table. + + * When LinuxCNC is configured for a random toolchanger this number + must be non-negative. T0 is allowed in the tool table, and is + usually used to represent "no tool", ie the empty pocket. + +pocket number:: + + An integer that identifies the pocket or slot in the toolchanger + hardware where the tool resides. Pocket numbers are handled + differently by LinuxCNC when configured for random and nonrandom + toolchangers: + + * When LinuxCNC is configured for a nonrandom toolchanger, the pocket + number in the tool file can be any positive integer (pocket + 0 is not allowed). LinuxCNC silently compactifies the pocket + numbers when it loads the tool file, so there may be a difference + between the pocket numbers in the tool file and the internal + pocket numbers used by LinuxCNC-with-nonrandom-toolchanger. + + * When LinuxCNC is configured for a random toolchanger, the pocket + numbers in the tool file must be between 0 and 55, inclusive. + Pockets 1-55 are in the toolchanger, pocket 0 is the spindle. + +diameter:: + + Diameter of the tool, in machine units. + +tool length offset:: + + Tool length offset (also called TLO), in up to 9 axes, in machine + units. Axes that don't have a specified TLO get 0. + + +=== Gcodes affecting tools + +The gcodes that use or affect tool information are: + + +==== Txxx + +Tells the toolchanger hardware to prepare to switch to a specified +tool +xxx+. + +Handled by +Interp::convert_tool_select()+. + +. The machine is asked to prepare to switch to the selected tool by + calling the Canon function +SELECT_POCKET()+ with the pocket number + of the requested tool. + + .. (saicanon) No-op. + + .. (emccanon) Builds an +EMC_TOOL_PREPARE+ message with the requested + pocket number and sends it to Task, which sends it on + to IO. IO gets the message and asks HAL to prepare + the pocket by setting +iocontrol.0.tool-prep-pocket+, + +iocontrol.0.tool-prep-number+, and +iocontrol.0.tool-prepare+. + IO then repeatedly calls +read_tool_inputs()+ to poll the HAL pin + +iocontrol.0.tool-prepared+, which signals from the toolchanger + hardware, via HAL, to IO that the requested tool prep is complete. + When that pin goes True, IO sets +emcioStatus.tool.pocketPrepped+ + to the requested tool's pocket number. + +. Back in interp, +settings->selected_pocket+ is assigned the pocket + number of the requested tool _xxx_. + +==== M6 + +Tells the toolchanger to switch to the currently selected tool (selected +by the previous Txxx command). + +Handled by +Interp::convert_tool_change()+. + +. The machine is asked to change to the selected tool + by calling the Canon function +CHANGE_TOOL()+ with + +settings->selected_pocket+. + + .. (saicanon) Sets sai's +_active_slot+ to the passed-in pocket + number. Tool information is copied from the selected pocket + of of the tool table (ie, from sai's +_tools[_active_slot]+) + to the spindle (aka sai's +_tools[0]+). + + .. (emccanon) Sends an +EMC_TOOL_LOAD+ message to Task, which + sends it to IO. IO sets +emcioStatus.tool.toolInSpindle+ + to the tool number of the tool in the pocket identified + by +emcioStatus.tool.pocketPrepped+ (set by +Txxx+ + aka +SELECT_POCKET()+). It then requests that the + toolchanger hardware perform a tool change, by setting + the HAL pin +iocontrol.0.tool-change+ to True. Later, + IO's +read_tool_inputs()+ will sense that the HAL pin + +iocontrol.0.tool_changed+ has been set to True, indicating the + toolchanger has completed the tool change. When this happens, + it calls +load_tool()+ to update the machine state. + + ... +load_tool()+ with a nonrandom toolchanger + config copies the tool information from the selected pocket + to the spindle (pocket 0). + + ... +load_tool()+ with a random toolchanger config swaps tool + information between pocket 0 (the spindle) and the selected + pocket, then saves the tool table. + +. Back in interp, +settings->current_pocket+ is assigned the new + tool from +settings->selected_pocket+ (set by +Txxx+). The relevant + numbered parameters (<<sub:numbered-parameters,#5400-#5413>>) are + updated with the new tool information from pocket 0 (spindle). + + +==== G43/G43.1/G49 + +Apply tool length offset. G43 uses the TLO of the currently loaded tool, +or of a specified tool if the H-word is given in the block. G43.1 gets +TLO from axis-words in the block. G49 cancels the TLO (it uses 0 for +the offset for all axes). + +Handled by +Interp::convert_tool_length_offset()+. + +. It starts by building an +EmcPose+ containing the 9-axis offsets + to use. For +G43.1+, these tool offsets come from axis words in the + current block. For +G43+ these offsets come from the current tool + (the tool in pocket 0), or from the tool specified by the H-word in + the block. For G49, the offsets are all 0. + +. The offsets are passed to Canon's +USE_TOOL_LENGTH_OFFSET()+ function. + + .. (saicanon) Records the TLO in +_tool_offset+. + + .. (emccanon) Builds an +EMC_TRAJ_SET_OFFSET+ message containing the + offsets and sends it to Task. Task copies the offsets to + +emcStatus->task.toolOffset+ and sends them on to Motion via + an +EMCMOT_SET_OFFSET+ command. Motion copies the offsets + to +emcmotStatus->tool_offset+, where it gets used to offset + future motions. + +. Back in interp, the offsets are recorded in +settings->tool_offset+. + The effective pocket is recorded in +settings->tool_offset_index+, + though this value is never used. + + +==== G10 L1/L10/L11 + +Modifies the tool table. + +Handled by +Interp::convert_setup_tool()+. + +. Picks the tool number out of the P-word in the block and finds the + pocket for that tool: + + .. With a nonrandom toolchanger config this is always the + pocket number in the toolchanger (even when the tool is in + the spindle). + + .. With a random toolchanger config, if the tool is currently + loaded it uses pocket 0 (pocket 0 means "the spindle"), + and if the tool is not loaded it uses the pocket number in + the tool changer. (This difference is important.) + +. Figures out what the new offsets should be. + +. The new tool information (diameter, offsets, angles, and orientation), + along with the tool number and pocket number, are passed to the Canon + call SET_TOOL_TABLE_ENTRY(). + + .. (saicanon) Copy the new tool information to the specified pocket + (in sai's internal tool table, +_tools+). + + .. (emccanon) Build an +EMC_TOOL_SET_OFFSET+ message with the new + tool information, and send it to Task, which passes it + to IO. IO updates the specified pocket in its internal + copy of the tool table (+emcioStatus.tool.toolTable+), and + if the specified tool is currently loaded (it is compared to + +emcioStatus.tool.toolInSpindle+) then the new tool information + is copied to pocket 0 (the spindle) as well. (FIXME: that's a + buglet, should only be copied on nonrandom machines.) Finally IO + saves the new tool table. + +. Back in interp, if the modified tool is currently loaded in the + spindle, and if the machine is a non-random toolchanger, then + the new tool information is copied from the tool's home pocket + to pocket 0 (the spindle) in interp's copy of the tool table, + +settings->tool_table+. (This copy is not needed on random tool + changer machines because there, tools don't have a home pocket and + instead we just updated the tool in pocket 0 directly.) + +. The relevant numbered parameters + (<<sub:numbered-parameters,#5400-#5413>>) are updated from the tool + information in the spindle (by copying the information from interp's + +settings->tool_table+ to +settings->parameters+). (FIXME: this is + a buglet, the params should only be updated if it was the current + tool that was modified). + +. If the modified tool is currently loaded in the + spindle, and if the config is for a nonrandom toolchanger, then the + new tool information is written to the tool table's pocket 0 as well, + via a second call to SET_TOOL_TABLE_ENTRY(). (This second tool-table + update is not needed on random toolchanger machines because there, + tools don't have a home pocket and instead we just updated the tool + in pocket 0 directly.) + + +==== M61 + +FIXME! + +Set current tool number. This switches which tool is in the spindle, +without actually moving the toolchanger or swapping any tools. + +Handled by +Interp::convert_tool_change()+. + +Canon: +CHANGE_TOOL_NUMBER()+ + +settings->current_pocket is assigned the pocket number currently +holding the tool specified by the Q-word argument. + +I think this m-code is broken. + + +==== G41/G41.1/G42/G42.1 + +Enable cutter radius compensation (usually called _cutter comp_). + +Handled by +Interp::convert_cutter_compensation_on()+. + +No Canon call, cutter comp happens in the interpreter. Uses the tool +table in the expected way: if a D-word tool number is supplied it looks +up the pocket number of the specified tool number in the table, and if +no D-word is supplied it uses pocket 0 (the spindle). + + +==== G40 + +Cancel cutter radius compensation. + +Handled by +Interp::convert_cutter_compensation_off()+. + +No Canon call, cutter comp happens in the interpreter. Does not use +the tool table. + + +=== Internal state variables + +This is not an exhaustive list! Tool information is spread through +out LinuxCNC. + + +==== IO + ++emcioStatus+ is of type +EMC_IO_STAT+ + +emcioStatus.tool.pocketPrepped:: + + When IO gets the signal from HAL that the toolchanger prep is + complete (after a +Txxx+ command), this variable is set to the + pocket of the requested tool. When IO gets the signal from HAL + that the tool change itself is complete (after an +M6+ command), + this variable gets reset to -1. + +emcioStatus.tool.toolInSpindle:: + + Tool number of the tool currently installed in the spindle. + Exported on the HAL pin +iocontrol.0.tool-number+ (s32). + +emcioStatus.tool.toolTable[]:: + + An array of +CANON_TOOL_TABLE+ structures, +CANON_POCKETS_MAX+ long. + Loaded from the tool table file at startup and maintained there + after. Index 0 is the spindle, indexes 1-(CANON_POCKETS_MAX-1) + are the pockets in the toolchanger. This is a complete copy + of the tool information, maintained separately from Interp's + +settings.tool_table+. + + +==== interp + ++settings+ is of type +settings+, which is +struct setup_struct+. +Defined in +src/emc/rs274ngc/interp_internal.hh+. + +settings.selected_pocket:: + + Pocket of the tool most recently selected by +Txxx+. + +settings.current_pocket:: + + Original pocket of the tool currently in the spindle. In other words: + which toolchanger pocket the tool that's currently in the spindle + was loaded from. + +settings.tool_table[]:: + + An array of tool information. The index into the array is the "pocket + number" (aka "slot number"). Pocket 0 is the spindle, pockets 1 + through (CANON_POCKETS_MAX-1) are the pockets of the toolchanger. + +settings.tool_offset_index:: + + Unused. FIXME: Should probably be removed. + +settings.toolchange_flag:: + + Interp sets this to true when calling Canon's CHANGE_TOOL() + function. It is checked in +Interp::convert_tool_length_offset()+ + to decide which pocket to use for G43 (with no H-word): + +settings->current_pocket+ if the tool change is still in progress, + pocket 0 (the spindle) if the tool change is complete. + +settings.random_toolchanger:: + + Set from the ini variable +[EMCIO]RANDOM_TOOLCHANGER+ at startup. + Controls various tool table handling logic. (IO also reads this + ini variable and changes its behavior based on it. For example, + when saving the tool table, random toolchanger save the tool in + the spindle (pocket 0), but non-random toolchanger save each tool + in its "home pocket".) + +settings.tool_offset:: + + This is an +EmcPose+ variable. + + * Used to compute position in various places. + + * Sent to Motion via the +EMCMOT_SET_OFFSET+ message. + All motion does with the offsets is export them to the HAL pins + +motion.0.tooloffset.[xyzabcuvw]+. FIXME: export these from + someplace closer to the tool table (io or interp, probably) + and remove the EMCMOT_SET_OFFSET message. + +settings.pockets_max:: + + Used interchangably with +CANON_POCKETS_MAX+ (a #defined constant, + set to 56 as of 2012 December 30). FIXME: This settings variable + is not currently useful and should probably be removed. + +settings.tool_table:: + + This is an array of +CANON_TOOL_TABLE+ structures (defined in + +src/emc/nml_intf/emctool.h+), with +CANON_POCKETS_MAX+ entries. + Indexed by "pocket number", aka "slot number". Index 0 is the + spindle, indexes 1-(CANON_POCKETS_MAX-1) are the pockets in the tool + changer. On a random toolchanger pocket numbers are meaningful. + On a nonrandom toolchanger pockets are meaningless; the pocket + numbers in the tool table file are ignored and tools are assigned + to +tool_table+ slots sequentially. + +settings.tool_change_at_g30:: +settings.tool_change_quill_up:: +settings.tool_change_with_spindle_on:: + + These are set from ini variables in the +[EMCIO]+ section, and + control how tool changes are performed. + diff --git a/scripts/.gitignore b/scripts/.gitignore index 5cb8f6983..9094e6daf 100644 --- a/scripts/.gitignore +++ b/scripts/.gitignore @@ -6,3 +6,4 @@ realtime rtapi.conf linuxcncmkdesktop latencyplot +latencyhistogram diff --git a/scripts/latencyhistogram.in b/scripts/latencyhistogram.in index dccc362ca..13d8ac1fd 100755 --- a/scripts/latencyhistogram.in +++ b/scripts/latencyhistogram.in @@ -57,7 +57,7 @@ proc set_defaults {} { program_check $::LH(realtime) } - set ::LH(version) 2.6 + set ::LH(version) 2.7 set ::LH(verbose) 0 set ::LH(opt,show) 0 @@ -220,11 +220,17 @@ proc config {} { } ;# config proc other_info {} { + if [info exists ::env(DISPLAY)] { + set display "DISPLAY=$::env(DISPLAY)" + } else { + set display "DISPLAY=?" + } return "\ $::LH(date) V$::LH(version) \ [exec hostname] \ $::tcl_platform(machine) \ $::tcl_platform(osVersion) \ +$display \ $::tcl_platform(user) \ $::LH(note,txt) \ " diff --git a/src/emc/iotask/ioControl.cc b/src/emc/iotask/ioControl.cc index f7fd732fc..d1f1a3374 100644 --- a/src/emc/iotask/ioControl.cc +++ b/src/emc/iotask/ioControl.cc @@ -590,7 +590,8 @@ void load_tool(int pocket) { if (0 != saveToolTable(tool_table_file, emcioStatus.tool.toolTable)) emcioStatus.status = RCS_ERROR; } else if(pocket == 0) { - // magic T0 = pocket 0 = no tool + // on non-random tool-changers, asking for pocket 0 is the secret + // handshake for "unload the tool from the spindle" emcioStatus.tool.toolTable[0].toolno = -1; ZERO_EMC_POSE(emcioStatus.tool.toolTable[0].offset); emcioStatus.tool.toolTable[0].diameter = 0.0; diff --git a/src/emc/nml_intf/canon.hh b/src/emc/nml_intf/canon.hh index eccf7f67f..93bab0e8f 100644 --- a/src/emc/nml_intf/canon.hh +++ b/src/emc/nml_intf/canon.hh @@ -542,8 +542,7 @@ a change_tool command, the select_tool command must have been given before the change_tool command, and the value of slot must be the slot number of the selected tool. */ -// extern void SELECT_POCKET(int i); /* i is slot number */ -extern void SELECT_POCKET(int i, int tool); /* i is slot number, tool is tool number */ +extern void SELECT_POCKET(int pocket, int tool); /* pocket is pocket number, tool is tool number */ extern void CHANGE_TOOL_NUMBER(int number); diff --git a/src/emc/rs274ngc/interp_convert.cc b/src/emc/rs274ngc/interp_convert.cc index 4533b4489..659dd48b9 100644 --- a/src/emc/rs274ngc/interp_convert.cc +++ b/src/emc/rs274ngc/interp_convert.cc @@ -1839,7 +1839,7 @@ int Interp::convert_cutter_compensation_on(int side, //!< side of path cutte setup_pointer settings) //!< pointer to machine settings { double radius; - int index, orientation; + int pocket_number, orientation; CHKS((settings->plane != CANON_PLANE_XY && settings->plane != CANON_PLANE_XZ), NCE_RADIUS_COMP_ONLY_IN_XY_OR_XZ); @@ -1857,17 +1857,17 @@ int Interp::convert_cutter_compensation_on(int side, //!< side of path cutte } } else { if(!block->d_flag) { - index = 0; + pocket_number = 0; } else { int tool; CHKS(!is_near_int(&tool, block->d_number_float), _("G%d requires D word to be a whole number"), block->g_modes[7]/10); CHKS((tool < 0), NCE_NEGATIVE_D_WORD_TOOL_RADIUS_INDEX_USED); - CHP((find_tool_pocket(settings, tool, &index))); + CHP((find_tool_pocket(settings, tool, &pocket_number))); } - radius = USER_TO_PROGRAM_LEN(settings->tool_table[index].diameter) / 2.0; - orientation = settings->tool_table[index].orientation; + radius = USER_TO_PROGRAM_LEN(settings->tool_table[pocket_number].diameter) / 2.0; + orientation = settings->tool_table[pocket_number].orientation; CHKS((settings->plane != CANON_PLANE_XZ && orientation != 0 && orientation != 9), _("G%d with lathe tool, but plane is not G18"), block->g_modes[7]/10); } if (radius < 0.0) { /* switch side & make radius positive if radius negative */ @@ -3493,7 +3493,8 @@ int Interp::convert_retract_mode(int g_code, //!< g_code being executed (mus return INTERP_OK; } -// G10 L1 P[tool number] R[radius] X[x offset] Z[z offset] Q[orientation] +// G10 L1 P[tool number] R[radius] X[x offset] Z[z offset] Q[orientation] +// G10 L10 P[tool number] R[radius] X[x offset] Z[z offset] Q[orientation] int Interp::convert_setup_tool(block_pointer block, setup_pointer settings) { int pocket = -1, toolno; @@ -3505,8 +3506,6 @@ int Interp::convert_setup_tool(block_pointer block, setup_pointer settings) { CHP((find_tool_pocket(settings, toolno, &pocket))); - settings->tool_table[pocket].toolno = toolno; - CHKS(!(block->x_flag || block->y_flag || block->z_flag || block->a_flag || block->b_flag || block->c_flag || block->u_flag || block->v_flag || block->w_flag || @@ -3631,7 +3630,15 @@ int Interp::convert_setup_tool(block_pointer block, setup_pointer settings) { settings->tool_table[pocket].backangle, settings->tool_table[pocket].orientation); - if(settings->current_pocket == pocket) { + // + // On non-random tool changers we just updated the tool's "home pocket" + // in the tool changer carousel, so now, if the tool is currently + // loaded, we need to copy the new tool information to the spindle + // (pocket 0). This is never needed on random tool changers because + // there tools don't have a home pocket, and instead we updated pocket + // 0 (the spindle) directly when modifying the loaded tool. + // + if ((!settings->random_toolchanger) && (settings->current_pocket == pocket)) { settings->tool_table[0] = settings->tool_table[pocket]; } @@ -3668,9 +3675,11 @@ int Interp::convert_setup_tool(block_pointer block, setup_pointer settings) { settings->parameters[5412] = settings->tool_table[0].backangle; settings->parameters[5413] = settings->tool_table[0].orientation; - //persuade axis-gui to update parameters widget for current tool: + // if the modified tool is currently in the spindle, then copy its + // information to pocket 0 of the tool table (which signifies the + // spindle) if ( !_setup.random_toolchanger - && toolno == settings->current_pocket) { + && pocket == settings->current_pocket) { SET_TOOL_TABLE_ENTRY(0, settings->tool_table[pocket].toolno, settings->tool_table[pocket].offset, @@ -5109,41 +5118,43 @@ int Interp::convert_tool_length_offset(int g_code, //!< g_code being execu block_pointer block, //!< pointer to a block of RS274/NGC instructions setup_pointer settings) //!< pointer to machine settings { - int index; + int pocket_number; EmcPose tool_offset; ZERO_EMC_POSE(tool_offset); CHKS((settings->cutter_comp_side), (_("Cannot change tool offset with cutter radius compensation on"))); if (g_code == G_49) { - index = 0; + pocket_number = 0; } else if (g_code == G_43) { logDebug("convert_tool_length_offset h_flag=%d h_number=%d toolchange_flag=%d current_pocket=%d\n", block->h_flag,block->h_number,settings->toolchange_flag,settings->current_pocket); if(block->h_flag) { - CHP((find_tool_pocket(settings, block->h_number, &index))); + CHP((find_tool_pocket(settings, block->h_number, &pocket_number))); } else if (settings->toolchange_flag) { - // we haven't loaded the tool and swapped pockets quite yet - index = settings->current_pocket; + // Tool change is in progress, so the "current tool" is in its + // original pocket still. + pocket_number = settings->current_pocket; } else { - // tool change is done so pockets are swapped - index = 0; + // Tool change is done so the current tool is in pocket 0 (aka the + // spindle). + pocket_number = 0; } logDebug("convert_tool_length_offset: using index=%d spindle_toolno=%d pocket_toolno=%d", - index, settings->tool_table[0].toolno,settings->tool_table[settings->current_pocket].toolno); - - tool_offset.tran.x = USER_TO_PROGRAM_LEN(settings->tool_table[index].offset.tran.x); - tool_offset.tran.y = USER_TO_PROGRAM_LEN(settings->tool_table[index].offset.tran.y); - tool_offset.tran.z = USER_TO_PROGRAM_LEN(settings->tool_table[index].offset.tran.z); - tool_offset.a = USER_TO_PROGRAM_ANG(settings->tool_table[index].offset.a); - tool_offset.b = USER_TO_PROGRAM_ANG(settings->tool_table[index].offset.b); - tool_offset.c = USER_TO_PROGRAM_ANG(settings->tool_table[index].offset.c); - tool_offset.u = USER_TO_PROGRAM_LEN(settings->tool_table[index].offset.u); - tool_offset.v = USER_TO_PROGRAM_LEN(settings->tool_table[index].offset.v); - tool_offset.w = USER_TO_PROGRAM_LEN(settings->tool_table[index].offset.w); + pocket_number, settings->tool_table[0].toolno,settings->tool_table[settings->current_pocket].toolno); + + tool_offset.tran.x = USER_TO_PROGRAM_LEN(settings->tool_table[pocket_number].offset.tran.x); + tool_offset.tran.y = USER_TO_PROGRAM_LEN(settings->tool_table[pocket_number].offset.tran.y); + tool_offset.tran.z = USER_TO_PROGRAM_LEN(settings->tool_table[pocket_number].offset.tran.z); + tool_offset.a = USER_TO_PROGRAM_ANG(settings->tool_table[pocket_number].offset.a); + tool_offset.b = USER_TO_PROGRAM_ANG(settings->tool_table[pocket_number].offset.b); + tool_offset.c = USER_TO_PROGRAM_ANG(settings->tool_table[pocket_number].offset.c); + tool_offset.u = USER_TO_PROGRAM_LEN(settings->tool_table[pocket_number].offset.u); + tool_offset.v = USER_TO_PROGRAM_LEN(settings->tool_table[pocket_number].offset.v); + tool_offset.w = USER_TO_PROGRAM_LEN(settings->tool_table[pocket_number].offset.w); } else if (g_code == G_43_1) { tool_offset = settings->tool_offset; - index = -1; + pocket_number = -1; if(block->x_flag) tool_offset.tran.x = block->x_number; if(block->y_flag) tool_offset.tran.y = block->y_number; if(block->z_flag) tool_offset.tran.z = block->z_number; @@ -5184,22 +5195,19 @@ int Interp::convert_tool_length_offset(int g_code, //!< g_code being execu /*! convert_tool_select Returned Value: int - If the tool slot given in the block is larger than allowed, - this returns NCE_SELECTED_TOOL_SLOT_NUMBER_TOO_LARGE. - Otherwise, it returns INTERP_OK. + If the tool number given in the block is not found in the tool table, + it returns INTERP_ERROR. Otherwise (if the tool *is* found) it returns + INTERP_OK. Side effects: See below Called by: execute_block A select tool command is given, which causes the changer chain to move -so that the slot with the t_number given in the block is next to the -tool changer, ready for a tool change. The +so that the slot with the tool identified by the t_number given in the +block is next to the tool changer, ready for a tool change. The settings->selected_tool_slot is set to the given slot. -An alternative in this function is to select by tool id. This was used -in the K&T and VGER interpreters. It is easy to code. - A check that the t_number is not negative has already been made in read_t. A zero t_number is allowed and means no tool should be selected. diff --git a/src/emc/task/emccanon.cc b/src/emc/task/emccanon.cc index 69d1d1f3a..e34236333 100644 --- a/src/emc/task/emccanon.cc +++ b/src/emc/task/emccanon.cc @@ -2721,11 +2721,27 @@ int GET_EXTERNAL_QUEUE_EMPTY(void) return emcStatus->motion.traj.queue == 0 ? 1 : 0; } +// Returns the "home pocket" of the tool currently in the spindle, ie the +// pocket that the current tool was loaded from. Returns 0 if there is no +// tool in the spindle. int GET_EXTERNAL_TOOL_SLOT() { - return emcStatus->io.tool.toolInSpindle; + int toolno = emcStatus->io.tool.toolInSpindle; + int pocket; + + for (pocket = 1; pocket < CANON_POCKETS_MAX; pocket++) { + if (emcStatus->io.tool.toolTable[pocket].toolno == toolno) { + return pocket; + } + } + + return 0; // no tool in spindle } +// If the tool changer has prepped a pocket (after a Txxx command) and is +// ready to perform a tool change, return the currently prepped pocket +// number. If the tool changer is idle (because no Txxx command has been +// run, or because an M6 tool change has completed), return -1. int GET_EXTERNAL_SELECTED_TOOL_SLOT() { return emcStatus->io.tool.pocketPrepped; diff --git a/src/emc/usr_intf/axis/scripts/axis.py b/src/emc/usr_intf/axis/scripts/axis.py index 6786bde3f..c64941062 100755 --- a/src/emc/usr_intf/axis/scripts/axis.py +++ b/src/emc/usr_intf/axis/scripts/axis.py @@ -2818,7 +2818,7 @@ mav = ( or inifile.find("TRAJ","MAX_VELOCITY") or mlv) vars.max_aspeed.set(float(mav)) -mv = inifile.find("TRAJ","MAX_LINEAR_VELOCITY") or inifile.find("AXIS_0","MAX_VELOCITY") or 1.0 +mv = inifile.find("DISPLAY","MAX_LINEAR_VELOCITY") or inifile.find("TRAJ","MAX_LINEAR_VELOCITY") or inifile.find("TRAJ","MAX_VELOCITY") or inifile.find("AXIS_0","MAX_VELOCITY") or 1.0 vars.maxvel_speed.set(float(mv)*60) vars.max_maxvel.set(float(mv)) root_window.tk.eval("${pane_top}.jogspeed.s set [setval $jog_speed $max_speed]") diff --git a/src/emc/usr_intf/pncconf/pncconf.py b/src/emc/usr_intf/pncconf/pncconf.py index ed600c16d..214ae6a4d 100755 --- a/src/emc/usr_intf/pncconf/pncconf.py +++ b/src/emc/usr_intf/pncconf/pncconf.py @@ -1804,7 +1804,7 @@ If you have a REALLY large config that you wish to convert to this newer version return test def pwmgen_invert_pins(self,pinnumber): - print "list pwm invert pins" + print "list pwm invert pins",pinnumber # sample pinname = mesa0c0pin11 signallist = [] pin = int(pinnumber[10:]) @@ -1838,8 +1838,8 @@ If you have a REALLY large config that you wish to convert to this newer version closedloop = False pwmpin = self.pwmgen_sig(let) pwmpinname = self.make_pinname(pwmpin) - if pwmpinname: - pwminvertlist = self.pwmgen_invert_pins(self.pwmgen_sig(let)) + if pwmpinname and not 'serial' in pwmpin: # TODO allow sserial PWM to be inverted + pwminvertlist = self.pwmgen_invert_pins(pwmpin) if not pwmpin == None: pwmtype = self.pwmgen_sig(let)+"type" else: diff --git a/src/po/de.po b/src/po/de.po index 42e3e8efd..642a1b575 100644 --- a/src/po/de.po +++ b/src/po/de.po @@ -186,16 +186,17 @@ msgid "" "or\n" "Click 'Quit' to exit HALSCOPE" msgstr "" -"HALSCOPE benutzt eine Echtzeit-Komponente namens scope_rt,\n" -"um Werte aufzuzeichnen. Sie ist nicht geladen und konnte auch \n" -"nicht automatisch nachgeladen werden.\n" -"Weitere Informationen könnten in der Konsole verfügbar sein,\n" +"HALSCOPE benutzt eine Echtzeit-Komponente namens scope_rt\n" +"um Werte aufzuzeichnen. Diese wurde nicht geladen und der\n" +"atomatische Versuch die Komponente zu laden schlug fehl.\n" +"Weitere Informationen könnten in der Konole verfügbar sein,\n" "aus der der Befehl »halscope« gestartet wurde.\n" "\n" "Wählen Sie eine der folgenden Möglichkeiten:\n" "\n" -"Laden der Komponente (eingeben: »halcmd loadrt scope_rt«) und »OK« wählen\n" -"oder wählen Sie »Beenden«, um HALSCOPE zu beenden" +"Laden der Komponente (mittels »halcmd loadrt scope_rt«). Wählen Sie »OK«\n" +"oder\n" +"wählen Sie »Beenden« um HALSCOPE zu beenden" #: hal/utils/scope_horiz.c:503 src/hal/utils/scope_horiz.c:495 msgid "Realtime function not linked" @@ -234,10 +235,10 @@ msgid "" "or\n" "Click 'Quit' to exit HALSCOPE" msgstr "" -"Wählen Sie einen Thread-Namen und Verviel-\n" -"facher und bestätigen Sie mit »OK«\n" +"Wählen Sie einen Tread-Namen und Vervielfacher\n" +"und bestätigen Sie mit »OK«\n" "oder\n" -"wählen Sie »Beenden« um HALSCOPE zu beenden." +"wählen Sie »Beenden« um HALSCOPE zu beenden\n" #: src/hal/utils/scope_horiz.c:526 hal/utils/scope_horiz.c:534 msgid "Thread:" @@ -372,7 +373,7 @@ msgstr "" "oder\n" "klicken Sie 'Quit', um HALSCOPE zu verlassen." -#: hal/utils/scope_horiz.c:791 +#: hal/utils/scope_horiz.c:791 src/hal/utils/scope_horiz.c:779 msgid "Pick log file to write to:" msgstr "Wählen Sie eine Log-Datei zum Speichern:" @@ -606,6 +607,7 @@ msgid "Force" msgstr "Zwang" #: hal/utils/scope_trig.c:242 hal/utils/scope_trig.c:276 +#: src/hal/utils/scope_trig.c:235 src/hal/utils/scope_trig.c:269 msgid "Level" msgstr "Schwelle" @@ -1043,8 +1045,7 @@ msgstr "Speichern" #: ../tcl/bin/emccalib.tcl:159 ../tcl/bin/halconfig.tcl:623 #, fuzzy, tcl-format msgid "Tune %d" -msgstr "" -"Feineinstellung %d" +msgstr "Feineinstellung %d" #: tcl/bin/emccalib.tcl:160 tcl/bin/halconfig.tcl:628 #: ../tcl/bin/emccalib.tcl:161 ../tcl/bin/halconfig.tcl:628 @@ -1119,8 +1120,7 @@ msgstr "Konfigurationsinformationen" #: tcl/bin/emcdebug.tcl:187 ../tcl/bin/emcdebug.tcl:187 #, fuzzy msgid "Use of defaults" -msgstr "" -"Benutzen der Standardwerte" +msgstr "Benutzen der Standardwerte" #: tcl/bin/emcdebug.tcl:188 ../tcl/bin/emcdebug.tcl:188 msgid "Version information" @@ -1207,8 +1207,7 @@ msgstr "Einfügen" #: ../tcl/bin/genedit.tcl:99 ../tcl/mini.tcl:2545 ../tcl/show_errors.tcl:68 #, fuzzy msgid "Select All" -msgstr "" -"Alles markieren" +msgstr "Alles markieren" #: tcl/bin/genedit.tcl:104 tcl/bin/halconfig.tcl:192 tcl/mini.tcl:919 #: tcl/mini.tcl:2519 tcl/tklinuxcnc.tcl:790 ../tcl/bin/genedit.tcl:104 diff --git a/src/po/hu.po b/src/po/hu.po index 99f831501..63a1d6097 100644 --- a/src/po/hu.po +++ b/src/po/hu.po @@ -72,11 +72,12 @@ msgid "_Close" msgstr "_Bezárás" #: src/hal/utils/scope.c:126 +#, fuzzy msgid "" "Usage:\n" " halscope [-h] [-i infile] [-o outfile] [num_samples]\n" msgstr "" -"Használat:\\n\n" +"Használat:\n" " halscope [-h] [-i ini_fájl] [-o kimeneti_fájl] [mintavétel_száma]\n" #: src/hal/utils/scope.c:474 src/hal/utils/scope.c:501 @@ -291,7 +292,11 @@ msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:3336 #: src/emc/usr_intf/axis/scripts/image-to-gcode.py:718 #: lib/python/propertywindow.py:34 share/axis/tcl/axis.tcl:1720 -#: share/axis/tcl/axis.tcl:1757 +#: share/axis/tcl/axis.tcl:1757 src/emc/usr_intf/axis/scripts/axis.py:1069 +#: src/emc/usr_intf/axis/scripts/axis.py:1129 +#: src/emc/usr_intf/axis/scripts/axis.py:1445 +#: src/emc/usr_intf/axis/scripts/axis.py:2464 +#: src/emc/usr_intf/axis/scripts/axis.py:3320 msgid "OK" msgstr "OK" @@ -437,6 +442,9 @@ msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1459 #: src/emc/usr_intf/axis/scripts/axis.py:1646 #: src/emc/usr_intf/axis/scripts/image-to-gcode.py:720 +#: src/emc/usr_intf/axis/scripts/axis.py:1391 +#: src/emc/usr_intf/axis/scripts/axis.py:1446 +#: src/emc/usr_intf/axis/scripts/axis.py:1633 msgid "Cancel" msgstr "Mégsem" @@ -575,31 +583,31 @@ msgstr "" msgid "fault %d during orient in progress" msgstr "" -#: src/emc/motion/control.c:718 +#: src/emc/motion/control.c:718 src/emc/motion/control.c:697 msgid "motion stopped by enable input" msgstr "" -#: src/emc/motion/control.c:741 +#: src/emc/motion/control.c:741 src/emc/motion/control.c:720 #, c-format msgid "joint %d on limit switch error" msgstr "" -#: src/emc/motion/control.c:753 +#: src/emc/motion/control.c:753 src/emc/motion/control.c:732 #, c-format msgid "joint %d amplifier fault" msgstr "" -#: src/emc/motion/control.c:762 +#: src/emc/motion/control.c:762 src/emc/motion/control.c:741 #, c-format msgid "joint %d following error" msgstr "" -#: src/emc/motion/control.c:1444 +#: src/emc/motion/control.c:1444 src/emc/motion/control.c:1423 #, c-format msgid "Exceeded positive soft limit on joint %d" msgstr "" -#: src/emc/motion/control.c:1449 +#: src/emc/motion/control.c:1449 src/emc/motion/control.c:1428 #, c-format msgid "Exceeded negative soft limit on joint %d" msgstr "" @@ -779,17 +787,17 @@ msgstr "" msgid "need to be enabled, in teleop mode for teleop move" msgstr "" -#: src/emc/motion/command.c:1605 +#: src/emc/motion/command.c:1605 src/emc/motion/command.c:1556 #, c-format msgid "joint %d: too many compensation entries" msgstr "" -#: src/emc/motion/command.c:1611 +#: src/emc/motion/command.c:1611 src/emc/motion/command.c:1562 #, c-format msgid "joint %d: compensation values must increase" msgstr "" -#: src/emc/motion/command.c:1640 +#: src/emc/motion/command.c:1640 src/emc/motion/command.c:1591 #, c-format msgid "unrecognized command %d" msgstr "" @@ -844,7 +852,7 @@ msgstr "" msgid "MOTION: emcmot_hal_data malloc failed\n" msgstr "" -#: src/emc/motion/motion.c:597 +#: src/emc/motion/motion.c:597 src/emc/motion/motion.c:585 #, c-format msgid "MOTION: joint %d pin/param export failed\n" msgstr "" @@ -905,7 +913,7 @@ msgstr "" #: tcl/bin/emccalib.tcl:106 tcl/bin/genedit.tcl:77 tcl/bin/halconfig.tcl:151 #: tcl/bin/halshow.tcl:85 tcl/mini.tcl:2516 tcl/tklinuxcnc.tcl:719 -#: tcl/ngcgui.tcl:549 +#: tcl/ngcgui.tcl:549 tcl/bin/halshow.tcl:86 #, fuzzy msgid "File" msgstr "_Fájl" @@ -1033,7 +1041,7 @@ msgstr "" #: tcl/bin/genedit.tcl:87 tcl/bin/halconfig.tcl:165 tcl/bin/halshow.tcl:92 #: tcl/mini.tcl:954 tcl/tklinuxcnc.tcl:734 tcl/ngcgui.tcl:1243 -#: tcl/ngcgui.tcl:3680 +#: tcl/ngcgui.tcl:3680 tcl/bin/halshow.tcl:93 #, fuzzy msgid "Exit" msgstr "Sz_erkesztés" @@ -1116,6 +1124,7 @@ msgstr "" #: tcl/bin/genedit.tcl:197 tcl/mini.tcl:1373 tcl/mini.tcl:1775 #: tcl/tklinuxcnc.tcl:451 src/emc/task/emctaskmain.cc:2072 +#: src/emc/task/emctaskmain.cc:2000 #, c-format, tcl-format msgid "can't open %s" msgstr "" @@ -1262,27 +1271,27 @@ msgstr "" msgid "View" msgstr "_Nézet" -#: tcl/bin/halconfig.tcl:170 tcl/bin/halshow.tcl:104 +#: tcl/bin/halconfig.tcl:170 tcl/bin/halshow.tcl:104 tcl/bin/halshow.tcl:105 msgid "Expand Tree" msgstr "" -#: tcl/bin/halconfig.tcl:172 tcl/bin/halshow.tcl:106 +#: tcl/bin/halconfig.tcl:172 tcl/bin/halshow.tcl:106 tcl/bin/halshow.tcl:107 msgid "Collapse Tree" msgstr "" -#: tcl/bin/halconfig.tcl:175 tcl/bin/halshow.tcl:109 +#: tcl/bin/halconfig.tcl:175 tcl/bin/halshow.tcl:109 tcl/bin/halshow.tcl:110 msgid "Expand Pins" msgstr "" -#: tcl/bin/halconfig.tcl:177 tcl/bin/halshow.tcl:111 +#: tcl/bin/halconfig.tcl:177 tcl/bin/halshow.tcl:111 tcl/bin/halshow.tcl:112 msgid "Expand Parameters" msgstr "" -#: tcl/bin/halconfig.tcl:179 tcl/bin/halshow.tcl:113 +#: tcl/bin/halconfig.tcl:179 tcl/bin/halshow.tcl:113 tcl/bin/halshow.tcl:114 msgid "Expand Signals" msgstr "" -#: tcl/bin/halconfig.tcl:182 tcl/bin/halshow.tcl:116 +#: tcl/bin/halconfig.tcl:182 tcl/bin/halshow.tcl:116 tcl/bin/halshow.tcl:117 msgid "Erase Watch" msgstr "" @@ -1301,14 +1310,15 @@ msgid "Enter HAL command :" msgstr "" #: tcl/bin/halconfig.tcl:479 tcl/bin/halconfig.tcl:528 tcl/bin/halshow.tcl:354 +#: tcl/bin/halshow.tcl:357 msgid "Execute" msgstr "" -#: tcl/bin/halconfig.tcl:943 tcl/bin/halshow.tcl:405 +#: tcl/bin/halconfig.tcl:943 tcl/bin/halshow.tcl:405 tcl/bin/halshow.tcl:413 msgid "Select a node to show." msgstr "" -#: tcl/bin/halconfig.tcl:968 tcl/bin/halshow.tcl:429 +#: tcl/bin/halconfig.tcl:968 tcl/bin/halshow.tcl:429 tcl/bin/halshow.tcl:438 msgid "<-- Select a Leaf. Click on its name." msgstr "" @@ -1340,35 +1350,35 @@ msgid "" "allowed by law." msgstr "" -#: tcl/bin/halshow.tcl:69 +#: tcl/bin/halshow.tcl:69 tcl/bin/halshow.tcl:70 msgid " SHOW " msgstr "" -#: tcl/bin/halshow.tcl:70 +#: tcl/bin/halshow.tcl:70 tcl/bin/halshow.tcl:71 msgid " WATCH " msgstr "" -#: tcl/bin/halshow.tcl:90 +#: tcl/bin/halshow.tcl:90 tcl/bin/halshow.tcl:91 msgid "Load Watch List" msgstr "" -#: tcl/bin/halshow.tcl:102 +#: tcl/bin/halshow.tcl:102 tcl/bin/halshow.tcl:103 msgid "Tree View" msgstr "" -#: tcl/bin/halshow.tcl:349 +#: tcl/bin/halshow.tcl:349 tcl/bin/halshow.tcl:354 msgid "Test HAL command :" msgstr "" -#: tcl/bin/halshow.tcl:544 +#: tcl/bin/halshow.tcl:544 tcl/bin/halshow.tcl:556 msgid "Load a watch list" msgstr "" -#: tcl/bin/halshow.tcl:567 +#: tcl/bin/halshow.tcl:567 tcl/bin/halshow.tcl:579 msgid "Save current watch list" msgstr "" -#: tcl/bin/halshow.tcl:581 +#: tcl/bin/halshow.tcl:581 tcl/bin/halshow.tcl:593 msgid "Commands may be tested here but they will NOT be saved" msgstr "" @@ -1887,6 +1897,7 @@ msgstr "" #: tcl/mini.tcl:1711 tcl/mini.tcl:2823 tcl/mini.tcl:2882 #: tcl/tklinuxcnc.tcl:465 src/emc/usr_intf/axis/scripts/axis.py:1885 #: src/emc/usr_intf/axis/scripts/image-to-gcode.py:754 +#: src/emc/usr_intf/axis/scripts/axis.py:1872 msgid "All files" msgstr "" @@ -2393,6 +2404,8 @@ msgstr "" #: src/emc/usr_intf/pncconf/pncconf.glade:62832 #: src/emc/usr_intf/pncconf/pncconf.glade:63925 #: src/emc/usr_intf/pncconf/pncconf.glade:65091 +#: src/emc/usr_intf/axis/scripts/axis.py:1543 +#: src/emc/usr_intf/axis/scripts/axis.py:1713 msgid "mm" msgstr "" @@ -3193,6 +3206,7 @@ msgstr "" #: tcl/ngcgui.tcl:3642 src/emc/usr_intf/axis/scripts/axis.py:2255 #: src/emc/usr_intf/axis/scripts/axis.py:2268 +#: src/emc/usr_intf/axis/scripts/axis.py:2242 msgid "Warning" msgstr "" @@ -3381,369 +3395,458 @@ msgid "Creating new tab page" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:148 +#: src/emc/usr_intf/axis/scripts/axis.py:144 msgid "Emergency stop" msgstr "Vészleállítás" #: src/emc/usr_intf/axis/scripts/axis.py:149 +#: src/emc/usr_intf/axis/scripts/axis.py:145 msgid "Turn machine on" msgstr "Kapcsold be a gépet" #: src/emc/usr_intf/axis/scripts/axis.py:151 +#: src/emc/usr_intf/axis/scripts/axis.py:147 msgid "Activate first axis" msgstr "1. tengely beindítva" #: src/emc/usr_intf/axis/scripts/axis.py:152 +#: src/emc/usr_intf/axis/scripts/axis.py:148 msgid "Activate second axis" msgstr "2. tengely beindítva" #: src/emc/usr_intf/axis/scripts/axis.py:153 +#: src/emc/usr_intf/axis/scripts/axis.py:149 msgid "Activate third axis" msgstr "3. tengely beindítva" #: src/emc/usr_intf/axis/scripts/axis.py:154 +#: src/emc/usr_intf/axis/scripts/axis.py:150 msgid "Activate fourth axis" msgstr "4. tengely beindítva" #: src/emc/usr_intf/axis/scripts/axis.py:155 +#: src/emc/usr_intf/axis/scripts/axis.py:151 #, fuzzy msgid "Activate fifth through ninth axis" msgstr "5. tengely beindítva" #: src/emc/usr_intf/axis/scripts/axis.py:156 +#: src/emc/usr_intf/axis/scripts/axis.py:152 msgid "Set Feed Override from 0% to 100%" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:157 +#: src/emc/usr_intf/axis/scripts/axis.py:153 msgid ", and ." msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:157 +#: src/emc/usr_intf/axis/scripts/axis.py:153 #, fuzzy msgid "Select jog speed" msgstr "Lépes növelése" #: src/emc/usr_intf/axis/scripts/axis.py:158 +#: src/emc/usr_intf/axis/scripts/axis.py:154 msgid "< and >" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:158 +#: src/emc/usr_intf/axis/scripts/axis.py:154 msgid "Select angular jog speed" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:159 +#: src/emc/usr_intf/axis/scripts/axis.py:155 msgid "I, Shift-I" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:159 share/axis/tcl/axis.tcl:2356 +#: src/emc/usr_intf/axis/scripts/axis.py:155 msgid "Select jog increment" msgstr "Lépes növelése" #: src/emc/usr_intf/axis/scripts/axis.py:160 +#: src/emc/usr_intf/axis/scripts/axis.py:156 msgid "Continuous jog" msgstr "Folytonos lépés" #: src/emc/usr_intf/axis/scripts/axis.py:161 #: src/emc/usr_intf/pncconf/pncconf.py:479 +#: src/emc/usr_intf/axis/scripts/axis.py:157 msgid "Home" msgstr "Nullpont" #: src/emc/usr_intf/axis/scripts/axis.py:161 +#: src/emc/usr_intf/axis/scripts/axis.py:157 msgid "Send active axis home" msgstr "Aktuális tengely kiinduló pozicióba" #: src/emc/usr_intf/axis/scripts/axis.py:162 +#: src/emc/usr_intf/axis/scripts/axis.py:158 #, fuzzy msgid "Ctrl-Home" msgstr "Nullpont" #: src/emc/usr_intf/axis/scripts/axis.py:162 +#: src/emc/usr_intf/axis/scripts/axis.py:158 msgid "Home all axes" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:163 +#: src/emc/usr_intf/axis/scripts/axis.py:159 msgid "Shift-Home" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:163 +#: src/emc/usr_intf/axis/scripts/axis.py:159 #, fuzzy msgid "Zero G54 offset for active axis" msgstr "A G54 offszet beállítása az aktiv tengelyen" #: src/emc/usr_intf/axis/scripts/axis.py:164 +#: src/emc/usr_intf/axis/scripts/axis.py:160 msgid "End" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:164 +#: src/emc/usr_intf/axis/scripts/axis.py:160 msgid "Set G54 offset for active axis" msgstr "A G54 offszet beállítása az aktiv tengelyen" #: src/emc/usr_intf/axis/scripts/axis.py:165 +#: src/emc/usr_intf/axis/scripts/axis.py:161 #, fuzzy msgid "Jog active axis" msgstr "3. tengely léptetés" #: src/emc/usr_intf/axis/scripts/axis.py:168 +#: src/emc/usr_intf/axis/scripts/axis.py:164 msgid "Left, Right" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:168 +#: src/emc/usr_intf/axis/scripts/axis.py:164 msgid "Jog first axis" msgstr "1. tengely léptetés" #: src/emc/usr_intf/axis/scripts/axis.py:169 +#: src/emc/usr_intf/axis/scripts/axis.py:165 msgid "Up, Down" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:169 +#: src/emc/usr_intf/axis/scripts/axis.py:165 msgid "Jog second axis" msgstr "2. tengely léptetés" #: src/emc/usr_intf/axis/scripts/axis.py:170 +#: src/emc/usr_intf/axis/scripts/axis.py:166 msgid "Pg Up, Pg Dn" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:170 +#: src/emc/usr_intf/axis/scripts/axis.py:166 msgid "Jog third axis" msgstr "3. tengely léptetés" #: src/emc/usr_intf/axis/scripts/axis.py:171 +#: src/emc/usr_intf/axis/scripts/axis.py:167 msgid "Shift+above jogs" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:171 +#: src/emc/usr_intf/axis/scripts/axis.py:167 msgid "Jog at traverse speed" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:172 +#: src/emc/usr_intf/axis/scripts/axis.py:168 msgid "Jog fourth axis" msgstr "4. tengely léptetés" #: src/emc/usr_intf/axis/scripts/axis.py:175 +#: src/emc/usr_intf/axis/scripts/axis.py:171 msgid "Toggle between Drag and Rotate mode" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:176 +#: src/emc/usr_intf/axis/scripts/axis.py:172 msgid "Left Button" msgstr "Bal egér gomb" #: src/emc/usr_intf/axis/scripts/axis.py:176 +#: src/emc/usr_intf/axis/scripts/axis.py:172 #, fuzzy msgid "Pan, rotate or select line" msgstr "Nézet mozgatás vagy sor kijelölés" #: src/emc/usr_intf/axis/scripts/axis.py:177 +#: src/emc/usr_intf/axis/scripts/axis.py:173 msgid "Shift+Left Button" msgstr "Shift+Bal egér gomb" #: src/emc/usr_intf/axis/scripts/axis.py:177 +#: src/emc/usr_intf/axis/scripts/axis.py:173 #, fuzzy msgid "Rotate or pan" msgstr "Forgatott felül nézet" #: src/emc/usr_intf/axis/scripts/axis.py:178 +#: src/emc/usr_intf/axis/scripts/axis.py:174 msgid "Right Button" msgstr "Jobb egérgomb" #: src/emc/usr_intf/axis/scripts/axis.py:178 #: src/emc/usr_intf/axis/scripts/axis.py:180 #: src/emc/usr_intf/axis/scripts/axis.py:181 +#: src/emc/usr_intf/axis/scripts/axis.py:174 +#: src/emc/usr_intf/axis/scripts/axis.py:176 +#: src/emc/usr_intf/axis/scripts/axis.py:177 msgid "Zoom view" msgstr "Nagyitás" #: src/emc/usr_intf/axis/scripts/axis.py:179 +#: src/emc/usr_intf/axis/scripts/axis.py:175 msgid "Wheel Button" msgstr "Egér görgő gomb" #: src/emc/usr_intf/axis/scripts/axis.py:179 +#: src/emc/usr_intf/axis/scripts/axis.py:175 msgid "Rotate view" msgstr "Forgatott nézet" #: src/emc/usr_intf/axis/scripts/axis.py:180 +#: src/emc/usr_intf/axis/scripts/axis.py:176 msgid "Rotate Wheel" msgstr "Egér görgető kerék" #: src/emc/usr_intf/axis/scripts/axis.py:181 +#: src/emc/usr_intf/axis/scripts/axis.py:177 #, fuzzy msgid "Control+Left Button" msgstr "Bal egér gomb" #: src/emc/usr_intf/axis/scripts/axis.py:184 +#: src/emc/usr_intf/axis/scripts/axis.py:180 msgid "Manual control" msgstr "Kézi vezérlés" #: src/emc/usr_intf/axis/scripts/axis.py:185 +#: src/emc/usr_intf/axis/scripts/axis.py:181 msgid "Code entry (MDI)" msgstr "Kód mező (MDI)" #: src/emc/usr_intf/axis/scripts/axis.py:186 +#: src/emc/usr_intf/axis/scripts/axis.py:182 msgid "Control-M" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:186 +#: src/emc/usr_intf/axis/scripts/axis.py:182 msgid "Clear MDI history" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:187 +#: src/emc/usr_intf/axis/scripts/axis.py:183 msgid "Control-H" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:187 +#: src/emc/usr_intf/axis/scripts/axis.py:183 msgid "Copy selected MDI history elements" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:188 +#: src/emc/usr_intf/axis/scripts/axis.py:184 msgid "to clipboard" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:189 +#: src/emc/usr_intf/axis/scripts/axis.py:185 msgid "Control-Shift-H" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:189 +#: src/emc/usr_intf/axis/scripts/axis.py:185 msgid "Paste clipboard to MDI history" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:190 share/axis/tcl/axis.tcl:1113 #: src/emc/usr_intf/touchy/touchy.glade:508 +#: src/emc/usr_intf/axis/scripts/axis.py:186 msgid "Override Limits" msgstr "Határok módosítása" #: src/emc/usr_intf/axis/scripts/axis.py:192 +#: src/emc/usr_intf/axis/scripts/axis.py:188 msgid "Open program" msgstr "Program betöltés" #: src/emc/usr_intf/axis/scripts/axis.py:193 +#: src/emc/usr_intf/axis/scripts/axis.py:189 msgid "Control-R" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:193 +#: src/emc/usr_intf/axis/scripts/axis.py:189 #, fuzzy msgid "Reload program" msgstr "Program indítás" #: src/emc/usr_intf/axis/scripts/axis.py:194 +#: src/emc/usr_intf/axis/scripts/axis.py:190 msgid "Control-S" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:194 +#: src/emc/usr_intf/axis/scripts/axis.py:190 msgid "Save g-code as" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:195 +#: src/emc/usr_intf/axis/scripts/axis.py:191 msgid "Run program" msgstr "Program indítás" #: src/emc/usr_intf/axis/scripts/axis.py:196 +#: src/emc/usr_intf/axis/scripts/axis.py:192 msgid "Step program" msgstr "Program léptetés" #: src/emc/usr_intf/axis/scripts/axis.py:197 +#: src/emc/usr_intf/axis/scripts/axis.py:193 msgid "Pause program" msgstr "Program szünet" #: src/emc/usr_intf/axis/scripts/axis.py:198 +#: src/emc/usr_intf/axis/scripts/axis.py:194 msgid "Resume program" msgstr "Program folytatása" #: src/emc/usr_intf/axis/scripts/axis.py:199 +#: src/emc/usr_intf/axis/scripts/axis.py:195 #, fuzzy msgid "Stop running program, or" msgstr "Program megszakítása" #: src/emc/usr_intf/axis/scripts/axis.py:200 +#: src/emc/usr_intf/axis/scripts/axis.py:196 msgid "stop loading program preview" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:202 +#: src/emc/usr_intf/axis/scripts/axis.py:198 msgid "Toggle mist" msgstr "Elszívó Ki/Be" #: src/emc/usr_intf/axis/scripts/axis.py:203 +#: src/emc/usr_intf/axis/scripts/axis.py:199 msgid "Toggle flood" msgstr "Hűtés Ki/Be" #: src/emc/usr_intf/axis/scripts/axis.py:204 +#: src/emc/usr_intf/axis/scripts/axis.py:200 msgid "Spindle brake off" msgstr "Fő orsó fék kikapcsolva" #: src/emc/usr_intf/axis/scripts/axis.py:205 +#: src/emc/usr_intf/axis/scripts/axis.py:201 msgid "Shift-B" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:205 +#: src/emc/usr_intf/axis/scripts/axis.py:201 msgid "Spindle brake on" msgstr "Fő orsó fék bekapcsolva" #: src/emc/usr_intf/axis/scripts/axis.py:206 +#: src/emc/usr_intf/axis/scripts/axis.py:202 msgid "Turn spindle clockwise" msgstr "Fő orsó jobbra fordul" #: src/emc/usr_intf/axis/scripts/axis.py:207 +#: src/emc/usr_intf/axis/scripts/axis.py:203 msgid "Turn spindle counterclockwise" msgstr "Fő orsó balra fordul" #: src/emc/usr_intf/axis/scripts/axis.py:208 +#: src/emc/usr_intf/axis/scripts/axis.py:204 msgid "Turn spindle more slowly" msgstr "Fő orsó lassítás" #: src/emc/usr_intf/axis/scripts/axis.py:209 +#: src/emc/usr_intf/axis/scripts/axis.py:205 msgid "Turn spindle more quickly" msgstr "Fő orsó gyorsítás" #: src/emc/usr_intf/axis/scripts/axis.py:211 +#: src/emc/usr_intf/axis/scripts/axis.py:207 msgid "Control-K" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:211 +#: src/emc/usr_intf/axis/scripts/axis.py:207 msgid "Clear live plot" msgstr "Grafikus szimuláció törlése" #: src/emc/usr_intf/axis/scripts/axis.py:212 +#: src/emc/usr_intf/axis/scripts/axis.py:208 msgid "Cycle among preset views" msgstr "Ciklus előre beállított nézetek között" #: src/emc/usr_intf/axis/scripts/axis.py:213 +#: src/emc/usr_intf/axis/scripts/axis.py:209 #, fuzzy msgid "Cycle among preview, DRO, and user tabs" msgstr "Ciklus előre beállított nézetek között" #: src/emc/usr_intf/axis/scripts/axis.py:215 +#: src/emc/usr_intf/axis/scripts/axis.py:211 msgid "Ctrl-Space" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:215 +#: src/emc/usr_intf/axis/scripts/axis.py:211 msgid "Clear notifications" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:836 +#: src/emc/usr_intf/axis/scripts/axis.py:828 #, python-format msgid "Unknown tool %d" msgstr "Szerszám %d ismeretlen" #: src/emc/usr_intf/axis/scripts/axis.py:838 +#: src/emc/usr_intf/axis/scripts/axis.py:830 msgid "No tool" msgstr "Nincs szerszám" #: src/emc/usr_intf/axis/scripts/axis.py:840 +#: src/emc/usr_intf/axis/scripts/axis.py:832 #, fuzzy, python-format msgid "Tool %(tool)d, offset %(zo)g, diameter %(dia)g" msgstr "Szerszám %d, eltolás %g, atmerő %g" #: src/emc/usr_intf/axis/scripts/axis.py:842 +#: src/emc/usr_intf/axis/scripts/axis.py:834 #, python-format msgid "Tool %(tool)d, zo %(zo)g, xo %(xo)g, dia %(dia)g" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1013 +#: src/emc/usr_intf/axis/scripts/axis.py:1005 msgid "Filtering..." msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1073 +#: src/emc/usr_intf/axis/scripts/axis.py:1065 #, fuzzy msgid "Filter failed" msgstr "Program_szűrő %r sikertelen" #: src/emc/usr_intf/axis/scripts/axis.py:1074 +#: src/emc/usr_intf/axis/scripts/axis.py:1066 #, python-format msgid "" "The program %(program)r exited with code %(code)d. Any error messages it " @@ -3751,11 +3854,13 @@ msgid "" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1139 +#: src/emc/usr_intf/axis/scripts/axis.py:1127 #, python-format msgid "G-Code error in %s" msgstr "G-kód hiba %s -ben" #: src/emc/usr_intf/axis/scripts/axis.py:1140 +#: src/emc/usr_intf/axis/scripts/axis.py:1128 #, fuzzy, python-format msgid "" "Near line %(seq)d of %(f)s:\n" @@ -3767,14 +3872,18 @@ msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1292 #: src/emc/usr_intf/axis/scripts/axis.py:2725 share/axis/tcl/axis.tcl:1092 #: share/axis/tcl/axis.tcl:1094 share/axis/tcl/axis.tcl:2144 +#: src/emc/usr_intf/axis/scripts/axis.py:1279 +#: src/emc/usr_intf/axis/scripts/axis.py:2712 msgid "Continuous" msgstr "Folytonos" #: src/emc/usr_intf/axis/scripts/axis.py:1403 +#: src/emc/usr_intf/axis/scripts/axis.py:1390 msgid "Ok" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1546 +#: src/emc/usr_intf/axis/scripts/axis.py:1533 msgid "T Tool Table" msgstr "" @@ -3782,114 +3891,142 @@ msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1730 #: src/emc/usr_intf/stepconf/stepconf.py:1691 #: src/emc/usr_intf/stepconf/stepconf.py:2235 +#: src/emc/usr_intf/axis/scripts/axis.py:1544 +#: src/emc/usr_intf/axis/scripts/axis.py:1717 msgid "in" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1560 +#: src/emc/usr_intf/axis/scripts/axis.py:1547 msgid " radius" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1562 +#: src/emc/usr_intf/axis/scripts/axis.py:1549 msgid " diameter" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1563 +#: src/emc/usr_intf/axis/scripts/axis.py:1550 msgid "°" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1572 +#: src/emc/usr_intf/axis/scripts/axis.py:1559 msgid "Coordinate System:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1588 +#: src/emc/usr_intf/axis/scripts/axis.py:1575 msgid "fixture" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1589 +#: src/emc/usr_intf/axis/scripts/axis.py:1576 msgid "workpiece" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1605 +#: src/emc/usr_intf/axis/scripts/axis.py:1592 msgid "Name:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1605 +#: src/emc/usr_intf/axis/scripts/axis.py:1592 #, fuzzy msgid "Size:" msgstr "Fő orsó:" #: src/emc/usr_intf/axis/scripts/axis.py:1606 +#: src/emc/usr_intf/axis/scripts/axis.py:1593 msgid "Tool order:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1606 +#: src/emc/usr_intf/axis/scripts/axis.py:1593 msgid "Rapid distance:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1607 +#: src/emc/usr_intf/axis/scripts/axis.py:1594 msgid "Feed distance:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1607 +#: src/emc/usr_intf/axis/scripts/axis.py:1594 msgid "Total distance:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1608 +#: src/emc/usr_intf/axis/scripts/axis.py:1595 msgid "Run time:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1608 +#: src/emc/usr_intf/axis/scripts/axis.py:1595 msgid "X bounds:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1609 +#: src/emc/usr_intf/axis/scripts/axis.py:1596 msgid "Y bounds:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1609 +#: src/emc/usr_intf/axis/scripts/axis.py:1596 msgid "Z bounds:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1610 +#: src/emc/usr_intf/axis/scripts/axis.py:1597 msgid "A bounds:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1610 +#: src/emc/usr_intf/axis/scripts/axis.py:1597 msgid "B bounds:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1611 +#: src/emc/usr_intf/axis/scripts/axis.py:1598 msgid "C bounds:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1635 +#: src/emc/usr_intf/axis/scripts/axis.py:1622 #, python-format msgid "Program exceeds machine minimum on axis %s" msgstr "A program meghaladja a gép minimumat: %s tengelyen" #: src/emc/usr_intf/axis/scripts/axis.py:1638 +#: src/emc/usr_intf/axis/scripts/axis.py:1625 #, python-format msgid "Program exceeds machine maximum on axis %s" msgstr "A program meghaladja a gép maximumat: %s tengelyen" #: src/emc/usr_intf/axis/scripts/axis.py:1643 +#: src/emc/usr_intf/axis/scripts/axis.py:1630 msgid "Program exceeds machine limits" msgstr "A program túllép a gép korlátain" #: src/emc/usr_intf/axis/scripts/axis.py:1646 +#: src/emc/usr_intf/axis/scripts/axis.py:1633 msgid "Run Anyway" msgstr "Program folytatás" #: src/emc/usr_intf/axis/scripts/axis.py:1708 +#: src/emc/usr_intf/axis/scripts/axis.py:1695 msgid "No file loaded" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1716 +#: src/emc/usr_intf/axis/scripts/axis.py:1703 #, python-format msgid "generated from %s" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1722 +#: src/emc/usr_intf/axis/scripts/axis.py:1709 #, python-format msgid "" "%(size)s bytes\n" @@ -3897,92 +4034,113 @@ msgid "" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1748 +#: src/emc/usr_intf/axis/scripts/axis.py:1735 #, python-format msgid "%.1f minutes" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1750 +#: src/emc/usr_intf/axis/scripts/axis.py:1737 #, fuzzy, python-format msgid "%d seconds" msgstr "2. tengely léptetés" #: src/emc/usr_intf/axis/scripts/axis.py:1758 +#: src/emc/usr_intf/axis/scripts/axis.py:1745 #, python-format msgid "%(a)f to %(b)f = %(diff)f %(units)s" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1759 +#: src/emc/usr_intf/axis/scripts/axis.py:1746 #, fuzzy msgid "G-Code Properties" msgstr "G-kód hiba %s -ben" #: src/emc/usr_intf/axis/scripts/axis.py:1883 +#: src/emc/usr_intf/axis/scripts/axis.py:1870 msgid "All machinable files" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1884 #: src/emc/usr_intf/axis/scripts/axis.py:2464 +#: src/emc/usr_intf/axis/scripts/axis.py:1871 +#: src/emc/usr_intf/axis/scripts/axis.py:2451 msgid "rs274ngc files" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:1899 +#: src/emc/usr_intf/axis/scripts/axis.py:1886 msgid "axis cannot accept remote command while running" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:2255 +#: src/emc/usr_intf/axis/scripts/axis.py:2242 msgid "Axis is already homed, are you sure you want to re-home?" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:2268 +#: src/emc/usr_intf/axis/scripts/axis.py:2255 msgid "This axis is already homed, are you sure you want to re-home?" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:2308 share/axis/tcl/axis.tcl:1108 +#: src/emc/usr_intf/axis/scripts/axis.py:2295 msgid "Touch Off" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:2309 +#: src/emc/usr_intf/axis/scripts/axis.py:2296 #, python-format msgid "Enter %s coordinate relative to %%s:" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:2476 +#: src/emc/usr_intf/axis/scripts/axis.py:2463 msgid "Error saving file" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:2859 #: src/emc/usr_intf/touchy/touchy.glade:577 +#: src/emc/usr_intf/axis/scripts/axis.py:2845 #, fuzzy msgid "Home All" msgstr "Nullpont" #: src/emc/usr_intf/axis/scripts/axis.py:2861 +#: src/emc/usr_intf/axis/scripts/axis.py:2847 msgid "Home all axes [Ctrl-Home]" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:2864 +#: src/emc/usr_intf/axis/scripts/axis.py:2850 msgid "Home All Axes" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:2871 +#: src/emc/usr_intf/axis/scripts/axis.py:2855 msgid "Unhome All Axes" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:2895 +#: src/emc/usr_intf/axis/scripts/axis.py:2879 #, python-format msgid "Home Axis _%s" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:2897 +#: src/emc/usr_intf/axis/scripts/axis.py:2881 #, python-format msgid "Unhome Axis _%s" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:3040 +#: src/emc/usr_intf/axis/scripts/axis.py:3024 msgid "Run from here" msgstr "" #: src/emc/usr_intf/axis/scripts/axis.py:3335 +#: src/emc/usr_intf/axis/scripts/axis.py:3319 msgid "Error in ~/.axisrc" msgstr "" @@ -11877,85 +12035,91 @@ msgid "gtk-cancel" msgstr "Mégsem" #: src/emc/task/emctaskmain.cc:467 src/emc/task/emctaskmain.cc:500 +#: src/emc/task/emctaskmain.cc:427 src/emc/task/emctaskmain.cc:460 #, fuzzy, c-format msgid "%s exceeds +X limit" msgstr "A program túllép a gép korlátain" #: src/emc/task/emctaskmain.cc:472 src/emc/task/emctaskmain.cc:505 +#: src/emc/task/emctaskmain.cc:432 src/emc/task/emctaskmain.cc:465 #, fuzzy, c-format msgid "%s exceeds +Y limit" msgstr "A program túllép a gép korlátain" #: src/emc/task/emctaskmain.cc:477 src/emc/task/emctaskmain.cc:510 +#: src/emc/task/emctaskmain.cc:437 src/emc/task/emctaskmain.cc:470 #, fuzzy, c-format msgid "%s exceeds +Z limit" msgstr "A program túllép a gép korlátain" #: src/emc/task/emctaskmain.cc:482 src/emc/task/emctaskmain.cc:515 +#: src/emc/task/emctaskmain.cc:442 src/emc/task/emctaskmain.cc:475 #, fuzzy, c-format msgid "%s exceeds -X limit" msgstr "A program túllép a gép korlátain" #: src/emc/task/emctaskmain.cc:487 src/emc/task/emctaskmain.cc:520 +#: src/emc/task/emctaskmain.cc:447 src/emc/task/emctaskmain.cc:480 #, fuzzy, c-format msgid "%s exceeds -Y limit" msgstr "A program túllép a gép korlátain" #: src/emc/task/emctaskmain.cc:492 src/emc/task/emctaskmain.cc:525 +#: src/emc/task/emctaskmain.cc:452 src/emc/task/emctaskmain.cc:485 #, fuzzy, c-format msgid "%s exceeds -Z limit" msgstr "A program túllép a gép korlátain" -#: src/emc/task/emctaskmain.cc:853 +#: src/emc/task/emctaskmain.cc:853 src/emc/task/emctaskmain.cc:810 #, c-format msgid "" "command (%s) cannot be executed until the machine is out of E-stop and " "turned on" msgstr "" -#: src/emc/task/emctaskmain.cc:973 +#: src/emc/task/emctaskmain.cc:973 src/emc/task/emctaskmain.cc:930 #, c-format msgid "can't do that (%s) in manual mode" msgstr "" -#: src/emc/task/emctaskmain.cc:1072 +#: src/emc/task/emctaskmain.cc:1072 src/emc/task/emctaskmain.cc:1027 #, c-format msgid "can't do that (%s) in auto mode with the interpreter idle" msgstr "" -#: src/emc/task/emctaskmain.cc:1132 +#: src/emc/task/emctaskmain.cc:1132 src/emc/task/emctaskmain.cc:1087 #, c-format msgid "can't do that (%s) in auto mode with the interpreter reading" msgstr "" -#: src/emc/task/emctaskmain.cc:1216 +#: src/emc/task/emctaskmain.cc:1216 src/emc/task/emctaskmain.cc:1169 #, c-format msgid "can't do that (%s) in auto mode with the interpreter paused" msgstr "" -#: src/emc/task/emctaskmain.cc:1278 +#: src/emc/task/emctaskmain.cc:1278 src/emc/task/emctaskmain.cc:1231 #, c-format msgid "can't do that (%s) in auto mode with the interpreter waiting" msgstr "" -#: src/emc/task/emctaskmain.cc:1370 +#: src/emc/task/emctaskmain.cc:1370 src/emc/task/emctaskmain.cc:1321 #, c-format msgid "can't do that (%s) in MDI mode" msgstr "" -#: src/emc/task/emctaskmain.cc:2015 +#: src/emc/task/emctaskmain.cc:2015 src/emc/task/emctaskmain.cc:1943 msgid "Can't switch mode while mode is AUTO and interpreter is not IDLE" msgstr "" -#: src/emc/task/emctaskmain.cc:2084 +#: src/emc/task/emctaskmain.cc:2084 src/emc/task/emctaskmain.cc:2012 msgid "Can't issue MDI command when not homed" msgstr "" -#: src/emc/task/emctaskmain.cc:2089 +#: src/emc/task/emctaskmain.cc:2089 src/emc/task/emctaskmain.cc:2017 msgid "Must be in MDI mode to issue MDI command" msgstr "" -#: src/emc/task/emctaskmain.cc:2151 +#: src/emc/task/emctaskmain.cc:2151 src/emc/task/emctaskmain.cc:2078 msgid "Can't run a program when not homed" msgstr "" @@ -11971,61 +12135,61 @@ msgid "" "rel_err=%.4f%%" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:90 +#: src/emc/rs274ngc/interp_check.cc:90 src/emc/rs274ngc/interp_check.cc:89 msgid "G4 not allowed with G2 or G3 because they both use P" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:93 +#: src/emc/rs274ngc/interp_check.cc:93 src/emc/rs274ngc/interp_check.cc:92 msgid "Line with G10 does not have L1, L10, L11, L2, or L20" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:94 +#: src/emc/rs274ngc/interp_check.cc:94 src/emc/rs274ngc/interp_check.cc:93 msgid "P value not an integer with G10" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:95 +#: src/emc/rs274ngc/interp_check.cc:95 src/emc/rs274ngc/interp_check.cc:94 msgid "P value out of range (0-9) with G10 L2 or L20" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:96 +#: src/emc/rs274ngc/interp_check.cc:96 src/emc/rs274ngc/interp_check.cc:95 msgid "P value out of range with G10 L1 or G10 L10" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:100 +#: src/emc/rs274ngc/interp_check.cc:100 src/emc/rs274ngc/interp_check.cc:99 msgid "Between G5.2 and G5.3 codes, only additional G5.2 codes are allowed." msgstr "" -#: src/emc/rs274ngc/interp_check.cc:258 +#: src/emc/rs274ngc/interp_check.cc:258 src/emc/rs274ngc/interp_check.cc:248 msgid "D word with no G41, G41.1, G42, G42.1, or G96 to use it" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:264 +#: src/emc/rs274ngc/interp_check.cc:264 src/emc/rs274ngc/interp_check.cc:254 msgid "E word with no G76, M66, M67 or M68 to use it" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:269 +#: src/emc/rs274ngc/interp_check.cc:269 src/emc/rs274ngc/interp_check.cc:259 msgid "H word with no G43 or G76 to use it" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:275 +#: src/emc/rs274ngc/interp_check.cc:275 src/emc/rs274ngc/interp_check.cc:265 msgid "I word with no G2, G3, G5, G5.1, G10, G76, or G87 to use it" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:281 +#: src/emc/rs274ngc/interp_check.cc:281 src/emc/rs274ngc/interp_check.cc:271 msgid "J word with no G2, G3, G5, G5.1, G10, G76 or G87 to use it" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:287 +#: src/emc/rs274ngc/interp_check.cc:287 src/emc/rs274ngc/interp_check.cc:277 msgid "K word with no G2, G3, G33, G33.1, G76, or G87 to use it" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:297 +#: src/emc/rs274ngc/interp_check.cc:297 src/emc/rs274ngc/interp_check.cc:287 msgid "" "L word with no G10, cutter compensation, canned cycle, digital/analog input, " "or NURBS code" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:309 +#: src/emc/rs274ngc/interp_check.cc:309 src/emc/rs274ngc/interp_check.cc:299 msgid "" "P word with no G2 G3 G4 G10 G64 G5 G5.2 G76 G82 G86 G88 G89 or M50 M51 M52 " "M53 M62 M63 M64 M65 M66 or user M code to use it" @@ -12039,7 +12203,7 @@ msgstr "" msgid "P value must be 0,1,or 2 with M19" msgstr "" -#: src/emc/rs274ngc/interp_check.cc:318 +#: src/emc/rs274ngc/interp_check.cc:318 src/emc/rs274ngc/interp_check.cc:304 msgid "P value should be 1 or greater with G2 or G3" msgstr "" @@ -12116,6 +12280,7 @@ msgstr "" #: src/emc/rs274ngc/interp_convert.cc:382 #: src/emc/rs274ngc/interp_convert.cc:4266 +#: src/emc/rs274ngc/interp_convert.cc:3909 msgid "Cannot feed with zero spindle speed in feed per rev mode" msgstr "" @@ -12136,6 +12301,7 @@ msgstr "" #: src/emc/rs274ngc/interp_convert.cc:868 #: src/emc/rs274ngc/interp_convert.cc:878 src/emc/rs274ngc/interp_queue.cc:592 +#: src/emc/rs274ngc/interp_queue.cc:541 msgid "" "Arc move in concave corner cannot be reached by the tool without gouging" msgstr "" @@ -12156,39 +12322,49 @@ msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3733 #: src/emc/rs274ngc/interp_convert.cc:3736 #: src/emc/rs274ngc/interp_convert.cc:3739 src/emc/rs274ngc/interp_find.cc:97 +#: src/emc/rs274ngc/interp_convert.cc:3376 +#: src/emc/rs274ngc/interp_convert.cc:3379 +#: src/emc/rs274ngc/interp_convert.cc:3382 #, c-format msgid "Invalid absolute position %5.2f for wrapped rotary axis %c" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:1494 +#: src/emc/rs274ngc/interp_convert.cc:1466 msgid "Cannot change control mode with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:1607 +#: src/emc/rs274ngc/interp_convert.cc:1579 msgid "Cannot change coordinate systems with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:1851 +#: src/emc/rs274ngc/interp_convert.cc:1823 #, c-format msgid "G%d.1 with no D word" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:1854 +#: src/emc/rs274ngc/interp_convert.cc:1826 #, c-format msgid "G%d.1 with L word, but plane is not G18" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:1865 +#: src/emc/rs274ngc/interp_convert.cc:1837 #, c-format msgid "G%d requires D word to be a whole number" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:1872 +#: src/emc/rs274ngc/interp_convert.cc:1844 #, c-format msgid "G%d with lathe tool, but plane is not G18" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2271 +#: src/emc/rs274ngc/interp_convert.cc:2228 msgid "Cannot set reference point with cutter compensation in effect" msgstr "" @@ -12219,59 +12395,74 @@ msgid "M7x: restore_settings failed executing: '%s': %s" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2885 +#: src/emc/rs274ngc/interp_convert.cc:2628 msgid "Cannot set motion output with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2886 +#: src/emc/rs274ngc/interp_convert.cc:2629 msgid "No valid P word with M62" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2890 +#: src/emc/rs274ngc/interp_convert.cc:2633 msgid "Cannot set motion digital output with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2891 +#: src/emc/rs274ngc/interp_convert.cc:2634 msgid "No valid P word with M63" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2895 #: src/emc/rs274ngc/interp_convert.cc:2900 +#: src/emc/rs274ngc/interp_convert.cc:2638 +#: src/emc/rs274ngc/interp_convert.cc:2643 msgid "Cannot set auxiliary digital output with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2896 +#: src/emc/rs274ngc/interp_convert.cc:2639 msgid "No valid P word with M64" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2901 +#: src/emc/rs274ngc/interp_convert.cc:2644 msgid "No valid P word with M65" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2931 +#: src/emc/rs274ngc/interp_convert.cc:2673 msgid "invalid P-word with M66" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2946 +#: src/emc/rs274ngc/interp_convert.cc:2688 msgid "Cannot wait for digital input with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2958 +#: src/emc/rs274ngc/interp_convert.cc:2700 msgid "Cannot wait for analog input with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2973 +#: src/emc/rs274ngc/interp_convert.cc:2714 msgid "Cannot set motion analog output with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2974 +#: src/emc/rs274ngc/interp_convert.cc:2715 msgid "Invalid analog index with M67" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2980 +#: src/emc/rs274ngc/interp_convert.cc:2721 msgid "Cannot set auxiliary analog output with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:2981 +#: src/emc/rs274ngc/interp_convert.cc:2722 msgid "Invalid analog index with M68" msgstr "" @@ -12292,6 +12483,11 @@ msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3188 #: src/emc/rs274ngc/interp_convert.cc:3202 #: src/emc/rs274ngc/interp_convert.cc:3216 +#: src/emc/rs274ngc/interp_convert.cc:2806 +#: src/emc/rs274ngc/interp_convert.cc:2823 +#: src/emc/rs274ngc/interp_convert.cc:2837 +#: src/emc/rs274ngc/interp_convert.cc:2851 +#: src/emc/rs274ngc/interp_convert.cc:2865 msgid "Cannot enable overrides with cutter radius compensation on" msgstr "" @@ -12300,12 +12496,20 @@ msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3193 #: src/emc/rs274ngc/interp_convert.cc:3207 #: src/emc/rs274ngc/interp_convert.cc:3221 +#: src/emc/rs274ngc/interp_convert.cc:2813 +#: src/emc/rs274ngc/interp_convert.cc:2828 +#: src/emc/rs274ngc/interp_convert.cc:2842 +#: src/emc/rs274ngc/interp_convert.cc:2856 +#: src/emc/rs274ngc/interp_convert.cc:2870 msgid "Cannot disable overrides with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3325 #: src/emc/rs274ngc/interp_convert.cc:3326 #: src/emc/rs274ngc/interp_convert.cc:3327 +#: src/emc/rs274ngc/interp_convert.cc:2970 +#: src/emc/rs274ngc/interp_convert.cc:2971 +#: src/emc/rs274ngc/interp_convert.cc:2972 #, c-format msgid "Indexing axis %c can only be moved with G0" msgstr "" @@ -12313,122 +12517,147 @@ msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3334 #: src/emc/rs274ngc/interp_convert.cc:3336 #: src/emc/rs274ngc/interp_convert.cc:3338 +#: src/emc/rs274ngc/interp_convert.cc:2979 +#: src/emc/rs274ngc/interp_convert.cc:2981 +#: src/emc/rs274ngc/interp_convert.cc:2983 #, c-format msgid "Indexing axis %c can only be moved alone" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3433 +#: src/emc/rs274ngc/interp_convert.cc:3076 msgid "Cannot probe with feed per rev mode" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3481 +#: src/emc/rs274ngc/interp_convert.cc:3124 msgid "Cannot change retract mode with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3515 +#: src/emc/rs274ngc/interp_convert.cc:3158 msgid "G10 L1 without offsets has no effect" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3621 +#: src/emc/rs274ngc/interp_convert.cc:3264 msgid "Q number in G10 is not an integer" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3622 +#: src/emc/rs274ngc/interp_convert.cc:3265 msgid "Invalid tool orientation" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3721 +#: src/emc/rs274ngc/interp_convert.cc:3364 msgid "I J words not allowed with G10 L2" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3742 +#: src/emc/rs274ngc/interp_convert.cc:3385 msgid "" "Cannot change the active coordinate system with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:3750 +#: src/emc/rs274ngc/interp_convert.cc:3393 msgid "R not allowed in G10 L20" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4323 +#: src/emc/rs274ngc/interp_convert.cc:3966 msgid "Spindle not turning in G33" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4333 +#: src/emc/rs274ngc/interp_convert.cc:3976 msgid "Spindle not turning in G33.1" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4376 +#: src/emc/rs274ngc/interp_convert.cc:4019 msgid "BUG: An axis incorrectly moved along with an indexer" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4389 +#: src/emc/rs274ngc/interp_convert.cc:4032 msgid "BUG: trying to index incorrect axis" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4481 +#: src/emc/rs274ngc/interp_convert.cc:4124 msgid "Cannot use G76 threading cycle with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4484 +#: src/emc/rs274ngc/interp_convert.cc:4127 msgid "In G76, I must not be 0" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4486 +#: src/emc/rs274ngc/interp_convert.cc:4129 msgid "In G76, J must be greater than 0" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4488 +#: src/emc/rs274ngc/interp_convert.cc:4131 msgid "In G76, K must be greater than J" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4631 +#: src/emc/rs274ngc/interp_convert.cc:4274 msgid "" "Length of cutter compensation entry move is not greater than the tool radius" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4850 +#: src/emc/rs274ngc/interp_convert.cc:4493 msgid "Zero degree inside corner is invalid for cutter compensation" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4888 #: src/emc/rs274ngc/interp_convert.cc:4896 +#: src/emc/rs274ngc/interp_convert.cc:4531 +#: src/emc/rs274ngc/interp_convert.cc:4539 msgid "" "Arc to straight motion makes a corner the compensated tool can't fit in " "without gouging" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:4980 +#: src/emc/rs274ngc/interp_convert.cc:4623 msgid "Cannot change tools with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/interp_convert.cc:5101 +#: src/emc/rs274ngc/interp_convert.cc:4743 msgid "Cannot change tool offset with cutter radius compensation on" msgstr "" -#: src/emc/rs274ngc/interp_queue.cc:590 +#: src/emc/rs274ngc/interp_queue.cc:590 src/emc/rs274ngc/interp_queue.cc:539 #, c-format msgid "" "BUG: cutter compensation has generated an invalid arc with mismatched radii " "r1 %f r2 %f\n" msgstr "" -#: src/emc/rs274ngc/interp_queue.cc:612 +#: src/emc/rs274ngc/interp_queue.cc:612 src/emc/rs274ngc/interp_queue.cc:561 msgid "BUG: Unsupported plane in cutter compensation" msgstr "" -#: src/emc/rs274ngc/interp_queue.cc:622 +#: src/emc/rs274ngc/interp_queue.cc:622 src/emc/rs274ngc/interp_queue.cc:571 msgid "" "Straight traverse in concave corner cannot be reached by the tool without " "gouging" msgstr "" -#: src/emc/rs274ngc/interp_queue.cc:650 +#: src/emc/rs274ngc/interp_queue.cc:650 src/emc/rs274ngc/interp_queue.cc:599 #, c-format msgid "BUG: Unsupported plane [%d] in cutter compensation" msgstr "" -#: src/emc/rs274ngc/interp_queue.cc:661 +#: src/emc/rs274ngc/interp_queue.cc:661 src/emc/rs274ngc/interp_queue.cc:610 msgid "" "Straight feed in concave corner cannot be reached by the tool without gouging" msgstr "" @@ -12450,22 +12679,27 @@ msgid "G17 canned cycle is not possible on a machine without Z axis" msgstr "" #: src/emc/rs274ngc/interp_cycles.cc:1004 +#: src/emc/rs274ngc/interp_cycles.cc:1001 msgid "G17.1 canned cycle is not possible on a machine without W axis" msgstr "" #: src/emc/rs274ngc/interp_cycles.cc:1220 +#: src/emc/rs274ngc/interp_cycles.cc:1217 msgid "G19 canned cycle is not possible on a machine without X axis" msgstr "" #: src/emc/rs274ngc/interp_cycles.cc:1388 +#: src/emc/rs274ngc/interp_cycles.cc:1385 msgid "G19.1 canned cycle is not possible on a machine without U axis" msgstr "" #: src/emc/rs274ngc/interp_cycles.cc:1613 +#: src/emc/rs274ngc/interp_cycles.cc:1610 msgid "G18 canned cycle is not possible on a machine without Y axis" msgstr "" #: src/emc/rs274ngc/interp_cycles.cc:1780 +#: src/emc/rs274ngc/interp_cycles.cc:1777 msgid "G18.1 canned cycle is not possible on a machine without V axis" msgstr "" @@ -12498,106 +12732,115 @@ msgid "Requested tool %d not found in the tool table" msgstr "" #: src/emc/rs274ngc/interp_internal.cc:154 +#: src/emc/rs274ngc/interp_internal.cc:151 msgid "Cannot use polar coordinate on a machine lacking X or Y axes" msgstr "" #: src/emc/rs274ngc/interp_internal.cc:155 +#: src/emc/rs274ngc/interp_internal.cc:152 msgid "Cannot use polar coordinate except in G17 plane" msgstr "" #: src/emc/rs274ngc/interp_internal.cc:156 +#: src/emc/rs274ngc/interp_internal.cc:153 msgid "Cannot specify both polar coordinate and X word" msgstr "" #: src/emc/rs274ngc/interp_internal.cc:157 +#: src/emc/rs274ngc/interp_internal.cc:154 msgid "Cannot specify both polar coordinate and Y word" msgstr "" #: src/emc/rs274ngc/interp_internal.cc:178 #: src/emc/rs274ngc/interp_internal.cc:190 #: src/emc/rs274ngc/interp_internal.cc:203 +#: src/emc/rs274ngc/interp_internal.cc:175 +#: src/emc/rs274ngc/interp_internal.cc:187 +#: src/emc/rs274ngc/interp_internal.cc:200 msgid "Polar coordinates can only be used for motion" msgstr "" #: src/emc/rs274ngc/interp_read.cc:1143 src/emc/rs274ngc/interp_read.cc:1147 +#: src/emc/rs274ngc/interp_read.cc:1112 src/emc/rs274ngc/interp_read.cc:1116 #, c-format msgid "Bad character '\\%03o' used" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:1147 +#: src/emc/rs274ngc/interp_read.cc:1147 src/emc/rs274ngc/interp_read.cc:1116 #, c-format msgid "Bad character '%c' used" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:1671 +#: src/emc/rs274ngc/interp_read.cc:1671 src/emc/rs274ngc/interp_read.cc:1623 msgid "Left bracket missing after 'while'" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:1686 +#: src/emc/rs274ngc/interp_read.cc:1686 src/emc/rs274ngc/interp_read.cc:1638 msgid "Left bracket missing after 'repeat'" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:1701 +#: src/emc/rs274ngc/interp_read.cc:1701 src/emc/rs274ngc/interp_read.cc:1653 msgid "Left bracket missing after 'if'" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:1716 +#: src/emc/rs274ngc/interp_read.cc:1716 src/emc/rs274ngc/interp_read.cc:1668 msgid "Left bracket missing after 'elseif'" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:1919 +#: src/emc/rs274ngc/interp_read.cc:1919 src/emc/rs274ngc/interp_read.cc:2174 msgid "Cannot read current position with cutter radius compensation on" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:1934 +#: src/emc/rs274ngc/interp_read.cc:1934 src/emc/rs274ngc/interp_read.cc:2189 msgid "Expected # reading parameter" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:1936 +#: src/emc/rs274ngc/interp_read.cc:1936 src/emc/rs274ngc/interp_read.cc:2191 msgid "Expected ] reading bracketed parameter" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:2608 +#: src/emc/rs274ngc/interp_read.cc:2608 src/emc/rs274ngc/interp_read.cc:2881 #, c-format msgid "bad number format (conversion failed) parsing '%s'" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:2609 +#: src/emc/rs274ngc/interp_read.cc:2609 src/emc/rs274ngc/interp_read.cc:2882 #, c-format msgid "bad number format (trailing characters) parsing '%s'" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:2699 +#: src/emc/rs274ngc/interp_read.cc:2699 src/emc/rs274ngc/interp_read.cc:2972 msgid "Calculation resulted in 'not a number'" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:2701 +#: src/emc/rs274ngc/interp_read.cc:2701 src/emc/rs274ngc/interp_read.cc:2974 msgid "Calculation resulted in 'infinity'" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:2994 +#: src/emc/rs274ngc/interp_read.cc:2994 src/emc/rs274ngc/interp_read.cc:3268 #, c-format msgid "EOF in file:%s seeking o-word: o<%s> from line: %d" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:3106 +#: src/emc/rs274ngc/interp_read.cc:3106 src/emc/rs274ngc/interp_read.cc:3391 msgid "Multiple U words on one line" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:3122 +#: src/emc/rs274ngc/interp_read.cc:3122 src/emc/rs274ngc/interp_read.cc:3407 msgid "Multiple V words on one line" msgstr "" -#: src/emc/rs274ngc/interp_read.cc:3138 +#: src/emc/rs274ngc/interp_read.cc:3138 src/emc/rs274ngc/interp_read.cc:3423 msgid "Multiple W words on one line" msgstr "" -#: src/emc/rs274ngc/interp_o_word.cc:95 +#: src/emc/rs274ngc/interp_o_word.cc:95 src/emc/rs274ngc/interp_o_word.cc:104 #, c-format msgid "File:%s line:%d redefining sub: o|%s| already defined in file:%s" msgstr "" #: src/emc/rs274ngc/interp_namedparams.cc:161 +#: src/emc/rs274ngc/interp_read.cc:2093 #, c-format msgid "Named parameter #<%s> not defined" msgstr "" @@ -12623,6 +12866,7 @@ msgid "fetch_hal_param: hal_ready(): %d" msgstr "" #: src/emc/rs274ngc/interp_namedparams.cc:370 +#: src/emc/rs274ngc/interp_read.cc:1889 src/emc/rs274ngc/interp_read.cc:1932 #, c-format msgid "Internal error: Could not assign #<%s>" msgstr "" @@ -12638,10 +12882,11 @@ msgid "BUG: lookup_named_param(%s): unhandled index=%fn" msgstr "" #: src/emc/rs274ngc/rs274ngc_pre.cc:1269 src/emc/rs274ngc/rs274ngc_pre.cc:1344 +#: src/emc/rs274ngc/rs274ngc_pre.cc:897 msgid "Queue is not empty after tool change" msgstr "" -#: src/emc/rs274ngc/rs274ngc_pre.cc:1648 +#: src/emc/rs274ngc/rs274ngc_pre.cc:1648 src/emc/rs274ngc/rs274ngc_pre.cc:1145 #, c-format msgid "Unable to open parameter file: '%s'" msgstr "" @@ -13313,123 +13558,153 @@ msgid "Bug: call stack underrun" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:170 +#: src/emc/rs274ngc/rs274ngc_return.hh:169 msgid "Unknown control command in o word" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:171 +#: src/emc/rs274ngc/rs274ngc_return.hh:170 msgid "Too many oword labels" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:172 +#: src/emc/rs274ngc/rs274ngc_return.hh:171 #, fuzzy msgid "Unknown oword number" msgstr "Szerszám %d ismeretlen" #: src/emc/rs274ngc/rs274ngc_return.hh:173 +#: src/emc/rs274ngc/rs274ngc_return.hh:172 msgid "Nested subroutine definition" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:174 +#: src/emc/rs274ngc/rs274ngc_return.hh:173 msgid "Not in subroutine definition" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:175 +#: src/emc/rs274ngc/rs274ngc_return.hh:174 msgid "File not open" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:176 +#: src/emc/rs274ngc/rs274ngc_return.hh:175 msgid "Need tool prepared -Txx- for toolchange" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:177 +#: src/emc/rs274ngc/rs274ngc_return.hh:176 msgid "Cannot change planes with cutter radius compensation on" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:178 +#: src/emc/rs274ngc/rs274ngc_return.hh:177 msgid "Cutter radius compensation allowed only in XY, XZ planes" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:179 +#: src/emc/rs274ngc/rs274ngc_return.hh:178 msgid "P word missing with G76" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:180 +#: src/emc/rs274ngc/rs274ngc_return.hh:179 msgid "I J or K words missing with G76" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:181 +#: src/emc/rs274ngc/rs274ngc_return.hh:180 msgid "Cannot move rotary axes with G76" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:182 +#: src/emc/rs274ngc/rs274ngc_return.hh:181 msgid "Multiple e words on one line" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:183 +#: src/emc/rs274ngc/rs274ngc_return.hh:182 msgid "Named parameter not terminated" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:184 +#: src/emc/rs274ngc/rs274ngc_return.hh:183 msgid "Out of memory" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:185 +#: src/emc/rs274ngc/rs274ngc_return.hh:184 msgid "S word missing with G96" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:186 +#: src/emc/rs274ngc/rs274ngc_return.hh:185 msgid "Queue is not empty after external input" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:187 +#: src/emc/rs274ngc/rs274ngc_return.hh:186 msgid "Can't select analog input with wait type != immediate return" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:188 +#: src/emc/rs274ngc/rs274ngc_return.hh:187 msgid "Zero timeout with wait type != immediate return" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:189 +#: src/emc/rs274ngc/rs274ngc_return.hh:188 msgid "Invalid to select both a digital and an analog input with M66" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:190 +#: src/emc/rs274ngc/rs274ngc_return.hh:189 msgid "Need to have either a valid P or a valid E word with M66" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:191 +#: src/emc/rs274ngc/rs274ngc_return.hh:190 msgid "Q word missing with g73" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:192 +#: src/emc/rs274ngc/rs274ngc_return.hh:191 msgid "Digital input selected out of bounds" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:193 +#: src/emc/rs274ngc/rs274ngc_return.hh:192 msgid "Analog input selected out of bounds" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:194 +#: src/emc/rs274ngc/rs274ngc_return.hh:193 msgid "W value unspecified in UV plane canned cycle" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:195 +#: src/emc/rs274ngc/rs274ngc_return.hh:194 msgid "U value unspecified in VW plane canned cycle" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:196 +#: src/emc/rs274ngc/rs274ngc_return.hh:195 msgid "V value unspecified in UW plane canned cycle" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:197 +#: src/emc/rs274ngc/rs274ngc_return.hh:196 msgid "R less than W in cycle in UV plane" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:198 +#: src/emc/rs274ngc/rs274ngc_return.hh:197 msgid "R less than U in cycle in VW plane" msgstr "" #: src/emc/rs274ngc/rs274ngc_return.hh:199 +#: src/emc/rs274ngc/rs274ngc_return.hh:198 msgid "R less than V in cycle in UW plane" msgstr "" @@ -13455,6 +13730,30 @@ msgstr "" "\n" "Szívesen látunk az AXIS web oldalán: " +#: src/emc/rs274ngc/interp_check.cc:302 +msgid "P value not an integer with G2 or G3" +msgstr "" + +#: src/emc/rs274ngc/interp_check.cc:311 +msgid "" +"Q word with no G5, G10, G64, G73, G76, G83, M66, M67, M68 or user M code " +"that uses it" +msgstr "" + +#: src/emc/rs274ngc/interp_convert.cc:2733 +msgid "Need positive Q-word to specify tool number with M61" +msgstr "" + +#: src/emc/rs274ngc/interp_read.cc:1858 +#, c-format +msgid "Cannot change #<%s>" +msgstr "" + +#: src/emc/rs274ngc/interp_read.cc:1906 +#, c-format +msgid "init_named_parameter must be global #<%s>" +msgstr "" + #, fuzzy #~ msgid "to" #~ msgstr "Stop" diff --git a/src/po/zh_HK.po b/src/po/zh_HK.po index 105c7d0c8..105839692 100644 --- a/src/po/zh_HK.po +++ b/src/po/zh_HK.po @@ -67,7 +67,6 @@ msgid "_Close" msgstr " 關閉(_C) " #: src/hal/utils/scope.c:126 -#, fuzzy msgid "" "Usage:\n" " halscope [-h] [-i infile] [-o outfile] [num_samples]\n" @@ -554,7 +553,7 @@ msgid "Unexpected realtime delay: check dmesg for details." msgstr "意外的實時延遲:檢查 dmesg 的詳細信息." #: src/emc/motion/control.c:263 -#, fuzzy, c-format +#, c-format msgid "" "\n" "In recent history there were\n" @@ -790,15 +789,15 @@ msgstr "在坐標模式做剛性攻絲移動,需要啟動指令" #: src/emc/motion/command.c:1410 msgid "can't do rigid tap move with limits exceeded" -msgstr "" +msgstr "不能做剛性攻絲移動當超過極限" #: src/emc/motion/command.c:1421 msgid "can't add rigid tap move" -msgstr "" +msgstr "不能添加剛性攻絲移動" #: src/emc/motion/command.c:1435 msgid "need to be enabled, in teleop mode for teleop move" -msgstr "" +msgstr "需要激活遠程操作模式,才可作遠程運移動" #: src/emc/motion/command.c:1556 src/emc/motion/command.c:1605 #, c-format @@ -810,10 +809,10 @@ msgstr "joint %d: 太多的補償條目" msgid "joint %d: compensation values must increase" msgstr "joint %d: 補償值必須增加" -#: src/emc/motion/command.c:1591 src/emc/motion/command.c:1640 +#: src/emc/motion/command.c:1591 #, c-format msgid "unrecognized command %d" -msgstr "" +msgstr "無法識別的命令 %d" #: src/emc/motion/motion.c:185 msgid "MOTION: hal_init() failed\n" @@ -873,21 +872,21 @@ msgstr "" #: src/emc/motion/homing.c:80 src/emc/motion/homing.c:748 #, c-format msgid "hit limit in home state %d" -msgstr "" +msgstr "在歸零狀態,碰到極限 %d" #: src/emc/motion/homing.c:90 #, c-format msgid "end of move in home state %d" -msgstr "" +msgstr "在歸零狀態,移動完結 %d" #: src/emc/motion/homing.c:185 #, c-format msgid "unknown state '%d' during homing sequence" -msgstr "" +msgstr "在歸零程序時,不明的狀態 '%d'" #: src/emc/motion/homing.c:246 msgid "Cannot home while shared home switch is closed" -msgstr "" +msgstr "當共享零開關閉上時,不能歸零" #: src/emc/motion/homing.c:290 msgid "" @@ -4902,8 +4901,8 @@ msgstr "" msgid "" "LinuxCNC/AXIS version $version\n" "\n" -"Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Jeff Epler and Chris " -"Radek.\n" +"Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Jeff " +"Epler and Chris Radek.\n" "\n" "This is free software, and you are welcome to redistribute it under certain " "conditions. See the file COPYING, included with LinuxCNC.\n" @@ -12039,8 +12038,8 @@ msgstr "不能使用 G5.3沒有 G5.2先行" #: src/emc/rs274ngc/interp_convert.cc:183 #, c-format msgid "" -"You must specify a number of control points at least equal to the order L = " -"%d" +"You must specify a number of control points at least equal to the order L = %" +"d" msgstr "您必須指定一個數字控制點至少等於順序L =%d" #: src/emc/rs274ngc/interp_convert.cc:212 @@ -13544,6 +13543,19 @@ msgstr "" msgid "Bug: call stack underrun" msgstr "" +#: share/axis/tcl/axis.tcl:1711 +msgid "" +"LinuxCNC/AXIS version $version\n" +"\n" +"Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Jeff Epler and Chris " +"Radek.\n" +"\n" +"This is free software, and you are welcome to redistribute it under certain " +"conditions. See the file COPYING, included with LinuxCNC.\n" +"\n" +"Visit the LinuxCNC web site: " +msgstr "" + #~ msgid "About TkEmc" #~ msgstr "關於 TkEmc" diff --git a/tests/linuxcncrsh/skip b/tests/linuxcncrsh/skip new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/linuxcncrsh/skip diff --git a/tests/t0/nonrandom/skip b/tests/t0/nonrandom/skip new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/t0/nonrandom/skip diff --git a/tests/t0/random-with-t0/skip b/tests/t0/random-with-t0/skip new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/t0/random-with-t0/skip diff --git a/tests/t0/random-without-t0/skip b/tests/t0/random-without-t0/skip new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/t0/random-without-t0/skip diff --git a/tests/toolchanger/.gitignore b/tests/toolchanger/.gitignore new file mode 100644 index 000000000..b39ac728b --- /dev/null +++ b/tests/toolchanger/.gitignore @@ -0,0 +1,5 @@ +sim.var +sim.var.bak +simpockets.tbl +stdout +gcode-output diff --git a/tests/toolchanger/README b/tests/toolchanger/README new file mode 100644 index 000000000..40e6282cc --- /dev/null +++ b/tests/toolchanger/README @@ -0,0 +1,14 @@ + +The tests in this directory attempt to verify the correct behavior of +the tool table and the tool changer. + +Two tests are run: one on a random toolchanger and one on a nonrandom +toolchanger. Both tests perform the same operations, and expect (nearly) +the same results. + +A full LinuxCNC instance is started, with linuxcncrsh as the UI. A bunch +of gcode commands are run via MDI, and the internal state of LinuxCNC +is accessed via numbered parameters. A custom M-code shell script is +used to write these parameter values to a file, which is then compared +to a hand-crafted "expected values" file. + diff --git a/tests/toolchanger/core_sim.hal b/tests/toolchanger/core_sim.hal new file mode 100644 index 000000000..e5db5f3b3 --- /dev/null +++ b/tests/toolchanger/core_sim.hal @@ -0,0 +1,53 @@ +# core HAL config file for simulation + +# first load all the RT modules that will be needed +# kinematics +loadrt trivkins +# 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=[TRAJ]AXES +# load 6 differentiators (for velocity and accel signals +loadrt ddt count=6 +# load additional blocks +loadrt hypot count=2 +loadrt comp count=3 +loadrt or2 count=1 + +# 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.0 servo-thread +addf ddt.1 servo-thread +addf ddt.2 servo-thread +addf ddt.3 servo-thread +addf ddt.4 servo-thread +addf ddt.5 servo-thread +addf hypot.0 servo-thread +addf hypot.1 servo-thread + +# create HAL signals for position commands from motion module +# loop position commands back to motion module feedback +net Xpos axis.0.motor-pos-cmd => axis.0.motor-pos-fb ddt.0.in +net Ypos axis.1.motor-pos-cmd => axis.1.motor-pos-fb ddt.2.in +net Zpos axis.2.motor-pos-cmd => axis.2.motor-pos-fb ddt.4.in + +# send the position commands thru differentiators to +# generate velocity and accel signals +net Xvel ddt.0.out => ddt.1.in hypot.0.in0 +net Xacc <= ddt.1.out +net Yvel ddt.2.out => ddt.3.in hypot.0.in1 +net Yacc <= ddt.3.out +net Zvel ddt.4.out => ddt.5.in hypot.1.in0 +net Zacc <= ddt.5.out + +# Cartesian 2- and 3-axis velocities +net XYvel hypot.0.out => hypot.1.in1 +net XYZvel <= hypot.1.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 + diff --git a/tests/toolchanger/shared-checkresult b/tests/toolchanger/shared-checkresult new file mode 100755 index 000000000..9dd30b26e --- /dev/null +++ b/tests/toolchanger/shared-checkresult @@ -0,0 +1,6 @@ +#!/bin/bash + +TEST_DIR=$(dirname $1) +cd $TEST_DIR + +diff -u expected-gcode-output gcode-output diff --git a/tests/toolchanger/subs/M100 b/tests/toolchanger/subs/M100 new file mode 100755 index 000000000..b32c24334 --- /dev/null +++ b/tests/toolchanger/subs/M100 @@ -0,0 +1,29 @@ +#!/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 +# + +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 + +case $P in + 0.000000) echo "X = $Q" >> $OUT_FILE;; + 1.000000) echo "Y = $Q" >> $OUT_FILE;; + 2.000000) echo "Z = $Q" >> $OUT_FILE;; + 3.000000) echo "toolno = $Q" >> $OUT_FILE;; + 4.000000) echo "tlo_z = $Q" >> $OUT_FILE;; + 5.000000) echo "" >> $OUT_FILE;; + 6.000000) echo "sequence number $Q" >> $OUT_FILE;; + *) + echo "unknown P=$P (Q=$Q)" >> $OUT_FILE + exit 1;; +esac + diff --git a/tests/toolchanger/toolno-pocket-differ/nonrandom/checkresult b/tests/toolchanger/toolno-pocket-differ/nonrandom/checkresult new file mode 120000 index 000000000..2660372fe --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/nonrandom/checkresult @@ -0,0 +1 @@ +../../shared-checkresult
\ No newline at end of file diff --git a/tests/toolchanger/toolno-pocket-differ/nonrandom/expected-gcode-output b/tests/toolchanger/toolno-pocket-differ/nonrandom/expected-gcode-output new file mode 100644 index 000000000..97a7d6f2a --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/nonrandom/expected-gcode-output @@ -0,0 +1,217 @@ +sequence number 0.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.000000 +toolno = 0.000000 +tlo_z = 0.000000 + +sequence number 1.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.000000 +toolno = 1.000000 +tlo_z = 1.000000 + +sequence number 2.000000 +X = 0.000000 +Y = 0.000000 +Z = -1.000000 +toolno = 1.000000 +tlo_z = 1.000000 + +sequence number 3.000000 +X = 0.000000 +Y = 0.000000 +Z = -1.000000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 4.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 5.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 6.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 7.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 8.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 9.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 10.000000 +tlo_z = -0.150000 + +sequence number 10.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.150000 +toolno = 10.000000 +tlo_z = -0.150000 + +sequence number 11.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.150000 +toolno = 10.000000 +tlo_z = -0.150000 + +sequence number 12.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.150000 +toolno = 10.000000 +tlo_z = -0.150000 + +sequence number 13.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.150000 +toolno = 10.000000 +tlo_z = -0.103500 + +sequence number 14.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.103500 +toolno = 10.000000 +tlo_z = -0.103500 + +sequence number 15.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.103500 +toolno = 10.000000 +tlo_z = -0.103500 + +sequence number 16.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.103500 +toolno = 10.000000 +tlo_z = -0.103500 + +sequence number 17.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.103500 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 18.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 19.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 20.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 21.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 22.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 23.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.400000 + +sequence number 24.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.400000 +toolno = 99999.000000 +tlo_z = -0.400000 + +sequence number 25.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.400000 +toolno = 1.000000 +tlo_z = -0.300000 + +sequence number 26.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.300000 +toolno = 1.000000 +tlo_z = -0.300000 + +sequence number 27.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.300000 +toolno = 10.000000 +tlo_z = -0.350000 + +sequence number 28.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.350000 +toolno = 10.000000 +tlo_z = -0.350000 + +sequence number 29.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.350000 +toolno = 99999.000000 +tlo_z = -0.400000 + +sequence number 30.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.400000 +toolno = 99999.000000 +tlo_z = -0.400000 + diff --git a/tests/toolchanger/toolno-pocket-differ/nonrandom/sim.ini b/tests/toolchanger/toolno-pocket-differ/nonrandom/sim.ini new file mode 100644 index 000000000..1b8404c10 --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/nonrandom/sim.ini @@ -0,0 +1,83 @@ +[EMC] +#DEBUG = 0 +DEBUG = 0x7fffffff + +[DISPLAY] +DISPLAY = linuxcncrsh +PROGRAM_PREFIX = ../../subs + +[TASK] +TASK = milltask +CYCLE_TIME = 0.001 + +[RS274NGC] +PARAMETER_FILE = sim.var +USER_M_PATH = ../../subs +SUBROUTINE_PATH = ../../subs + +[EMCMOT] +EMCMOT = motmod +COMM_TIMEOUT = 2.0 +COMM_WAIT = 0.010 +BASE_PERIOD = 0 +SERVO_PERIOD = 1000000 + +[HAL] +HALFILE = ../../core_sim.hal + +[TRAJ] +AXES = 3 +COORDINATES = X Y Z +HOME = 0 0 0 +LINEAR_UNITS = inch +ANGULAR_UNITS = degree +CYCLE_TIME = 0.010 +DEFAULT_VELOCITY = 1.2 +MAX_LINEAR_VELOCITY = 4 + +[EMCIO] +EMCIO = io +CYCLE_TIME = 0.100 +TOOL_TABLE = simpockets.tbl +TOOL_CHANGE_QUILL_UP = 1 +RANDOM_TOOLCHANGER = 0 + +[AXIS_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 + +[AXIS_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 + +[AXIS_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 + diff --git a/tests/toolchanger/toolno-pocket-differ/nonrandom/skip b/tests/toolchanger/toolno-pocket-differ/nonrandom/skip new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/nonrandom/skip diff --git a/tests/toolchanger/toolno-pocket-differ/nonrandom/test.sh b/tests/toolchanger/toolno-pocket-differ/nonrandom/test.sh new file mode 120000 index 000000000..0b01664e6 --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/nonrandom/test.sh @@ -0,0 +1 @@ +../shared-test.sh
\ No newline at end of file diff --git a/tests/toolchanger/toolno-pocket-differ/random/checkresult b/tests/toolchanger/toolno-pocket-differ/random/checkresult new file mode 120000 index 000000000..2660372fe --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/random/checkresult @@ -0,0 +1 @@ +../../shared-checkresult
\ No newline at end of file diff --git a/tests/toolchanger/toolno-pocket-differ/random/expected-gcode-output b/tests/toolchanger/toolno-pocket-differ/random/expected-gcode-output new file mode 100644 index 000000000..13833408d --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/random/expected-gcode-output @@ -0,0 +1,217 @@ +sequence number 0.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.000000 +toolno = -1.000000 +tlo_z = 0.000000 + +sequence number 1.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.000000 +toolno = 1.000000 +tlo_z = 1.000000 + +sequence number 2.000000 +X = 0.000000 +Y = 0.000000 +Z = -1.000000 +toolno = 1.000000 +tlo_z = 1.000000 + +sequence number 3.000000 +X = 0.000000 +Y = 0.000000 +Z = -1.000000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 4.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 5.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 6.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 7.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 8.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 1.000000 +tlo_z = -0.100000 + +sequence number 9.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.100000 +toolno = 10.000000 +tlo_z = -0.150000 + +sequence number 10.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.150000 +toolno = 10.000000 +tlo_z = -0.150000 + +sequence number 11.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.150000 +toolno = 10.000000 +tlo_z = -0.150000 + +sequence number 12.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.150000 +toolno = 10.000000 +tlo_z = -0.150000 + +sequence number 13.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.150000 +toolno = 10.000000 +tlo_z = -0.103500 + +sequence number 14.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.103500 +toolno = 10.000000 +tlo_z = -0.103500 + +sequence number 15.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.103500 +toolno = 10.000000 +tlo_z = -0.103500 + +sequence number 16.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.103500 +toolno = 10.000000 +tlo_z = -0.103500 + +sequence number 17.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.103500 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 18.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 19.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 20.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 21.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 22.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.104000 + +sequence number 23.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.104000 +toolno = 99999.000000 +tlo_z = -0.400000 + +sequence number 24.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.400000 +toolno = 99999.000000 +tlo_z = -0.400000 + +sequence number 25.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.400000 +toolno = 1.000000 +tlo_z = -0.300000 + +sequence number 26.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.300000 +toolno = 1.000000 +tlo_z = -0.300000 + +sequence number 27.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.300000 +toolno = 10.000000 +tlo_z = -0.350000 + +sequence number 28.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.350000 +toolno = 10.000000 +tlo_z = -0.350000 + +sequence number 29.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.350000 +toolno = 99999.000000 +tlo_z = -0.400000 + +sequence number 30.000000 +X = 0.000000 +Y = 0.000000 +Z = 0.400000 +toolno = 99999.000000 +tlo_z = -0.400000 + diff --git a/tests/toolchanger/toolno-pocket-differ/random/sim.ini b/tests/toolchanger/toolno-pocket-differ/random/sim.ini new file mode 100644 index 000000000..b66cc5a4f --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/random/sim.ini @@ -0,0 +1,83 @@ +[EMC] +#DEBUG = 0 +DEBUG = 0x7fffffff + +[DISPLAY] +DISPLAY = linuxcncrsh +PROGRAM_PREFIX = ../../subs + +[TASK] +TASK = milltask +CYCLE_TIME = 0.001 + +[RS274NGC] +PARAMETER_FILE = sim.var +USER_M_PATH = ../../subs +SUBROUTINE_PATH = ../../subs + +[EMCMOT] +EMCMOT = motmod +COMM_TIMEOUT = 2.0 +COMM_WAIT = 0.010 +BASE_PERIOD = 0 +SERVO_PERIOD = 1000000 + +[HAL] +HALFILE = ../../core_sim.hal + +[TRAJ] +AXES = 3 +COORDINATES = X Y Z +HOME = 0 0 0 +LINEAR_UNITS = inch +ANGULAR_UNITS = degree +CYCLE_TIME = 0.010 +DEFAULT_VELOCITY = 1.2 +MAX_LINEAR_VELOCITY = 4 + +[EMCIO] +EMCIO = io +CYCLE_TIME = 0.100 +TOOL_TABLE = simpockets.tbl +TOOL_CHANGE_QUILL_UP = 1 +RANDOM_TOOLCHANGER = 1 + +[AXIS_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 + +[AXIS_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 + +[AXIS_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 + diff --git a/tests/toolchanger/toolno-pocket-differ/random/skip b/tests/toolchanger/toolno-pocket-differ/random/skip new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/random/skip diff --git a/tests/toolchanger/toolno-pocket-differ/random/test.sh b/tests/toolchanger/toolno-pocket-differ/random/test.sh new file mode 120000 index 000000000..0b01664e6 --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/random/test.sh @@ -0,0 +1 @@ +../shared-test.sh
\ No newline at end of file diff --git a/tests/toolchanger/toolno-pocket-differ/shared-test.sh b/tests/toolchanger/toolno-pocket-differ/shared-test.sh new file mode 100755 index 000000000..20d09a5cd --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/shared-test.sh @@ -0,0 +1,151 @@ +#!/bin/bash +set -x + +rm -f sim.var + +# reset the tool table to a known starting configuration +rm -f simpockets.tbl +cp ../simpockets.tbl.orig simpockets.tbl + +rm -f gcode-output + +linuxcnc -d -v sim.ini & + +# let linuxcnc come up +sleep 5 + +( + function introspect() { + SEQUENCE_NUMBER=$1 + echo "set mdi m100 P6 Q$SEQUENCE_NUMBER" # sequence number + echo 'set mdi m100 P0 Q#5420' # X + echo 'set mdi m100 P1 Q#5421' # Y + echo 'set mdi m100 P2 Q#5422' # Z + echo 'set mdi m100 P3 Q#5400' # toolno + echo 'set mdi m100 P4 Q#5403' # TLO z + echo 'set mdi m100 P5' # blank line + } + + echo hello EMC mt 1.0 + echo set enable EMCTOO + + echo set estop off + echo set machine on + + echo set home 0 + echo set home 1 + echo set home 2 + sleep 1 + + echo set mode mdi + + introspect 0 + + echo set mdi t1 m6 + introspect 1 + + echo set mdi g43 + introspect 2 + + echo set mdi g10 l10 p1 z.1 + introspect 3 + + echo set mdi g43 + introspect 4 + + echo set mdi g10 l10 p10 z.15 + introspect 5 + + echo set mdi g43 + introspect 6 + + echo set mdi g10 l10 p99999 z.2 + introspect 7 + + echo set mdi g43 + introspect 8 + + + echo set mdi t10 m6 + introspect 9 + + echo set mdi g43 + introspect 10 + + echo set mdi g10 l10 p1 z.103 + introspect 11 + + echo set mdi g43 + introspect 12 + + echo set mdi g10 l10 p10 z.1035 + introspect 13 + + echo set mdi g43 + introspect 14 + + echo set mdi g10 l10 p99999 z.104 + introspect 15 + + echo set mdi g43 + introspect 16 + + + echo set mdi t99999 m6 + introspect 17 + + echo set mdi g43 + introspect 18 + + echo set mdi g10 l10 p1 z.3 + introspect 19 + + echo set mdi g43 + introspect 20 + + echo set mdi g10 l10 p10 z.35 + introspect 21 + + echo set mdi g43 + introspect 22 + + echo set mdi g10 l10 p99999 z.4 + introspect 23 + + echo set mdi g43 + introspect 24 + + + echo set mdi t1 m6 + introspect 25 + + echo set mdi g43 + introspect 26 + + + echo set mdi t10 m6 + introspect 27 + + echo set mdi g43 + introspect 28 + + + echo set mdi t99999 m6 + introspect 29 + + echo set mdi g43 + introspect 30 + + + # give linuxcnc a second to finish + sleep 1.0 + + echo shutdown +) | telnet localhost 5007 + + +# wait for linuxcnc to finish +wait + +exit 0 + diff --git a/tests/toolchanger/toolno-pocket-differ/simpockets.tbl.orig b/tests/toolchanger/toolno-pocket-differ/simpockets.tbl.orig new file mode 100644 index 000000000..4b427daaf --- /dev/null +++ b/tests/toolchanger/toolno-pocket-differ/simpockets.tbl.orig @@ -0,0 +1,3 @@ +T1 P1 D0.125000 Z+1.000000 ; +T10 P3 D0.500000 Z+3.000000 ; +T99999 P50 Z+2.000000 ; |